puoi rinominare il database usando il seguente comando ma assicurati di eseguire prima il backup
CREATE database new_db_name;
RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
DROP database db_name;
riferimenti:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Puoi farlo usando mysqldump. Ecco il trucco:non puoi spedire i dati perché potrebbe esserci un costo associato alla spedizione dei dati.
Per questo esempio, diciamo che vuoi rinominare mydb
a ourdb
PASSAGGIO 01:Crea il nuovo database
mysql> CREATE DATABASE ourdb;
PASSAGGIO 02:Ottieni lo schema senza i trigger
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
PASSAGGIO 03:Ottieni i trigger
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
PASSAGGIO 04:Genera lo script per eseguire INSERT ... SELECT
su tutte le tabelle
SE CI SONO VINCOLI DI CHIAVE ESTERA
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
echo -n > ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT}
echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@TIME_ZONE;" >> ${ETL_DATA_SCRIPT}
echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT}
echo "SET @[email protected]@SQL_NOTES, SQL_NOTES=0;" >> ${ETL_DATA_SCRIPT}
echo "SET group_concat_max_len = 104857600;" >> ${ETL_DATA_SCRIPT}
SQL="SELECT CONCAT('INSERT INTO ourdb.',table_name,' SELECt * FROM mydb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" >> ${ETL_DATA_SCRIPT}
SE NON CI SONO VINCOLI DI CHIAVE ESTERA
ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
SQL="SELECT CONCAT('ALTER TABLE mydb.',table_name,' RENAME ourdb.',table_name,';')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='mydb'"
mysql -hrdshost -uuser -ppassword -ANe"${SQL}" > ${ETL_DATA_SCRIPT}
Se non ci sono vincoli di chiave esterna, questo dovrebbe andare veloce.
PASSAGGIO 05:Combina i file in un singolo script
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
PASSAGGIO 06:rivedi lo script
vi -R /tmp/ETL.sql
o
less /tmp/ETL.sql
PASSAGGIO 07:esegui lo script
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
PASSAGGIO 08:assicurati che tutti i dati siano nel database di destinazione
Puoi farlo
Se non ci fossero vincoli di chiave esterna, mydb dovrebbe essere vuoto e ourdb dovrebbe avere tutte le tabelle.
Se c'erano vincoli di chiave esterna, assicurati mydb
e ourdb
hanno lo stesso numero di tabelle e lo stesso numero di righe. Assicurati che tutti i trigger siano presenti eseguendo
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
PASSAGGIO 09:eliminare manualmente il vecchio database
mysql> DROP DATABASE mydb;
Non ho incluso l'eliminazione del database nello script, per ogni evenienza. :-)