diff options
author | Florian Pritz <bluewind@xinu.at> | 2015-10-26 17:11:38 +0100 |
---|---|---|
committer | Florian Pritz <bluewind@xinu.at> | 2015-10-26 17:11:38 +0100 |
commit | ec54b9528b2eb32d5775bc1ff3566f1e2e2db955 (patch) | |
tree | faafce0250705f97785b0bf30b092f9e27362fe3 /rename_db | |
parent | 1c304f96c427d3538934fffa075ab50d7ab7d64a (diff) | |
download | bin-ec54b9528b2eb32d5775bc1ff3566f1e2e2db955.tar.gz bin-ec54b9528b2eb32d5775bc1ff3566f1e2e2db955.tar.xz |
Add new scripts
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Diffstat (limited to 'rename_db')
-rwxr-xr-x | rename_db | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/rename_db b/rename_db new file mode 100755 index 0000000..eacff17 --- /dev/null +++ b/rename_db @@ -0,0 +1,67 @@ +#!/bin/bash +# Copyright 2013 Percona LLC and/or its affiliates +set -e +if [ -z "$3" ]; then + echo "rename_db <server> <database> <new_database>" + exit 1 +fi +db_exists=`mysql -h $1 -e "show databases like '$3'" -sss` +if [ -n "$db_exists" ]; then + echo "ERROR: New database already exists $3" + exit 1 +fi +TIMESTAMP=`date +%s` +character_set=`mysql -h $1 -e "show create database $2\G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print $2}' | awk '{print $1}'` +TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss` +STATUS=$? +if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then + echo "Error retrieving tables from $2" + exit 1 +fi +echo "create database $3 DEFAULT CHARACTER SET $character_set" +mysql -h $1 -e "create database $3 DEFAULT CHARACTER SET $character_set" +TRIGGERS=`mysql -h $1 $2 -e "show triggers\G" | grep Trigger: | awk '{print $2}'` +VIEWS=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='VIEW'" -sss` +if [ -n "$VIEWS" ]; then + mysqldump -h $1 $2 $VIEWS > /tmp/${2}_views${TIMESTAMP}.dump +fi +mysqldump -h $1 $2 -d -t -R -E > /tmp/${2}_triggers${TIMESTAMP}.dump +for TRIGGER in $TRIGGERS; do + echo "drop trigger $TRIGGER" + mysql -h $1 $2 -e "drop trigger $TRIGGER" +done +for TABLE in $TABLES; do + echo "rename table $2.$TABLE to $3.$TABLE" + mysql -h $1 $2 -e "SET FOREIGN_KEY_CHECKS=0; rename table $2.$TABLE to $3.$TABLE" +done +if [ -n "$VIEWS" ]; then + echo "loading views" + mysql -h $1 $3 < /tmp/${2}_views${TIMESTAMP}.dump +fi +echo "loading triggers, routines and events" +mysql -h $1 $3 < /tmp/${2}_triggers${TIMESTAMP}.dump +TABLES=`mysql -h $1 -e "select TABLE_NAME from information_schema.tables where table_schema='$2' and TABLE_TYPE='BASE TABLE'" -sss` +if [ -z "$TABLES" ]; then + echo "Dropping database $2" + mysql -h $1 $2 -e "drop database $2" +fi +if [ `mysql -h $1 -e "select count(*) from mysql.columns_priv where db='$2'" -sss` -gt 0 ]; then + COLUMNS_PRIV=" UPDATE mysql.columns_priv set db='$3' WHERE db='$2';" +fi +if [ `mysql -h $1 -e "select count(*) from mysql.procs_priv where db='$2'" -sss` -gt 0 ]; then + PROCS_PRIV=" UPDATE mysql.procs_priv set db='$3' WHERE db='$2';" +fi +if [ `mysql -h $1 -e "select count(*) from mysql.tables_priv where db='$2'" -sss` -gt 0 ]; then + TABLES_PRIV=" UPDATE mysql.tables_priv set db='$3' WHERE db='$2';" +fi +if [ `mysql -h $1 -e "select count(*) from mysql.db where db='$2'" -sss` -gt 0 ]; then + DB_PRIV=" UPDATE mysql.db set db='$3' WHERE db='$2';" +fi +if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then + echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:" + if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi + if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi + if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi + if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi + echo " flush privileges;" +fi |