次のコマンドを使用してデータベースの名前を変更できますが、最初に必ずバックアップを取ってください
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;
参照:http://www.rndblog.com/how-to-rename-a-database-in-mysql/https://stackoverflow.com/questions/12190000/rename-mysql-database
これは、mysqldump を使用して実行できます。問題点:データの発送には費用がかかる可能性があるため、データを発送することはできません。
この例では、mydb
の名前を変更するとします。 ourdb
まで
STEP 01 :新しいデータベースを作成する
mysql> CREATE DATABASE ourdb;
STEP 02 :トリガーなしでスキーマを取得する
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
ステップ 03 :トリガーを取得する
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
STEP 04 :INSERT ... SELECT
を実行するスクリプトを生成する すべてのテーブルで
外部キー制約がある場合
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}
外部キー制約がない場合
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}
外部キー制約がなければ、これは速く進むはずです。
STEP 05 :ファイルを 1 つのスクリプトに結合する
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
STEP 06 :スクリプトを確認する
vi -R /tmp/ETL.sql
または
less /tmp/ETL.sql
ステップ 07 :スクリプトを実行する
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
STEP 08 :すべてのデータがターゲット データベースにあることを確認する
あなたならできます
外部キー制約がない場合、mydb は空で、ourdb にはすべてのテーブルが必要です。
外部キー制約がある場合は、mydb
を確認してください と ourdb
同じ数のテーブルと同じ数の行があります。実行して、すべてのトリガーが存在することを確認してください
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
STEP 09 :古いデータベースを手動で削除する
mysql> DROP DATABASE mydb;
念のため、スクリプトにデータベースの削除は含めませんでした。 :-)