web-dev-qa-db-ja.com

Amazon:Amazon RDS MySQLでデータベース名を変更するにはどうすればよいですか?

変更したいMYSQLデータベース Amazon RDSのDBインスタンスの名前。

それはどのようにして可能ですか?

6
Napster

Mysqldumpを使用してこれをプルオフできます。ここでの問題: データの配送に関連するコストが発生する可能性があるため、データを配送することはできません

この例では、mydbourdbに名前変更したいとしましょう。

ステップ01:新しいデータベースを作成する

mysql> CREATE DATABASE ourdb;

ステップ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

ステップ04:実行するスクリプトを生成するINSERT ... SELECTすべてのテーブル

外国の主要な制約がある場合

ETL_DATA_SCRIPT=/tmp/DataTransfer.sql
echo -n > ${ETL_DATA_SCRIPT}
echo "SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;" >> ${ETL_DATA_SCRIPT}
echo "SET NAMES utf8;" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_TIME_ZONE=@@TIME_ZONE;" >> ${ETL_DATA_SCRIPT}
echo "SET TIME_ZONE='+00:00';" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';" >> ${ETL_DATA_SCRIPT}
echo "SET @OLD_SQL_NOTES=@@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}

外部キーの制約がない場合、これは高速になります。

ステップ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}

ステップ06:スクリプトを確認する

vi -R /tmp/ETL.sql

または

less /tmp/ETL.sql

ステップ07:スクリプトを実行する

mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}

ステップ08:すべてのデータがターゲットデータベースにあることを確認します

出来るよ

外部キー制約がない場合、mydbは空で、ourdbにすべてのテーブルが含まれている必要があります。

外部キー制約がある場合は、mydbourdbに同じ数のテーブルと同じ数の行があることを確認してください。実行してすべてのトリガーが存在することを確認してください

SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;

ステップ09:古いデータベースを手動で削除する

mysql> DROP DATABASE mydb;

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

試してみる !!!

5
RolandoMySQLDBA

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

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

7
Ahmad Abuhasna

最善の方法は、新しいデータベースを作成してからshow tables移動元のデータベースで、すべてのテーブルに対して実行します。

rename table old_db.TABLE_NAME to new_db.TABLE_NAME
0
Marek Knappe

私の場合、変更しようとしたときにDB名がないことに気付きました。

なぜこれが起こったのかわかりませんでした。最終的には、RDSを再構築して物事を機能させました。

0
Ording

データベースをエクスポートしてから、別の名前で再度インポートできます。

mysqldump -u username -p pwd -v old_db_name > old_db_name.sql mysqladmin -u username -p pwd create new_db_name mysql -u username -p pwd new_db_name < old_db_name.sql

ソース: ダンプのMySQLリファレンス

0
LowlyDBA