Guest User

Untitled

a guest
May 16th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Copyright 2013 Percona LLC and/or its affiliates
  4.  
  5. POSITIONAL=()
  6. while [[ $# -gt 0 ]]
  7. do
  8. key="$1"
  9.  
  10. case $key in
  11. -h|--host)
  12. HOST="$2"
  13. shift # past argument
  14. shift # past value
  15. ;;
  16. -u|--user)
  17. USER="$2"
  18. shift # past argument
  19. shift # past value
  20. ;;
  21. -p|--password)
  22. PASSWORD="$2"
  23. shift # past argument
  24. shift # past value
  25. ;;
  26. --no-password)
  27. NOPW=YES
  28. shift # past argument
  29. ;;
  30. --help)
  31. HELP=YES
  32. shift # past argument
  33. ;;
  34. *) # unknown option
  35. POSITIONAL+=("$1") # save it in an array for later
  36. shift # past argument
  37. ;;
  38. esac
  39. done
  40.  
  41. set -- "${POSITIONAL[@]}" # restore positional parameters
  42. DBFROM=$1
  43. DBTO=$2
  44.  
  45. echo "Renaming database ${DBFROM} to ${DBTO} on host ${HOST} with user name ${USER}..."
  46. if [ -n "$NOPW" ]; then
  47. echo "Not using password."
  48. else
  49. echo "Using password."
  50. fi
  51.  
  52. if [ -n "$HELP" ]; then
  53. echo "rename_db <old_db> <new_db> -h <server> -u <user> -p <password> or --no-password"
  54. exit 1
  55. fi
  56.  
  57. if [ -n "$NOPW" ]; then
  58. MYSQL="mysql -h $HOST -u $USER"
  59. else
  60. MYSQL="mysql -h $HOST -u $USER -p$PASSWORD"
  61. fi
  62.  
  63. db_exists=`$MYSQL -e "show databases like '$DBTO'" -sss`
  64. if [ -n "$db_exists" ]; then
  65. echo "ERROR: New database already exists: $DBTO"
  66. exit 1
  67. fi
  68. echo "OK: New database doesn't exist"
  69.  
  70. TIMESTAMP=`date +%s`
  71. character_set=`$MYSQL -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '$DBFROM'" -sss`
  72. TABLES=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='BASE TABLE'" -sss`
  73. STATUS=$?
  74. if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
  75. echo "Error retrieving tables from $DBFROM"
  76. exit 1
  77. fi
  78. echo "create database $DBTO DEFAULT CHARACTER SET $character_set"
  79. $MYSQL -e "create database $DBTO DEFAULT CHARACTER SET $character_set"
  80. TRIGGERS=`$MYSQL $DBFROM -e "show triggers" | grep Trigger: | awk '{print $DBFROM}'`
  81. VIEWS=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='VIEW'" -sss`
  82. if [ -n "$VIEWS" ]; then
  83. mysqldump -h $HOST $DBFROM $VIEWS > /tmp/${DBFROM}_views${TIMESTAMP}.dump
  84. fi
  85. mysqldump -h $HOST $DBFROM -d -t -R -E > /tmp/${DBFROM}_triggers${TIMESTAMP}.dump
  86. for TRIGGER in $TRIGGERS; do
  87. echo "drop trigger $TRIGGER"
  88. $MYSQL $DBFROM -e "drop trigger $TRIGGER"
  89. done
  90. for TABLE in $TABLES; do
  91. echo "rename table $DBFROM.$TABLE to $DBTO.$TABLE"
  92. $MYSQL $DBTO -e "SET FOREIGN_KEY_CHECKS=0; rename table $DBFROM.$TABLE to $DBTO.$TABLE"
  93. done
  94. if [ -n "$VIEWS" ]; then
  95. echo "Loading views..."
  96. $MYSQL $DBTO < /tmp/${DBFROM}_views${TIMESTAMP}.dump
  97. echo "Done."
  98. fi
  99. echo "Loading triggers, routines and events..."
  100. $MYSQL $DBTO < /tmp/${DBFROM}_triggers${TIMESTAMP}.dump
  101. TABLES=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='BASE TABLE'" -sss`
  102. if [ -z "$TABLES" ]; then
  103. echo "Dropping database $DBFROM"
  104. $MYSQL $DBFROM -e "drop database $DBFROM"
  105. fi
  106. if [ `$MYSQL -e "select count(*) from mysql.columns_priv where db='$DBFROM'" -sss` -gt 0 ]; then
  107. COLUMNS_PRIV=" UPDATE mysql.columns_priv set db='$DBTO' WHERE db='$DBFROM';"
  108. fi
  109. if [ `$MYSQL -e "select count(*) from mysql.procs_priv where db='$DBFROM'" -sss` -gt 0 ]; then
  110. PROCS_PRIV=" UPDATE mysql.procs_priv set db='$DBTO' WHERE db='$DBFROM';"
  111. fi
  112. if [ `$MYSQL -e "select count(*) from mysql.tables_priv where db='$DBFROM'" -sss` -gt 0 ]; then
  113. TABLES_PRIV=" UPDATE mysql.tables_priv set db='$DBTO' WHERE db='$DBFROM';"
  114. fi
  115. if [ `$MYSQL -e "select count(*) from mysql.db where db='$DBFROM'" -sss` -gt 0 ]; then
  116. DB_PRIV=" UPDATE mysql.db set db='$DBTO' WHERE db='$DBFROM';"
  117. fi
  118. echo "Rename Done."
  119. if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then
  120. echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:"
  121. if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi
  122. if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi
  123. if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi
  124. if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi
  125. echo " flush privileges;"
  126. fi
Add Comment
Please, Sign In to add comment