熱修正mysqlデータベースpt-online-schema-changeの使用詳細

1787 ワード

金曜会社団建の関係でこの編は延期して申し訳ありません.
まず、この編でデータベースのホット追加削除フィールドテーブルを整理しなければならないツールpt-online-schema-changeというツールは、前の私のブログ「utf 8 mb 4に関する学習理解ノート」で述べたように、onlineのddl(data definition language)ツールです.mysqlのddl文は実行時にテーブルをロックするため、データ量が大きい場合にテーブルをロックすると正常なデータ書き込みに深刻な影響を及ぼします.
ここまで言った以上、私がネットで調べたinnodbがddlで実行した操作もまとめてみましょう.
1.元のテーブル(original_table)のテーブル構造とddl文に従って、非表示のテンポラリ・テーブル(temporary_table)を新規作成します.
2.元のテーブルにWRITE LOCKを付け、すべての更新操作(insert、delete、updateなど)をブロックする
3.insert into tmp_の実行table select * from original_table
4. rename original_tableとtmp_table,最後drop original_table
5.最後にwrite lockを解放する
 
以上の手順では、テーブルがロックされている場合はクエリーのみで書き込みができないことが容易にわかります.この問題を解決するためにPERCONA社はブロックしないツールpt-online-schema-changeを発売した.
ここではpt-online-schema-changeがどのようにして書き込みをブロックせずにデータベースを変更するかを再紹介しなければなりません.
1.まず、実行するalter操作のテーブルと同じ空のテーブル構造を作成します.
2.与えられたテーブル構造の変更を実行し、copy元のテーブルのデータを新しいテーブルに追加します.
3.元のテーブルにフリップフロップを作成するデータcopyの過程で、元のテーブルの更新データの操作をすべて新しいテーブルに更新する.ここで特に、元のテーブルにトリガが定義されている場合、ツールは動作しません.
4.copyが完了したら、元のテーブルの代わりにrename tableの新しいテーブルを使用し、デフォルトで元のテーブルを削除します.
原理を知ってから、理解するのはそんなに難しくないようです.これらの問題も大した問題ではないような気がします.具体的な使い方を見てみましょう
pt-online-schema-change h=ip_address,u=user_name,D=database,t=table --alter "add column shop_id int(11) DEFAULT NULL " --set-vars lock_wait_timeout=3 --ask-pass --execute

以上が大まかな文法で、中にはすでにはっきり書いてありますが、唯一の価値があるのはここです.
--executeパラメータ
このパラメータを追加してこそ、トリガコピーデータの追加などの一連の操作が本格的に実行されます.もっと信じたい
このドキュメントにアクセスできますhttps://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.htmlこれは公式文書で、基本的に疑問はここから解答を得ることができます.
 
以上です.