かみぽわーる

kamipo's blog

VPとSPIDERを使って任意のテーブルを別ホストに移行する

MySQLのVPストレージエンジンとSPIDERストレージエンジンを使って、任意のテーブルを別ホストのMySQLに簡単に移行するスクリプトを書きました。
※ただしPRIMARY KEYがあるものに限る

VPとSPIDERを使って任意のテーブルを別ホストに移行する — Gistに置いてあるスクリプトを落としてきて実行権限を付与しておく。

wget http://gist.github.com/raw/571569/cb624c24fac767188b4ee9e4925d3f7bfd4dc443/gistfile1.pl -O mygrate_to
chmod +x mygrate_to

移行先ホストに空のテーブルをつくる。

mysqldump -u kamipo -h old-db-host --opt --no-data old_db table1 table2 table3 |
mysql -u kamipo -h new-db-host -v new_db

移行元ホストのVPとSPIDERを使って移行先ホストにデータをコピーする。

./mygrate_to --host new-db-host -u kamipo -d new_db table1 table2 table3 |
mysql -u kamipo -h old-db-host -v old_db

とっても簡単ですね!

mygrate_toはmysqldumpみたいに標準出力に移行用のSQLをはきだすので、ファイルに保存してテーブルパラメータの調整やパーティショニングを手動で編集すると、最初から全部自分で移行用SQLを書かなくていいので便利だと思います。

あと注意したいのは、MySQLの仕様でCOMMENTは60文字以内に切り詰められるので、とくにVPストレージエンジンのテーブルパラメータは文字数制限に引っかかりがちです。とりあえず短いテーブル名にするなりして回避するしか現状なさそうです。

【追記】
VPとSPIDERのテーブルパラメータはCOMMENTとCONNECTIONのどちらにも書けるので、文字数制限に引っかかりそうな場合はCONNECTIONも併用することで回避できます。
また、MySQL 5.5ではCOMMENTの文字数制限がかなり拡張されているようで、VPとSPIDERのテーブルパラメータを指定する程度では困らないようになっているはずです。