Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # Copyright 2013 Percona LLC and/or its affiliates
- POSITIONAL=()
- while [[ $# -gt 0 ]]
- do
- key="$1"
- case $key in
- -h|--host)
- HOST="$2"
- shift # past argument
- shift # past value
- ;;
- -u|--user)
- USER="$2"
- shift # past argument
- shift # past value
- ;;
- -p|--password)
- PASSWORD="$2"
- shift # past argument
- shift # past value
- ;;
- --no-password)
- NOPW=YES
- shift # past argument
- ;;
- --help)
- HELP=YES
- shift # past argument
- ;;
- *) # unknown option
- POSITIONAL+=("$1") # save it in an array for later
- shift # past argument
- ;;
- esac
- done
- set -- "${POSITIONAL[@]}" # restore positional parameters
- DBFROM=$1
- DBTO=$2
- echo "Renaming database ${DBFROM} to ${DBTO} on host ${HOST} with user name ${USER}..."
- if [ -n "$NOPW" ]; then
- echo "Not using password."
- else
- echo "Using password."
- fi
- if [ -n "$HELP" ]; then
- echo "rename_db <old_db> <new_db> -h <server> -u <user> -p <password> or --no-password"
- exit 1
- fi
- if [ -n "$NOPW" ]; then
- MYSQL="mysql -h $HOST -u $USER"
- else
- MYSQL="mysql -h $HOST -u $USER -p$PASSWORD"
- fi
- db_exists=`$MYSQL -e "show databases like '$DBTO'" -sss`
- if [ -n "$db_exists" ]; then
- echo "ERROR: New database already exists: $DBTO"
- exit 1
- fi
- echo "OK: New database doesn't exist"
- TIMESTAMP=`date +%s`
- character_set=`$MYSQL -e "SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = '$DBFROM'" -sss`
- TABLES=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='BASE TABLE'" -sss`
- STATUS=$?
- if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then
- echo "Error retrieving tables from $DBFROM"
- exit 1
- fi
- echo "create database $DBTO DEFAULT CHARACTER SET $character_set"
- $MYSQL -e "create database $DBTO DEFAULT CHARACTER SET $character_set"
- TRIGGERS=`$MYSQL $DBFROM -e "show triggers" | grep Trigger: | awk '{print $DBFROM}'`
- VIEWS=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='VIEW'" -sss`
- if [ -n "$VIEWS" ]; then
- mysqldump -h $HOST $DBFROM $VIEWS > /tmp/${DBFROM}_views${TIMESTAMP}.dump
- fi
- mysqldump -h $HOST $DBFROM -d -t -R -E > /tmp/${DBFROM}_triggers${TIMESTAMP}.dump
- for TRIGGER in $TRIGGERS; do
- echo "drop trigger $TRIGGER"
- $MYSQL $DBFROM -e "drop trigger $TRIGGER"
- done
- for TABLE in $TABLES; do
- echo "rename table $DBFROM.$TABLE to $DBTO.$TABLE"
- $MYSQL $DBTO -e "SET FOREIGN_KEY_CHECKS=0; rename table $DBFROM.$TABLE to $DBTO.$TABLE"
- done
- if [ -n "$VIEWS" ]; then
- echo "Loading views..."
- $MYSQL $DBTO < /tmp/${DBFROM}_views${TIMESTAMP}.dump
- echo "Done."
- fi
- echo "Loading triggers, routines and events..."
- $MYSQL $DBTO < /tmp/${DBFROM}_triggers${TIMESTAMP}.dump
- TABLES=`$MYSQL -e "select TABLE_NAME from information_schema.tables where table_schema='$DBFROM' and TABLE_TYPE='BASE TABLE'" -sss`
- if [ -z "$TABLES" ]; then
- echo "Dropping database $DBFROM"
- $MYSQL $DBFROM -e "drop database $DBFROM"
- fi
- if [ `$MYSQL -e "select count(*) from mysql.columns_priv where db='$DBFROM'" -sss` -gt 0 ]; then
- COLUMNS_PRIV=" UPDATE mysql.columns_priv set db='$DBTO' WHERE db='$DBFROM';"
- fi
- if [ `$MYSQL -e "select count(*) from mysql.procs_priv where db='$DBFROM'" -sss` -gt 0 ]; then
- PROCS_PRIV=" UPDATE mysql.procs_priv set db='$DBTO' WHERE db='$DBFROM';"
- fi
- if [ `$MYSQL -e "select count(*) from mysql.tables_priv where db='$DBFROM'" -sss` -gt 0 ]; then
- TABLES_PRIV=" UPDATE mysql.tables_priv set db='$DBTO' WHERE db='$DBFROM';"
- fi
- if [ `$MYSQL -e "select count(*) from mysql.db where db='$DBFROM'" -sss` -gt 0 ]; then
- DB_PRIV=" UPDATE mysql.db set db='$DBTO' WHERE db='$DBFROM';"
- fi
- echo "Rename Done."
- 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
Add Comment
Please, Sign In to add comment