GNU/Linux >> Linux の 問題 >  >> Linux

Amazon:Amazon RDS MySQL でデータベース名を変更するには?

次のコマンドを使用してデータベースの名前を変更できますが、最初に必ずバックアップを取ってください

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;

念のため、スクリプトにデータベースの削除は含めませんでした。 :-)

試してみてください!!!


Linux
  1. MySQLデータベースの照合を変更する方法は?

  2. MySQLデータベースをコピーする方法

  3. AmazonLinuxにMySQL5.7をインストールする方法

  1. MySQLWorkbenchを使用してMySQLでデータベースを作成する方法

  2. MYSQL MariaDB でエクスポート データベースをインポートする方法

  3. ps -pで時間形式を秒に変更するには?

  1. MySQLデータベースをバックアップおよび復元する方法

  2. MySQL スレーブ データベースの構成方法

  3. mysql ルート パスワードを変更する方法