Sie können die Datenbank mit dem folgenden Befehl umbenennen, aber stellen Sie sicher, dass Sie zuerst eine Sicherungskopie erstellen
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;
Referenzen:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Sie können dies mit mysqldump abziehen. Hier der Haken:Sie können die Daten nicht versenden, da mit dem Versand der Daten Kosten verbunden sein können.
Nehmen wir für dieses Beispiel an, Sie möchten mydb
umbenennen bis ourdb
SCHRITT 01:Erstellen Sie die neue Datenbank
mysql> CREATE DATABASE ourdb;
SCHRITT 02 :Schema ohne Trigger abrufen
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
SCHRITT 03 :Holen Sie sich die Trigger
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
SCHRITT 04 :Generieren Sie ein Skript, um INSERT ... SELECT
auszuführen über alle Tabellen hinweg
WENN ES AUSLÄNDISCHE SCHLÜSSELBESCHRÄNKUNGEN GIBT
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}
WENN ES KEINE AUSLÄNDISCHEN SCHLÜSSELEINSCHRÄNKUNGEN GIBT
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}
Wenn es keine Fremdschlüsselbeschränkungen gibt, sollte dies schnell gehen.
SCHRITT 05:Kombinieren Sie die Dateien zu einem einzigen Skript
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
SCHRITT 06:Überprüfen Sie das Skript
vi -R /tmp/ETL.sql
oder
less /tmp/ETL.sql
SCHRITT 07:Führen Sie das Skript aus
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
SCHRITT 08:Stellen Sie sicher, dass sich alle Daten in der Zieldatenbank befinden
Das können Sie tun
Wenn es keine Fremdschlüsseleinschränkungen gäbe, sollte mydb leer sein und ourdb sollte alle Tabellen enthalten.
Wenn es Fremdschlüsseleinschränkungen gab, stellen Sie sicher, dass mydb
und ourdb
haben die gleiche Anzahl von Tabellen und die gleiche Anzahl von Zeilen. Stellen Sie sicher, dass alle Trigger vorhanden sind, indem Sie
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
SCHRITT 09:Alte Datenbank manuell löschen
mysql> DROP DATABASE mydb;
Ich habe das Löschen der Datenbank nicht in das Skript aufgenommen, nur für den Fall. :-)