databázi můžete přejmenovat pomocí následujícího příkazu, ale ujistěte se, že nejprve provedete zálohu
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;
reference:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
Můžete to vytáhnout pomocí mysqldump. Háček:Data nemůžete odeslat, protože s odesláním dat mohou být spojeny náklady.
V tomto příkladu řekněme, že chcete přejmenovat mydb
do ourdb
KROK 01:Vytvořte novou databázi
mysql> CREATE DATABASE ourdb;
KROK 02:Získejte schéma bez spouštěčů
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
KROK 03:Získejte spouštěče
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
KROK 04:Vygenerujte skript pro provedení INSERT ... SELECT
napříč všemi tabulkami
POKUD EXISTUJÍ ZAHRANIČNÍ KLÍČOVÁ OMEZENÍ
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}
POKUD NEEXISTUJE ŽÁDNÁ ZAHRANIČNÍ KLÍČOVÁ OMEZENÍ
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}
Pokud neexistují žádná omezení cizího klíče, mělo by to jít rychle.
KROK 05:Zkombinujte soubory do jednoho skriptu
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
KROK 06:Zkontrolujte skript
vi -R /tmp/ETL.sql
nebo
less /tmp/ETL.sql
KROK 07:Spusťte skript
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
KROK 08:Ujistěte se, že jsou všechna data v cílové databázi
Můžete to udělat
Pokud by neexistovala žádná omezení cizích klíčů, mydb by měl být prázdný a ourdb by měl mít všechny tabulky.
Pokud existovala omezení cizího klíče, ujistěte se, že mydb
a ourdb
mít stejný počet tabulek a stejný počet řádků. Spuštěním
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
KROK 09:Ruční odstranění staré databáze
mysql> DROP DATABASE mydb;
Pro jistotu jsem do skriptu nezahrnul vypuštění databáze. :-)