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ファイルは残ります。
たいしたサイズじゃないので、構わず放置してますけど(ぉ