В mySQL нет выражения вроде RENAME DATABASE oldName to newName. Если возникла задача переименовать базу данных, придется выполнить по-этапно: операции создания новой БД, копирования таблиц из старой базы (RENAME TABLE …) и удаление старой базы.
Здесь рассмотрен пример скрипта, который выполняет все эти три операции.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/sh set -e db user="DBUserName" dbpass="DBUserPass" dbhost="DBhost.adr" olddb=$1 newdb=$2 mysqlconn="mysql -u $dbuser -p$dbpass -h $dbhost" $mysqlconn -e "CREATE DATABASE IF not exists $newdb" params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \ WHERE table_schema='$olddb'") for name in $params; do $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name"; done; $mysqlconn -e "DROP DATABASE $olddb" |
Если база данных расположена локально, то можно не задавать переменную dbhost, и убрать её упоминание из скрипта. Также можно модифицировать скрипт, чтобы все параметры принимались из командной строки. Но в данном примере извне принимаются только два параметра — имя старой базы и имя новой, а настройки подключения должны быть заданы в скрипте.
Т.е вызов скрипта выглядит следующим образом:
1 |
rename_db.sh oldbase newbase |