MySQL で DB をリネームする(複製(dump & load), テーブルを移動)
はじめに
MySQL で DB を複製(dump & load)する方法、リネーム(新DBに対して旧DBのテーブルを移動)する方法について整理した。
内容としては MySQLでdumpせずに “RENAME DATABASE” を実現する - Qiita の通り。
TL;DR
- 複製(dump & load)
mysqldump [options] db_name > db_name.dump
mysql [options] new_db_name < db_name.dump
- リネーム(旧DBのテーブルを移動)
RENAME TABLE db_name.table_name TO new_db_name.table_name
× 全テーブル
目次
環境・条件
1 | $ sw_vers |
詳細
複製(dump & load)
mysqldump
で出力したデータを、新しい DB に流し込むだけ。
環境によってユーザー名、パスワード、ポート番号、ホストなど違うと思うので、そのあたりは適宜変更。
dump
1 | $ mysqldump -u user_name -p password db_name > db_name.dump |
load
あらかじめ移行先の DB を作成。
1 | $ mysql -u user_name -p password -e "CREATE DATABASE new_db_name;" |
dump したデータを流し込み。
1 | $ mysql -u user_name -p password new_db_name < db_name.dump |
リネーム(旧DBのテーブルを移動)
以下を実行すると、SQL 文が出力されるのでそれを実行する。
1 | SELECT DISTINCT CONCAT( |
実際に試してみた結果が下記、まずは SQL 文を出力するとこまで。
1 | mysql> show databases; |
新しい DB を作成して、RENAME TABLE
を実行。古い DB からはテーブルが無くなっている。
1 | mysql> create database new_db; |
新しい DB でテーブルとデータを確認、無事に移行できている。
1 | mysql> use new_db; |
まとめ
- 複製(dump & load)
mysqldump [options] db_name > db_name.dump
mysql [options] new_db_name < db_name.dump
- リネーム(旧DBのテーブルを移動)
RENAME TABLE db_name.table_name TO new_db_name.table_name
× 全テーブル
参考文献
- MySQLでdumpせずに “RENAME DATABASE” を実現する - Qiita
- mysqldump - MySQL 5.6 リファレンスマニュアル
- RENAME TABLE 構文 - MySQL 5.6 リファレンスマニュアル
関連記事
- MySQL でユニーク制約と論理削除を同時に実現する方法
- Rails で既存の DB を利用するアプリケーションの作成方法(DB 参照のみ)
- Rails で Devise と論理削除を両立する方法
- Python で MySQL の操作が可能な ORM peewee
- MySQL で良く使う Tips
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)