製品&サポートサービス

pt-online-schema-change

コマンド

pt-online-schema-change [ オプション ] [ --execute または --dry-run ] [ DSN ]

【必須項目】

  • ・ [ オプション ] : -p パスワード
  • ・ [ DSN ] : h=ホスト名, D=データベース名, t=テーブル名
  • ・ --execute or --dry-run : --executeを指定すると変更が実行され、--dry-runは変更を実行しません
  • ・ --alter "alter文" : 実行したいALTER文を入力します(ただし"ALTER TABLE"という記述は省きます)

【主なオプション】

  • ・ --max-load : 大きなデータベースのスキーマ変更の時に、スレッドの閾値を変更します(デフォルトは25です)

目的

テーブルをロックをせずに、指定のテーブルのスキーマ(構造)を変更する事ができます

設定ファイル

上記の必須項目を、設定ファイルにまとめておきます
ただし、[ DSN ], --execute(--dry-run), --alter はスクリプト上で直接指定する必要があるため、ここでは書きません

# touch /etc/percona-toolkit/pt-online-schema-change.conf (設定ファイルの作成)
# vi /etc/percona-toolkit/pt-online-schema-change.conf (設定ファイルの編集)
# config for pt-online-schema-change
user=root (MySQL のユーザ名)
password=パスワード (MySQL のパスワードを記載)

シナリオ

以下のようなテーブルを用意します

pt-online-schema-change01

テーブルに "test" というカラムを追加するために、以下のpt-online-schema-changeコマンドを実行します

# pt-online-schema-change --execute --alter "add column TEST int" h=localhost,D=test,t=articles

pt-online-schema-changeコマンド実行中に、MySQLで以下のINSERT文・UPDATE文を実行します
通常であれば「カラムの追加」のようなテーブルのスキーマ情報を書き換える動作の場合、テーブルのロックが発生し、その間のINSERT文・UPDATE文はロック待ちとなるため実行に時間がかかります

mysql> INSERT INTO articles (title,created_at,updated_at) VALUE ("test", "00000000", "00000000");
mysql> UPDATE articles SET updated_at="11111111111111" WHERE title = "test";

結果

以下の画面が表示されTESTカラムの追加が行われます
以下のコマンドでINSERT文・UPDATE文も問題なく実行されていることが確認できます

mysql> SELECT * FROM articles WHERE title = "test";

pt-online-schema-change02

pt-online-schema-change03

コマンドの実行後、articlesテーブルではTESTカラムが追加されたことが確認できます

pt-online-schema-change04

良い点

通常のALTER文と異なり、サービスを止める事無く、テーブルへの列追加等が可能となります

その他

--dry-runオプションを指定した場合は以下のようになり、実際にスキーマ変更は実行されません

pt-online-schema-change05

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア

ページトップへ