MySQLのTransportable Tablespacesのおはなし
今更感あるけど、以下の補足。 kakerukaeru.hatenablog.com
なお、対象のMySQLのバージョンは5.6.26と5.6.27です。
といってもオペレーション自体は特記することもなくて、以下のページをよく読んでそのままやればダイジョウブです。カンタンカンタン。 http://dev.mysql.com/doc/refman/5.6/en/tablespace-copying.html
以下、注意点、というかハマったところ。
複数のテーブルをまとめてエキスポートする場合
FLUSH TABLESは以下のように複数のテーブルをまとめることが可能。
FLUSH TABLES t1, t2, t3, t4 FOR EXPORT;
# (ファイルコピーしてから)
UNLOCK TABLES;
同一セッション内で複数に分けてテーブルをLOCKすることはできないので、以下はダメ。
FLUSH TABLES t1 FOR EXPORT; FLUSH TABLES t2 FOR EXPORT; FLUSH TABLES t3 FOR EXPORT; FLUSH TABLES t4 FOR EXPORT; # (ファイルコピーしてから) UNLOCK TABLES;
移行先がレプリを組んでいる場合
マスタ/スレーブ全台にエキスポートしたファイル(.ibd/.cfg)を配置してから、マスタで以下のSQLを投げればいいだけ...
ALTER TABLE テーブル名 IMPORT TABLESPACE;
なんですけど、このALTER TABLE文、結構IO使うし、テーブルサイズによってはそこそこ時間がかかるので、コレ起因でレプリ遅延が発生orz...
以下のようにレプリさせずに個別に全サーバでIMPORTすれば回避可能なはず。次回があれば試してみます。
SET sql_log_bin = 0; ALTER TABLE テーブル名 IMPORT TABLESPACE; SET sql_log_bin = 1;
インポート用にDB分離しておいて、slave_parallel_workersで複数sql_running動くようにしてもいい気もする。が、そのためだけにslave_parallel_workers設定するのは...
その他
IMPORT後も移行先で.cfgファイルは残ります。
たいしたサイズじゃないので、構わず放置してますけど(ぉ