Percona-Toolkitのonline-schema-changeを利用して無停止でALTER TABLEする

MySQL

MySQL5.6からは無停止でALTER TABLEできるオンラインDDLが実装されましたが、いくつかある制約に引っかかって利用できませんでした。

Percoana Toolkitのpt-online-schema-changeを使うと、オンラインDDLの制限に引っかかる場合や
MySQL5.5以前でも無停止でALTER TABLEできます。

  • インストール(CentOSの場合)
 yum install perl-TermReadKey
 wget https://www.percona.com/downloads/percona-toolkit/2.2.17/RPM/percona-toolkit-2.2.17-1.noarch.rpm
 rpm -ivh percona-toolkit-2.2.17-1.noarch.rpm
  • 動作確認
 pt-online-schema-change --dry-run --set-vars="sql_log_bin=0" --alter "ENGINE=InnoDB"  -h=localhost,D=database_name,t=table_name

上記コマンドの–dry-runを–executeに置き換えるとスキーマ変更が実行されます。

  • 仕組み
  1. + スキーマ変更対象テーブルをコピーして作業テーブルを作成
  2. + 元テーブルにINSERT/UPDATE/DELETEトリガーを追加して元テーブルの変更が作業テーブルにも反映されるようにする
  3. + 作業テーブルにALTER TABLEを適用する
  4. + RENAMEで元テーブルと作業テーブルをいれかえる
  5. + 元テーブルとトリガーを削除して完了
  • 注意事項
  • – 作業テーブルをコピーして作るので、CPUやDisk I/O負荷が高い。
  • – ALTER対象テーブルをコピーして作業テーブルが作成されるので、ストレージに余裕が必要
  • – 普通にALTER TABLEするより時間がかかる
  • – 普通に実行するとレプリケーション遅延が発生する

参考
http://d.hatena.ne.jp/fat47/20140418/1397811745
http://d.hatena.ne.jp/fat47/20140421/1398049276

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です