これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド pt-heartbeatp です。
プログラム:
NAME
pt-heartbeat - MySQL レプリケーションの遅延を監視します。
SYNOPSIS
使用法: pt-heartbeat [オプション] [DSN] --update|--monitor|--check|--stop
pt-heartbeat は、MySQL または PostgreSQL サーバー上のレプリケーション ラグを測定します。 それを使用して、
マスターを更新するか、レプリカを監視します。 可能であれば、MySQL 接続オプションは次から読み取られます。
.my.cnf ファイル。
デーモン化プロセスを開始して、マスター上の test.heartbeat テーブルを更新します。
pt-heartbeat -D test --update -h master-server --daemonize
スレーブ上のレプリケーションの遅延を監視します。
pt-heartbeat -D test --monitor -h スレーブサーバー
pt-heartbeat -D test --monitor -h スレーブサーバー --dbi-driver Pg
スレーブ ラグを一度確認して終了します (オプションの DSN を使用してスレーブ ホストを指定します)。
pt-heartbeat -D test --check h=slave-server
リスク
Percona Toolkit は成熟しており、現実世界で実証されており、十分にテストされていますが、すべてデータベースです
ツールはシステムやデータベース サーバーにリスクをもたらす可能性があります。 このツールを使用する前に、
お願いします:
・ツールのドキュメントを読む
・ツールの既知の「バグ」を確認します
· 非運用サーバーでツールをテストする
· 運用サーバーをバックアップし、バックアップを検証します。
DESCRIPTION
pt-heartbeat は、MySQL と PostgreSQL の XNUMX つの部分からなるレプリケーション遅延監視システムです。
実際にレプリケートされたデータを確認することで遅延を測定します。 これにより、
レプリケーション メカニズム自体は信頼できません。 (たとえば、「スレーブステータスを表示」
MySQL)。
最初の部分は、マスターに接続する pt-heartbeat の「--update」インスタンスで、
「--interval」秒ごとにタイムスタンプ (「ハートビート レコード」) を更新します。 心臓の鼓動以来
テーブルには複数のマスターからのレコードが含まれる場合があります (「マルチスレーブ階層」を参照)。
サーバーの ID (@@server_id) はレコードを識別するために使用されます。
XNUMX 番目の部分は、pt-heartbeat の「--monitor」または「--check」インスタンスで、
スレーブは、直接のマスターまたは指定されたマスターから複製されたハートビート レコードを検査します。
「--master-server-id」を使用し、現在のシステム時刻との差を計算します。 もしも
スレーブとマスター間のレプリケーションが遅延または中断されている場合、計算された差分
「--monitor」が指定されている場合はゼロより大きくなり、増加する可能性があります。
マスター上にハートビート テーブルを手動で作成するか、「--create-table」を使用する必要があります。
適切なハートビート テーブル構造については、「--create-table」を参照してください。 「MEMORY」ストレージ
MySQL ではエンジンが推奨されていますが、もちろん必須ではありません。
ハートビート テーブルにはハートビート行が含まれている必要があります。 デフォルトでは、ハートビート行が挿入されます
それが存在しない場合。 この機能は「--[no]insert-heartbeat-row」で無効にできます。
データベース ユーザーに INSERT 権限がない場合のオプション。
pt-heartbeat は、スレーブにレプリケートされるハートビート レコードのみに依存するため、
レプリケーション メカニズム (組み込みのレプリケーション、システムなど) に関係なく機能します。
継続タングステンなど)。 これは、レプリケーション階層のどの深さでも機能します。 ために
たとえば、スレーブがそのマスターのマスターよりどれだけ遅れているかを確実に報告します。 と
レプリケーションが停止しても、レプリケーションは引き続き動作し、(正確に!)
スレーブはマスターからどんどん遅れていきます。
pt-heartbeat の最大解像度は 0.01 秒です。 マスターとスレーブの時計
サーバーは NTP 経由で厳密に同期する必要があります。 デフォルトでは、「--update」チェックは
秒の端 (例: 00:01) と「--monitor」チェックは秒間の中間で行われます。
(例: 00:01.5)。 サーバーのクロックが厳密に同期されており、レプリケーションが行われている限り、
イベントは XNUMX 秒未満で伝播し、pt-heartbeat は XNUMX 秒を報告します
遅延の。
pt-heartbeat は、接続にエラーがある場合は再接続を試みますが、次の場合は再試行しません。
最初の起動時には接続を取得できません。
「--dbi-driver」オプションを使用すると、pt-heartbeat を使用して PostgreSQL を監視することもできます。 それは
Slony-1 レプリケーションでうまく動作することが報告されています。
マルチスレーブ 階層
レプリケーション階層に、他のスレーブのマスターである複数のスレーブがある場合、次のようになります。
「マスター -> スレーブ 1 -> スレーブ 2」、「--update」インスタンスは、スレーブ上でも実行できます。
マスター。 デフォルトのハートビート テーブル (「--create-table」を参照) は「server_id」をキーにしています。
列なので、各サーバーは「server_id=@@server_id」の行を更新します。
「--monitor」および「--check」の場合、「--master-server-id」が指定されていない場合、ツールは次のことを試みます。
スレーブの直接のマスターを検出して使用します。 これが失敗した場合、または遅延を監視したい場合
別のマスターからの場合は、使用する「--master-server-id」を指定できます。
たとえば、レプリケーション階層が「マスター -> スレーブ 1 -> スレーブ 2」の場合、
対応するサーバー ID 1、2、および 3 を使用すると、次のことができます。
pt-heartbeat --daemonize -D test --update -h master
pt-heartbeat --daemonize -D test --update -h smile1
次に、マスターからスレーブ 2 へのレプリケーション遅延を確認 (または監視) します。
pt-heartbeat -D テスト --マスター サーバー ID 1 --チェック スレーブ 2
または、スレーブ 1 からスレーブ 2 へのレプリケーション遅延を確認します。
pt-heartbeat -D テスト --マスター サーバー ID 2 --チェック スレーブ 2
1 つのスレーブ XNUMX の「--update」インスタンスを停止しても、マスター上のインスタンスには影響しません。
MASTER そして SLAVE ステータス
デフォルトのハートビート テーブル (「--create-table」を参照) には、情報を保存するための列があります。
「マスターステータスの表示」と「スレーブステータスの表示」。 これらの列はオプションです。 ある場合は、
存在する場合、対応する情報が保存されます。
ペルコナ XtraDB クラスタ
pt-heartbeat は Percona XtraDB Cluster のサポートされているすべてのバージョンで動作するはずですが
(PXC)、5.5.28-23.7 以降を使用することをお勧めします。
クラスターノード間でハートビートインスタンスを設定している場合は、次のことに注意してください。
クラスターの速度は最も遅いノードによって決定されるため、pt-heartbeat はレポートしません
クラスター自体の速度ですが、イベントが XNUMX つのノードから他のノードにレプリケートされる速度のみです。
別。
「--monitor」および「--check」インスタンスには「--master-server-id」を指定する必要があります。
OPTIONS
「--stop」、「--update」、「--monitor」、「--check」のいずれかを少なくともXNUMXつ指定してください。
「--update」、「--monitor」、および「--check」は相互に排他的です。
「--daemonize」と「--check」は相互に排他的です。
このツールは追加のコマンドライン引数を受け入れます。 「概要」と使用方法を参照してください。
詳細については情報。
--ask-pass
MySQL に接続するときにパスワードの入力を求められます。
- 文字コード
短縮形: -A; タイプ: 文字列
デフォルトの文字セット。 値が utf8 の場合、STDOUT の Perl の binmode を utf8 に設定します。
mysql_enable_utf8 オプションを DBD::mysql に渡し、その後 SET NAMES UTF8 を実行します。
MySQL に接続します。 他の値は、utf8 レイヤーを使用せずに STDOUT で binmode を設定します。
MySQL に接続した後、SET NAMES を実行します。
- チェック
スレーブ遅延を一度確認して終了します。 「--recurse」も指定すると、ツールは次のことを試みます。
指定されたスレーブのスレーブを検出し、そのラグもチェックして出力します。 の
各スレーブのホスト名または IP とポートが遅延前に出力されます。 「--recurse」のみ
MySQLで動作します。
--チェック読み取り専用
サーバーで読み取り専用が有効になっているかどうかを確認します。 存在する場合、ツールは何も実行しません。
挿入します。
--config
タイプ:配列
このコンマ区切りの構成ファイルのリストを読んでください。 指定する場合、これが最初である必要があります
コマンドラインのオプション。
--create-table
ハートビート「--table」が存在しない場合は作成します。
このオプションにより、「--database」および「--table」で指定されたテーブルが作成されます。
次の MAGIC_create_heartbeat テーブル定義を使用します。
CREATE TABLE ハートビート (
ts varchar(26)NOT NULL、
server_id int unsigned NOT NULL 主キー、
file varchar(255) デフォルト NULL、 -- マスターステータスを表示
位置 bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS
リレーマスターログファイル varchar(255) デフォルト NULL、 -- スレーブステータスを表示
exec_master_log_pos bigint unsigned DEFAULT NULL -- スレーブ ステータスを表示
);
ハートビート テーブルには少なくとも XNUMX 行が必要です。 ハートビートを手動で作成する場合
テーブルの場合は、次のようにして行を挿入する必要があります。
INSERT INTO ハートビート (ts, サーバー ID) 値 (NOW(), N);
または、「--utc」を使用する場合:
INSERT INTO ハートビート (ts, サーバー ID) 値 (UTC_TIMESTAMP(), N);
ここで、「N」はサーバーの ID です。 @@server_id は複製されるため、使用しないでください。
スレーブは、マスターのサーバー ID の代わりに独自のサーバー ID を挿入します。
これは「--create-table」によって自動的に行われます。
ハートビート テーブルのレガシー バージョンも引き続きサポートされます。
CREATE TABLE ハートビート (
id int NOT NULL 主キー、
ts日時NOT NULL
);
レガシー テーブルは、マルチスレーブの各スレーブ上の「--update」インスタンスをサポートしていません。
「マスター -> スレーブ 1 -> スレーブ 2」のような階層。 必要な XNUMX 行を手動で挿入するには
従来のテーブルに:
INSERT INTO heartbeat (id, ts) VALUES (1, NOW());
または、「--utc」を使用する場合:
INSERT INTO ハートビート (id, ts) VALUES (1, UTC_TIMESTAMP());
このツールは、ハートビート テーブルがレガシーかどうかを自動的に検出します。
「マルチスレーブ階層」も参照してください。
-デーモン化
バックグラウンドにフォークしてシェルから切り離します。 POSIX オペレーティング システムのみ。
-データベース
短縮形:-D; タイプ:文字列
接続に使用するデータベース。
--dbi-ドライバー
デフォルト: mysql; タイプ: 文字列
接続用のドライバーを指定します。 「mysql」と「Pg」がサポートされています。
--デフォルトファイル
短縮形: -F; タイプ: 文字列
指定されたファイルから mysql オプションのみを読み取ります。 絶対パス名を指定する必要があります。
- ファイル
タイプ:文字列
最新の「--monitor」出力をこのファイルに出力します。
「--monitor」が指定されている場合、出力は STDOUT ではなく指定されたファイルに出力されます。
ファイルは間隔ごとに開かれ、切り詰められ、閉じられるため、ファイルには
最新の統計。 「--damonize」が指定されている場合に便利です。
-フレーム
タイプ: 文字列; デフォルト: 1m、5m、15m
平均の時間枠。
「--monitor」が指定されている場合に、移動平均を計算する時間枠を指定します。
与えられた。 接尾辞を付けた数値のカンマ区切りリストとして指定します。 接尾辞は次のとおりです
s は秒、m は分、h は時間、d は日を表します。 一番大きいサイズは
フレームは、XNUMX 秒あたりの指定された数までの最大メモリ使用量を決定します。
サンプルは平均を計算するためにメモリに保存されます。 いくつでも指定できます
時間枠はお好みで。
- 助けて
ヘルプを表示して終了します。
- ホスト
短い形式: -h; タイプ: 文字列
ホストに接続します。
--[no]ハートビート行の挿入
デフォルト:はい
ハートビート行が存在しない場合は、「--table」にハートビート行を挿入します。
ハートビート「--table」にはハートビート行が必要です。それ以外の場合、「--update」するものはありません。
「--monitor」または「--check」! デフォルトでは、ハートビート行があれば、ツールはハートビート行を挿入します。
すでに存在していません。 この機能を無効にするには、次のように指定します。
データベースユーザーが INSERT 権限を持っていない場合は、「--no-insert-heartbeat-row」。
- 間隔
型: 浮動小数点数; デフォルト: 1.0
ハートビート「--table」を更新または確認する頻度。 更新とチェックは
最初は XNUMX 秒ごとに「--interval」秒ごとに「--update」を繰り返し、その後は「--update」ごとに繰り返します。
「--interval」に「--skew」秒を加えた「--monitor」。
たとえば、00:00.4 に「--update」インスタンスが 0.5 秒間隔で開始された場合、
最初の更新は 00:01.0 に発生し、次の更新は 00:01.5 というようになります。00:10.7 の場合
「--monitor」インスタンスは 0.05 秒間隔で開始されます。デフォルトは 0.5 秒です。
「--skew」の場合、最初のチェックは 00:11.5 (00:11.0 + 0.5) に行われます。
インスタンスがチェックしているため、最後の更新から「--skew」数秒後
同期間隔、00:11.0 に発生しました。
ツールは間隔を作るために最初の XNUMX 秒間待機し、開始します。
計算がより簡単になります。 したがって、ツールは更新する前に最大 1 秒待機する可能性があります。
またはチェック中。
最小 (最速) 間隔は 0.01、最大精度は小数点以下 XNUMX 桁です。
位なので、0.015 は 0.02 に丸められます。
従来のハートビート テーブル (「--create-table」を参照) が使用されている場合、最大精度は
「ts」列の型が「datetime」であるため、「1s」になります。
- ログ
タイプ:文字列
デーモン化されたときに、すべての出力をこのファイルに出力します。
--マスターサーバーID
タイプ:文字列
「--monitor」または「--check」の場合、このマスター サーバー ID から遅延を計算します。 そうでない場合
与えられた場合、pt-heartbeat はサーバーのマスターに接続して、そのマスターを確認しようとします。
サーバーID。
- モニター
スレーブ遅延を継続的に監視します。
pt-heartbeat がスレーブの遅延を毎秒チェックし、レポートすることを指定します。
STDOUT (または、「--file」が指定されている場合は、代わりにファイルに)。 出力は電流です
遅延の後に、「--frame」で指定された時間枠にわたる移動平均が続きます。 ために
例、
5秒 [0.25秒、0.05秒、0.02秒]
- パスワード
短い形式: -p; タイプ: 文字列
接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"
--pid
タイプ:文字列
指定された PID ファイルを作成します。 PID ファイルがすでに存在する場合、ツールは起動しません。
含まれているPIDは、現在のPIDとは異なります。 ただし、PIDファイルの場合
存在し、それに含まれる PID が実行されなくなった場合、ツールは PID を上書きします
現在の PID を持つファイル。 PID ファイルは、ツールが終了すると自動的に削除されます。
- 港
短縮形: -P; 型: int
接続に使用するポート番号。
--プリントマスターサーバーID
自動検出または指定された「--master-server-id」を出力します。 「--check」または「--monitor」の場合
指定されている場合、このオプションを指定すると、自動検出または指定された
各行の末尾に「--master-server-id」を付けます。
-再帰
タイプ:int
「--check」モードでこの深さまで再帰的にスレーブをチェックします。
指定された深さまで再帰的にスレーブ サーバーの検出を試みます。 発見後
サーバーの場合は、それぞれのサーバーでチェックを実行し、ホスト名を出力します (可能な場合)。
その後にスレーブ遅延が続きます。
これは現在、MySQL でのみ機能します。 「--recursion-method」を参照してください。
--再帰法
タイプ: 配列; デフォルト: プロセスリスト、ホスト
スレーブを見つけるために使用される推奨される再帰方法。
考えられる方法は次のとおりです。
メソッドの用途
=========== ==================
プロセスリスト SHOW PROCESSLIST
ホスト スレーブホストを表示
none スレーブを見つけません
SHOW SLAVE HOSTS は信頼できないため、processlist メソッドが推奨されます。
ただし、サーバーが標準以外のポートを使用する場合は、hosts メソッドが必要です。
3306)。 通常、pt-heartbeat は正しい動作をしてスレーブを見つけますが、
優先メソッドを指定すると、それが最初に使用されます。 スレーブが見つからない場合、
他の方法も試されるでしょう。
- 交換
--update には「UPDATE」の代わりに「REPLACE」を使用します。
「--update」モードで実行している場合は、「UPDATE」の代わりに「REPLACE」を使用して、
ハートビートテーブルのタイムスタンプ。 「REPLACE」ステートメントは、SQL に対する MySQL 拡張機能です。
このオプションは、テーブルに行が含まれているかどうかが不明な場合に便利です。
--update と組み合わせて使用する必要があります。
- ランタイム
タイプ:時間
出る前に走る時間。
--センチネル
タイプ: 文字列; デフォルト: /tmp/pt-heartbeat-sentinel
このファイルが存在する場合は終了します。
--set-vars
タイプ:配列
この「変数=値」ペアのカンマ区切りリストに MySQL 変数を設定します。
デフォルトでは、ツールは以下を設定します。
wait_timeout=10000
コマンドラインで指定された変数は、これらのデフォルトをオーバーライドします。 例えば、
「--set-vars wait_timeout=500」を指定すると、デフォルト値の 10000 がオーバーライドされます。
変数を設定できない場合、ツールは警告を出力し、続行します。
- 斜め
型: 浮動小数点数; デフォルト: 0.5
チェックをどれだけ遅らせるか。
デフォルトでは、チェックを XNUMX 秒遅らせます。 アップデートはすぐに行われるので、
マスター上で秒の始まりの後に可能です。これにより、XNUMX 秒が許可されます
スレーブがマスターより XNUMX 秒遅れていることを報告するまでのレプリケーション遅延の時間。
時計が完全に正確でない場合、またはその他の理由がある場合は、
スレーブを多かれ少なかれ遅らせるには、この値を微調整できます。 「PTDEBUG」を設定してみる
環境変数を参照して、これが及ぼす影響を確認してください。
- ソケット
短縮形: -S; タイプ: 文字列
接続に使用するソケットファイル。
- ストップ
センチネル ファイルを作成して、実行中のインスタンスを停止します。
これにより、監視している実行中のすべてのインスタンスが停止されるはずです。
同じセンチネルファイル。 「--update」、「--monitor」、「--check」のいずれも指定されていない場合、
ファイル作成後「pt-heartbeat」は終了します。 これらのいずれかを指定すると、
「pt-heartbeat」は、「--interval」で指定された間隔を待ってから、ファイルを削除し、
働き続けます。
これは、必要に応じて cron ジョブを正常に停止したり、cron ジョブを置き換えたりするのに便利かもしれません。
インスタンスを別のインスタンスで実行しています。 たとえば、停止して再起動したい場合は、
「pt-heartbeat」を XNUMX 時間ごとに実行します (念のため、XNUMX 時間ごとに再起動されるようにするためです)
サーバーのクラッシュやその他の問題が原因である場合は、次のような「crontab」行を使用できます。
0 * * * * pt-ハートビート --update -D テスト --stop \
--sentinel /tmp/pt-heartbeat-hourly
デフォルト以外の「--sentinel」は、毎時「cron」ジョブがインスタンスのみを停止するようにします。
以前は同じオプションで (つまり、同じ「cron」ジョブから) 開始されていました。
「--センチネル」も参照してください。
- テーブル
タイプ: 文字列; デフォルト: ハートビート
ハートビートに使用するテーブル。
「database.table」を指定しないでください。 「--database」を使用してデータベースを指定します。
「--create-table」を参照してください。
- 更新
マスターのハートビートを更新します。
- ユーザー
短い形式: -u; タイプ: 文字列
現在のユーザーでない場合は、ログインするユーザー。
- UTC
システムのタイムゾーンを無視し、UTC のみを使用します。 デフォルトでは、pt-heartbeat はチェックしません。
異なるシステムまたは MySQL タイム ゾーンに合わせて調整するため、ツールが計算を行う可能性があります。
ラグが間違っています。 このオプションを指定することをお勧めします。これにより、次のことが保証されます。
このツールはタイムゾーンに関係なく正しく動作します。
使用する場合、このオプションはすべての pt-heartbeat インスタンスに対して使用する必要があります: "--update"、
「--monitor」、「--check」など。おそらく、「--config」ファイルでオプションを設定する必要があります。
このオプションを使用しない pt-heartbeat インスタンスとこのオプションを混合すると、誤ったエラーが発生します。
異なるタイムゾーンによる正の遅延測定値 (すべてのシステムが次のように設定されている場合を除く)
UTC を使用します。その場合、このオプションは必要ありません)。
- バージョン
バージョンを表示して終了します。
-[no]バージョンチェック
デフォルト:はい
Percona Toolkit、MySQL、およびその他のプログラムの最新バージョンを確認してください。
これは標準の「アップデートを自動的に確認する」機能であり、さらに XNUMX つの機能が追加されています。
特徴。 まず、ツールはローカル システム上の他のプログラムのバージョンをチェックします。
独自のバージョンに追加。 たとえば、すべての MySQL サーバーのバージョンをチェックします。
Perl、および Perl モジュール DBD::mysql に接続します。 次に、チェックして警告します。
既知の問題があるバージョンについて。 たとえば、MySQL 5.5.25 には重大なバグがあり、
5.5.25aとして再リリースされました。
更新または既知の問題は、ツールの通常の出力の前に STDOUT に出力されます。
この機能がツールの通常の動作を妨げることはありません。
詳細については、次のWebサイトをご覧ください。 。
DSN OPTIONS
これらの DSN オプションは、DSN を作成するために使用されます。 各オプションは「option=value」のように与えられます。
オプションでは大文字と小文字が区別されるため、P と p は同じオプションではありません。 そんなことはありえない
「=」の前後には空白があり、値に空白が含まれる場合は引用符で囲む必要があります。
DSN オプションはカンマで区切られます。 詳細については、percona-toolkit マンページを参照してください。
・A
DSN: 文字セット; コピー: はい
デフォルトの文字セット。
・ NS
DSN: データベース; コピー: はい
デフォルトのデータベース。
・ NS
DSN: mysql_read_default_file; コピー: はい
指定されたファイルからデフォルトのオプションのみを読み取ります
・h
DSN: ホスト; コピー: はい
ホストに接続します。
・ NS
DSN: パスワード; コピー: はい
接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"
・p
DSN: ポート; コピー: はい
接続に使用するポート番号。
・ NS
DSN: mysql_socket; コピー: はい
接続に使用するソケットファイル。
・あなた
DSN: ユーザー; コピー: はい
現在のユーザーでない場合は、ログインするユーザー。
ENVIRONMENT
環境変数「PTDEBUG」を使用すると、STDERR への詳細なデバッグ出力が有効になります。 有効にする
デバッグしてすべての出力をファイルにキャプチャするには、次のようにツールを実行します。
PTDEBUG=1 ポイントハートビート ... > ファイル 2>&1
注意: デバッグ出力は大量であり、数メガバイトの出力が生成される可能性があります。
SYSTEM 募集要項
Perl、DBI、DBD::mysql、およびいくつかのコア パッケージが必要です。
Perlのかなり新しいバージョン。
onworks.net サービスを使用してオンラインで pt-heartbeatp を使用する
