変更したいMYSQLデータベース Amazon RDSのDBインスタンスの名前。
それはどのようにして可能ですか?
Mysqldumpを使用してこれをプルオフできます。ここでの問題: データの配送に関連するコストが発生する可能性があるため、データを配送することはできません 。
この例では、mydb
をourdb
に名前変更したいとしましょう。
mysql> CREATE DATABASE ourdb;
mysqldump -hrdshost -uuser -ppassword -d -t -R --skip-triggers mydb > /tmp/schema.sql
mysqldump -hrdshost -uuser -ppassword --skip-routines --triggers mydb > /tmp/triggers.sql
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}
外部キーの制約がない場合、これは高速になります。
ETL_SCRIPT=/tmp/ETL.sql
cat /tmp/schema.sql > ${ETL_SCRIPT}
cat /tmp/DataTransfer.sql >> ${ETL_SCRIPT}
cat /tmp/triggers.sql >> ${ETL_SCRIPT}
vi -R /tmp/ETL.sql
または
less /tmp/ETL.sql
mysql -hrdshost -uuser -ppassword -Dourdb < ${ETL_SCRIPT}
出来るよ
外部キー制約がない場合、mydbは空で、ourdbにすべてのテーブルが含まれている必要があります。
外部キー制約がある場合は、mydb
とourdb
に同じ数のテーブルと同じ数の行があることを確認してください。実行してすべてのトリガーが存在することを確認してください
SELECT COUNT(1) trigger_count,table_schema
FROM information_schema.triggers
GROUP By table_schema;
mysql> DROP DATABASE mydb;
念のため、スクリプトにデータベースを削除することは含めませんでした。 :-)
次のコマンドを使用してデータベースの名前を変更できますが、必ず最初にバックアップを取るようにしてください
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
最善の方法は、新しいデータベースを作成してからshow tables
移動元のデータベースで、すべてのテーブルに対して実行します。
rename table old_db.TABLE_NAME to new_db.TABLE_NAME
私の場合、変更しようとしたときにDB名がないことに気付きました。
なぜこれが起こったのかわかりませんでした。最終的には、RDSを再構築して物事を機能させました。
データベースをエクスポートしてから、別の名前で再度インポートできます。
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リファレンス