英語フランス語スペイン語

Ad


OnWorksファビコン

pt-archiverp - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターを介して、OnWorks の無料ホスティング プロバイダーで pt-archiverp を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなど、複数の無料オンライン ワークステーションのいずれかを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド pt-archiverp です。

プログラム:

NAME


pt-archiver - MySQL テーブルの行を別のテーブルまたはファイルにアーカイブします.

SYNOPSIS


使用法: pt-archiver [OPTIONS] --source DSN --where WHERE

pt-archiver は、MySQL テーブルからレコードをニブルします。 --source および --dest 引数は DSN を使用します
構文; COPY が yes の場合、--dest はデフォルトで --source からのキーの値になります。

例:

oltp_server から olap_server およびファイルにすべての行をアーカイブします。

pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server \
--file '/var/log/archive/%Y-%m-%d-%D.%t' \
--where "1=1" --limit 1000 --commit-each

子テーブルからオーファン行をパージ (削除) します。

pt-archiver --source h=host,D=db,t=child --purge \
--where 'NOT EXISTS(SELECT * FROM 親 WHERE 列 = 子.列)'

リスク


Percona Toolkit は成熟しており、現実世界で実証されており、十分にテストされていますが、すべてデータベースです
ツールはシステムやデータベース サーバーにリスクをもたらす可能性があります。 このツールを使用する前に、
お願いします:

・ツールのドキュメントを読む

・ツールの既知の「バグ」を確認します

· 非運用サーバーでツールをテストする

· 運用サーバーをバックアップし、バックアップを検証します。

DESCRIPTION


pt-archiver は、テーブルをアーカイブするために使用するツールです。
<http://tinyurl.com/mysql-archiving>。 目標は、影響の少ない、前進のみの仕事です。
OLTP クエリに大きな影響を与えることなく、テーブルから古いデータをニブルします。 を挿入できます。
同じサーバー上にある必要はありません。 に書き込むこともできます。
LOAD DATA INFILE に適した形式のファイル。 または、どちらも実行できません。
単なる増分 DELETE です。

pt-archiver は、プラグイン メカニズムを介して拡張可能です。 独自のコードを挿入して追加できます
依存データのアーカイブ、適用に役立つ高度なアーカイブ ロジック
複雑なビジネス ルール、またはアーカイブ プロセス中のデータ ウェアハウスの構築。

一部のオプションでは、慎重に値を選択する必要があります。 最も重要なのは「--limit」です。
「--再試行」および「--txn-size」。

戦略は、最初の行を見つけてから、いくつかのインデックスを順方向にスキャンしてさらに見つけることです
効率よく並びます。 後続の各クエリでは、テーブル全体をスキャンする必要はありません。 それは求めるべきです
インデックスに追加し、さらにアーカイブ可能な行が見つかるまでスキャンします。 でインデックスを指定する
これには、「--source」引数の「i」部分が重要になる場合があります。 「--dry-run」を使用して
生成されたクエリを調べ、それらが効率的かどうかを確認するために必ず EXPLAIN してください
(ほとんどの場合、デフォルトである PRIMARY キーをスキャンする必要があります)。 平
より良いのは、実行前と実行後のハンドラー ステータス カウンターの違いを調べることです。
クエリを実行し、クエリごとにテーブル全体をスキャンしていないことを確認してください。

「--no-ascend」を使用して、シーク後スキャンの最適化を部分的または完全に無効にすることができます
および「--ascend-first」。 場合によっては、これが複数列キーの場合により効率的になることがあります。 なれ
pt-archiver は、選択してスキャンするインデックスの先頭から開始するように構築されていることに注意してください
転送のみです。 からかじろうとしている場合、これにより長いテーブルスキャンが発生する可能性があります
優先するインデックス以外のインデックスによるテーブルの末尾。 「--source」を見て読む
これが当てはまる場合は、「i」部分のドキュメント。

ペルコナ XtraDB クラスタ


pt-archiver は Percona XtraDB Cluster (PXC) 5.5.28-23.7 以降で動作しますが、
クラスターでアーカイブする前に考慮すべき XNUMX つの制限:

コミット時のエラー
pt-archiver は、トランザクションをコミットするときにエラーをチェックしません。 PXC でコミットできる
失敗しますが、これが発生した場合、ツールはまだトランザクションをチェックしたり再試行したりしません。
そうなると、ツールは死んでしまいます。

MyISAM テーブル
MyISAM テーブルのアーカイブは機能しますが、PXC での MyISAM サポートはまだ実験段階です。
このリリースの時間。 PXC、MyISAM テーブル、および
「AUTO_INCREMENT」列。 したがって、アーカイブが直接
または間接的に、MyISAM テーブルのデフォルトの「AUTO_INCREMENT」値を使用することになります。
たとえば、これは「--columns」が使用され、「--dest」で発生します。
「AUTO_INCREMENT」列は含まれません。 ツールはこれをチェックしません。

非クラスタ オプション
特定のオプションが機能する場合と機能しない場合があります。 たとえば、クラスタ ノードが
スレーブの場合、「--check-slave-lag」は機能しません。 また、PXC テーブルは通常
InnoDB ですが、InnoDB は「INSERT DELAYED」をサポートしていないため、「--delayed-insert」はサポートしていません
仕事。 他のオプションも機能しない可能性がありますが、ツールはそれらをチェックしません。
実際のクラスターでアーカイブする前に、テスト クラスターでアーカイブをテストする必要があります。

出力


「--progress」を指定すると、出力はヘッダー行に加えて、一定間隔でのステータス出力になります。
ステータス出力の各行には、現在の日付と時刻、秒数がリストされます。
アーカイバーが実行されていること、およびアーカイブされた行数。

「--statistics」を指定すると、「pt-archiver」はタイミングやその他の情報を出力します。
アーカイブ プロセスのどの部分に最も時間がかかるかを特定します。

エラー処理


pt-archiver は、シグナルをキャッチして正常に終了しようとします。 たとえば、あなたがそれを送るなら
SIGTERM (UNIX っぽいシステムでは Ctrl-C)、シグナルをキャッチし、
シグナルを送信し、かなり正常に終了します。 「--analyze」や「--optimize」は実行しませんが、
これらは完了するまでに長い時間がかかる可能性があるためです。 他のすべてのコードは正常に実行されますが、
呼び出しを含む after_finish() 任意のプラグイン (「EXTENDING」を参照)。

言い換えれば、信号がキャッチされると、メインのアーカイブ ループから抜け出し、スキップします。
最適化/分析します。

OPTIONS


「--dest」、「--file」、または「--purge」の少なくとも XNUMX つを指定します。

「--ignore」と「--replace」は相互に排他的です。

「--txn-size」と「--commit-each」は相互に排他的です。

「--low-priority-insert」と「--delayed-insert」は相互に排他的です。

「--share-lock」と「--for-update」は相互に排他的です。

「--analyze」と「--optimize」は相互に排他的です。

「--no-ascend」と「--no-delete」は相互に排他的です。

COPY が yes の場合、「--dest」の DSN 値はデフォルトで「--source」の値になります。

-分析する
タイプ:文字列

その後、「--source」および/または「--dest」で ANALYZE TABLE を実行します。

終了後に ANALYZE TABLE を実行します。 引数は任意の文字列です。 それであれば
文字「s」が含まれている場合、ソースが分析されます。 「d」が含まれている場合、
目的地が分析されます。 どちらかまたは両方を指定できます。 たとえば、
以下は両方を分析します。

--analyze=ds

見るhttp://dev.mysql.com/doc/en/analyze-table.html> ANALYZE TABLE の詳細については、こちらを参照してください。

--最初に昇順
インデックスの最初の列のみを昇順します。

昇順のインデックス最適化を使用したい場合 (「--no-ascend」を参照)、使用しない場合
大きな複数列インデックスの昇順のオーバーヘッドを発生させたい場合は、これを使用できます
pt-archiver にインデックスの一番左の列だけを昇順にするように指示するオプション。 これは
インデックスをまったく上げない場合よりもパフォーマンスが大幅に向上しますが、
インデックス全体を昇順にするコストを回避します。

これがプラグインとどのように相互作用するかについては、「EXTENDING」を参照してください。

--ask-pass
MySQL に接続するときにパスワードの入力を求められます。

- バッファ
出力を「--file」にバッファリングし、コミット時にフラッシュします。

「--file」への自動フラッシュを無効にし、「--file」をディスクにフラッシュするのは、トランザクションが
コミットします。 これは通常、ファイルがオペレーティング システムによってブロック フラッシュされることを意味します。
コミットの間にディスクへの暗黙的なフラッシュもあるかもしれません。 デフォルトは
行ごとに「--file」をディスクにフラッシュします。

危険なのは、クラッシュによってデータが失われる可能性があることです。

「--buffer」を使用した場合のパフォーマンスの向上は、約 5 ~ 15% です。
あなたの走行距離は異なる場合があります。

--一括削除
単一のステートメントで各チャンクを削除します (「--commit-each」を意味します)。

単一の「DELETE」ステートメントを使用して、行の各チャンクを一括で削除します。 ステートメント
チャンクの最初の行と最後の行の間のすべての行を削除します。 それは意味する
「--commit-each」。一度に XNUMX 行ずつ「INSERT」して、
一括「DELETE」の前にそれらをコミットします。

通常の方法では、すべての行を主キーで削除します。 一括削除は
ずっと速く。 彼ら また かもしれない be 速いです 複雑な「WHERE」句がある場合。

このオプションは、行のチャンクが削除されるまで、すべての「DELETE」処理を完全に延期します。
終了した。 ソースにプラグインがある場合、その「before_delete」メソッドは
呼ばれた。 代わりに、「before_bulk_delete」メソッドが後で呼び出されます。

警告: ソースにプラグインがあり、時々 true を返さない場合
"is_archivable()" であるため、このオプションの機能を理解している場合にのみ、このオプションを使用してください。 もしも
プラグインは「pt-archiver」に行をアーカイブしないように指示しますが、行は引き続き削除されます
一括削除!

--[いいえ]一括削除制限
デフォルト:はい

「--bulk-delete」ステートメントに「--limit」を追加します。

これは高度なオプションであり、自分が何であるかを理解していない限り、無効にしないでください。
やっていることとその理由! デフォルトでは、「--bulk-delete」は「--limit」句をバルクに追加します
SQL ステートメントを削除します。 場合によっては、この節を次のように指定して省略できます。
「--一括削除制限なし」。 「--limit」は引き続き指定する必要があります。

--一括挿入
LOAD DATA INFILE を使用して各チャンクを挿入します (「--bulk-delete」「--commit-each」を意味します)。

「LOAD DATA LOCAL INFILE」を使用して、行の各チャンクを挿入します。 これは、
「INSERT」ステートメントで一度に行を挿入します。 を作成することで実装されます。
行のチャンクごとに一時ファイルを作成し、代わりにこのファイルに行を書き込みます
それらを挿入します。 チャンクが完了すると、行がアップロードされます。

データの安全性を保護するために、このオプションは一括削除の使用を強制します。 これ
行を
まず目的地。 一括削除を強制すると、削除が
挿入成功です。

「--low-priority-insert」、「--replace」、および「--ignore」オプションは、これで機能します
オプションですが、「--delayed-insert」はそうではありません。

「LOAD DATA LOCAL INFILE」が「The used command is not
この MySQL バージョンで許可されています」、「L」DSN オプションのドキュメントを参照してください。

- 文字コード
短縮形: -A; タイプ: 文字列

デフォルトの文字セット。 値が utf8 の場合、STDOUT の Perl の binmode を utf8 に設定します。
mysql_enable_utf8 オプションを DBD::mysql に渡し、その後 SET NAMES UTF8 を実行します。
MySQL に接続します。 他の値は、utf8 レイヤーを使用せずに STDOUT で binmode を設定します。
MySQL に接続した後、SET NAMES を実行します。

MySQL で認識される文字セットのみが認識されることに注意してください。 たとえば、「UTF8」は
動作しますが、「UTF-8」は動作しません。

「--[no]check-charset」も参照してください。

--[いいえ]チェック文字セット
デフォルト:はい

接続とテーブルの文字セットが同じであることを確認してください。 このチェックを無効にすると、
テキストがある文字セットから別の文字セットに誤って変換される原因となります (通常は
utf8 から latin1) に変更すると、データの損失やモジバケが発生する可能性があります。 このチェックを無効にすると、
文字セットの変換が意図されている場合に便利または必要です。

--[no]チェック列
デフォルト:はい

「--source」と「--dest」の列が同じであることを確認してください。

デフォルトで有効になっています。 pt-archiver に、ソース テーブルと宛先テーブルが
同じ列があります。 列の順序、データ型などはチェックしません。
ソースのすべての列が宛先に存在することを確認し、その逆も同様です。 もしも
違いがある場合、pt-archiver はエラーで終了します。

このチェックを無効にするには、--no-check-columns を指定します。

--チェック間隔
タイプ: 時間; デフォルト: 1秒

「--check-slave-lag」が指定されている場合、これはツールが毎回一時停止する時間を定義します
スレーブが遅れていることを発見したとき。
このチェックは 100 行ごとに実行されます。

--check-slave-lag
タイプ: 文字列; 再現性: はい

指定された DSN のスレーブ ラグが「--max-lag」未満になるまで、アーカイブを一時停止します。 これ
オプションは、複数のスレーブをチェックするために複数回指定できます。

-列
短い形式: -c; タイプ: 配列

アーカイブする列のカンマ区切りリスト。

フェッチ、ファイルへの書き込み、および挿入する列のカンマ区切りリストを指定します
宛先テーブル。 指定されている場合、pt-archiver は他の列を無視します。
インデックスの昇順または行の削除のために、それらを「SELECT」ステートメントに追加する必要があります。
これらの余分な列を内部でフェッチして使用しますが、それらを
ファイルまたは宛先テーブルに。 これ ありません それらをプラグインに渡します。

「--primary-key-only」も参照してください。

--コミット-それぞれ
フェッチおよびアーカイブされた行の各セットをコミットします (「--txn-size」を無効にします)。

行の各セットがアーカイブされた後、トランザクションをコミットし、「--file」をフラッシュします。
次の行セットをフェッチする前、および「--sleep」が指定されている場合はスリープする前。
「--txn-size」を無効にします。 「--limit」を使用してトランザクションサイズを制御します
「--commit-each」。

このオプションは、「--limit」と「--txn-size」を同じ値にするためのショートカットとして役立ちます。
しかし、もっと重要なことは、より多くを検索している間、トランザクションが開かれたままになるのを避けることです
行。 たとえば、非常に古い行を最初からアーカイブしているとします。
「--limit」が 1000 で「--txn-size」が 1000 の大きなテーブル。
一度に 1000 行をアーカイブすると、pt-archiver は最後の 999 行を見つけてアーカイブします。
次に、次の SELECT を実行してさらに行を検索します。 これにより、残りの
テーブルを見つけますが、それ以上の行は見つかりません。 それは非常に長い間取引を開いた
とにかく終了したと判断するだけです。 「--commit-each」を使用して回避できます


--config
タイプ:配列

このコンマ区切りの構成ファイルのリストを読んでください。 指定する場合、これが最初である必要があります
コマンドラインのオプション。

-データベース
短縮形:-D; タイプ:文字列

このデータベースに接続します。

--遅延挿入
DELAYED 修飾子を INSERT ステートメントに追加します。

DELAYED 修飾子を INSERT または REPLACE ステートメントに追加します。 見る
<http://dev.mysql.com/doc/en/insert.html> 詳細については。

-宛先
タイプ:DSN

アーカイブ先のテーブルを指定する DSN。

このアイテムは、pt-archiver がアーカイブされた行を挿入するテーブルを指定します
" - ソース"。 「--source」と同じ key=val 引数形式を使用します。 最も行方不明
値はデフォルトで「--source」と同じ値になるため、オプションを繰り返す必要はありません
「--source」と「--dest」で同じです。 「--help」オプションを使用して、
値は「--source」からコピーされます。

警告: デフォルトのオプションファイルを使用 (F) ソケットを定義する DSN オプション
「--source」により、pt-archiver はそのソケットを使用して「--dest」に接続します。
--dest のソケットを指定します。 これは、pt-archiver が誤って接続する可能性があることを意味します
「--dest」に接続する場合は「--source」に。 例えば:

--source F=host1.cnf,D=db,t=tbl --dest h=host2

pt-archiver が「--dest」、host2 に接続する場合、「--source」を介して接続します。
host1、host1.cnf で定義されたソケット。

-ドライラン
クエリを出力し、何もせずに終了します。

使用するファイル名と SQL ステートメントを出力した後、pt-archiver を終了させます。

- ファイル
タイプ:文字列

アーカイブするファイル DATE_FORMAT()のような書式設定。

アーカイブされた行を書き込むファイル名。 MySQL のサブセット DATE_FORMAT() 書式設定
次のように、ファイル名にコードを使用できます。

%d 日、数値 (01..31)
%H 時間 (00..23)
%i 分、数値 (00..59)
%m 月、数値 (01..12)
%s 秒 (00..59)
%Y 年、数値、XNUMX 桁

次の追加のフォーマット コードも使用できます。

%D データベース名
%t テーブル名

例:

--file '/var/log/archive/%Y-%m-%d-%D.%t'

ファイルの内容は、文書化されているように、SELECT INTO OUTFILE で使用されるのと同じ形式です。
MySQL マニュアル: 改行で終了する行、タブで終了する列、NULL
文字は \N で表され、特殊文字は \ でエスケープされます。 これにより、
LOAD DATA INFILE のデフォルト設定でファイルをリロードします。

ファイルの先頭に列ヘッダーが必要な場合は、「--header」を参照してください。 ファイルは自動
デフォルトでフラッシュされます。 「--buffer」を参照してください。

--更新用
FOR UPDATE 修飾子を SELECT ステートメントに追加します。

詳細については、http://dev.mysql.com/doc/en/innodb-locking-reads.html>.

- ヘッダ
「--file」の先頭に列ヘッダーを出力します。

"--file" で指定されたファイルの最初の行に列名を書き込みます。 ファイルの場合
存在しますが、ヘッダーを書き込みません。 これにより、LOAD DATA INFILE でファイルをロードできるようになります。
さらに出力を追加する場合。

- 助けて
ヘルプを表示して終了します。

--高優先度選択
HIGH_PRIORITY 修飾子を SELECT ステートメントに追加します。

見るhttp://dev.mysql.com/doc/en/select.html> 詳細については。

- ホスト
短い形式: -h; タイプ: 文字列

ホストに接続します。

- 無視
INSERT ステートメントには IGNORE を使用します。

「--dest」への INSERT を INSERT IGNORE にします。

-制限
タイプ:int; デフォルト:1

ステートメントごとにフェッチおよびアーカイブする行数。

行を取得する SELECT ステートメントによって返される行数を制限します。
記録。 デフォルトは XNUMX 行です。 制限を増やす方が効率的かもしれませんが、
まばらにアーカイブし、多くの行をスキップする場合は注意してください。 これは潜在的に
ストレージ エンジン、トランザクションによっては、他のクエリとの競合が増える
分離レベル、および「--for-update」などのオプション。

- ローカル
OPTIMIZE または ANALYZE クエリを binlog に書き込まないでください。

NO_WRITE_TO_BINLOG 修飾子を ANALYZE および OPTIMIZE クエリに追加します。 「--分析」を参照
詳細については。

--低優先度削除
LOW_PRIORITY 修飾子を DELETE ステートメントに追加します。

見るhttp://dev.mysql.com/doc/en/delete.html> 詳細については。

--低優先度挿入
LOW_PRIORITY 修飾子を INSERT または REPLACE ステートメントに追加します。

見るhttp://dev.mysql.com/doc/en/insert.html> 詳細については。

--max-flow-ctl
タイプ:float

--max-lag に似ていますが、PXC クラスター用です。 クラスターが費やした平均時間を確認する
フロー制御のために一時停止し、示されたパーセンテージを超えた場合にツールを一時停止します
オプションで。 デフォルトでは、フロー制御チェックはありません。 このオプションは PXC で使用できます
バージョン 5.6 以降。

--最大ラグ
タイプ: 時間; デフォルト: 1秒

「--check-slave-lag」で指定されたスレーブが遅延する場合、アーカイブを一時停止します。

このオプションにより、pt-archiver はスレーブが取得しようとするたびにスレーブを調べます
別の行。 スレーブのラグがオプションの値よりも大きい場合、またはスレーブが
実行されていないため (ラグは NULL)、pt-table-checksum は「--check-interval」の間スリープします
数秒後、再度ラグを確認します。 奴隷が追いつくまで繰り返し、
次に、行のフェッチとアーカイブに進みます。

このオプションにより、「--sleep」または「--sleep-coef」が不要になる場合があります。

--上昇しない
昇順のインデックス最適化を使用しないでください。

デフォルトの昇順インデックス最適化により、「pt-archiver」が繰り返し最適化されます
「SELECT」クエリを使用して、前のクエリが終了したインデックスをシークし、スキャンします
毎回テーブルの最初からスキャンするのではなく、それに沿って。 これは
これは通常、繰り返しアクセスする場合に適した戦略であるため、デフォルトで有効になっています。

大きな複数列のインデックスがあると、WHERE 句が非常に複雑になる場合があります。
これは実際には効率が悪い可能性があります。 たとえば、XNUMX 列の PRIMARY KEY を考えてみましょう
(a、b、c、d)で。 最後のクエリが終了した場所から開始する WHERE 句は次のとおりです。

どこで (a > ?)
または (a = ? AND b > ?)
または (a = ? AND b = ? AND c > ?)
OR (a = ? AND b = ? AND c = ? AND d >= ?)

プレースホルダーに値を入力すると、メモリと CPU が使用され、ネットワーク トラフィックが追加され、
オーバーヘッドを解析し、MySQL がクエリを最適化するのを難しくする可能性があります。 XNUMX 列
キーは大したことではありませんが、すべての列が「NULL」を許可する XNUMX 列のキーは
さあ。

単純に行を削除することがわかっている場合は、インデックスを昇順にする必要はないかもしれません
テーブルの最初からチャンクで、しかし穴を残さないので、
テーブルの先頭は、実際に行うのが最も効率的なことです。

「--ascend-first」も参照してください。 これがどのように相互作用するかについては、「拡張」を参照してください。
プラグインを使用して。

--いいえ-削除します
アーカイブされた行を削除しないでください。

"pt-archiver" が、処理後に行を削除しないようにします。 これは許可しません
「--no-ascend」。両方を有効にすると無限ループが発生するためです。

ソース DSN にプラグインがある場合は、とにかくその「before_delete」メソッドが呼び出されます。
「pt-archiver」は削除を実行しませんが。 詳細については、「拡張」を参照してください
プラグイン。

- 最適化
タイプ:文字列

その後、「--source」および/または「--dest」で OPTIMIZE TABLE を実行します。

終了後に OPTIMIZE TABLE を実行します。 オプションの構文については、「--analyze」を参照してください。
<http://dev.mysql.com/doc/en/optimize-table.html> OPTIMIZE TABLE の詳細については、

- パスワード
短い形式: -p; タイプ: 文字列

接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"

--pid
タイプ:文字列

指定された PID ファイルを作成します。 PID ファイルがすでに存在する場合、ツールは起動しません。
含まれているPIDは、現在のPIDとは異なります。 ただし、PIDファイルの場合
存在し、それに含まれる PID が実行されなくなった場合、ツールは PID を上書きします
現在の PID を持つファイル。 PID ファイルは、ツールが終了すると自動的に削除されます。

-プラグイン
タイプ:文字列

汎用プラグインとして使用する Perl モジュール名。

汎用プラグインの Perl モジュール名を指定します。 現在のみ使用されています
統計用 (「--statistics」を参照) であり、「new()」および「statistics()」メソッドが必要です。

"new( src = $src, dst => $dst, opts => $o )> メソッドはソースを取得し、
宛先 DSN、およびそれらのデータベース接続 (接続固有の
プラグインが行います。 コマンドラインにアクセスするための OptionParser オブジェクト ($o) も取得します。
オプション (例: "$o-"get('purge');>)。

「statistics(\%stats, $time)」メソッドは、収集された統計のハッシュリファレンスを取得します
アーカイブ ジョブ、およびジョブ全体の開始時刻。

- 港
短縮形: -P; 型: int

接続に使用するポート番号。

-- 主キーのみ
主キー列のみ。

主キー列で「--columns」を指定するためのショートカット。 これは
行をパージするだけの場合の効率。 行全体のフェッチを回避します。
「DELETE」ステートメントには主キー列のみが必要です。 「--purge」も参照してください。

- 進捗
タイプ:int

X 行ごとに進捗情報を出力します。

現在の時刻、経過時間、および X 行ごとにアーカイブされた行を出力します。

- パージ
アーカイブする代わりにパージします。 「--file」と「--dest」を省略できます。

「--file」または「--dest」引数なしでアーカイブを許可します。これは実質的にパージです
行が削除されたばかりなので。

行をパージするだけの場合は、テーブルの主キー列を指定することを検討してください
「--primary-key-only」で。 これにより、サーバーからすべての列を取得できなくなります。
理由はありません。

--クイック削除
DELETE ステートメントに QUICK 修飾子を追加します。

見るhttp://dev.mysql.com/doc/en/delete.html> 詳細はこちら。 で述べたように
場合によっては、DELETE QUICK に続いて OPTIMIZE を使用する方が速い場合があります。
テーブル。 これには「--optimize」を使用できます。

- 静かな
短縮形: -q

「--statistics」などの出力を印刷しません。

「--statistics」の出力を含む通常の出力を抑制しますが、抑制しません
「--why-quit」からの出力。

- 交換
"--dest" への INSERT が REPLACE として書き込まれます。

-再試行
タイプ:int; デフォルト:1

タイムアウトまたはデッドロックごとの再試行回数。

InnoDB ロックがある場合に pt-archiver が再試行する回数を指定します
タイムアウトまたはデッドロックを待ちます。 再試行が使い果たされると、pt-archiver は終了します。
エラー。

の混合物間でアーカイブする場合、どうしたいかを慎重に検討してください。
トランザクションおよび非トランザクション ストレージ エンジン。 「--dest」への INSERT と
「--source」からの DELETE は別の接続上にあるため、実際には
同じサーバー上にある場合でも、同じトランザクションに参加します。 しかし、pt-
アーカイバーは単純な分散トランザクションをコードで実装するため、コミットとロールバック
XNUMX つの接続間で必要に応じて発生する必要があります。

現時点では、トランザクション ストレージのエラーを処理するためのコードを書いていません。
InnoDB 以外のエンジン。 必要な場合は、その機能をリクエストしてください。

- ランタイム
タイプ:時間

出る前に走る時間。

オプションのサフィックス s=秒、m=分、h=時間、d=日。 接尾辞がない場合は、s が使用されます。

--[no]safe-auto-increment
デフォルト:はい

AUTO_INCREMENT が最大の行をアーカイブしないでください。

追加の WHERE 句を追加して、pt-archiver が最新の行を削除しないようにします。
単一列の AUTO_INCREMENT キーの昇順。 これにより、再利用を防ぐことができます
サーバーが再起動すると AUTO_INCREMENT の値になり、デフォルトで有効になります。

追加の WHERE 句には、現在の自動インクリメント列の最大値が含まれています。
アーカイブまたはパージ ジョブの開始。 pt-archiver 中に新しい行が挿入された場合
実行されている場合、それらは表示されません。

--センチネル
タイプ: 文字列; デフォルト: /tmp/pt-archiver-sentinel

このファイルが存在する場合は終了します。

「--sentinel」で指定されたファイルが存在すると、pt-archiver が停止します
アーカイブして終了します。 デフォルトは /tmp/pt-archiver-sentinel です。 あなたはこれを見つけるかもしれません
必要に応じて、cron ジョブを正常に停止するのに便利です。 「--stop」も参照してください。

--set-vars
タイプ:配列

この「変数=値」ペアのカンマ区切りリストに MySQL 変数を設定します。

デフォルトでは、ツールは以下を設定します。

wait_timeout=10000

コマンドラインで指定された変数は、これらのデフォルトをオーバーライドします。 例えば、
「--set-vars wait_timeout=500」を指定すると、デフォルト値の 10000 がオーバーライドされます。

変数を設定できない場合、ツールは警告を出力し、続行します。

--共有ロック
SELECT ステートメントに LOCK IN SHARE MODE 修飾子を追加します。

見るhttp://dev.mysql.com/doc/en/innodb-locking-reads.html>.

--外部キーチェックをスキップ
SET FOREIGN_KEY_CHECKS=0 で外部キー チェックを無効にします。

- 寝る
タイプ:int

フェッチ間のスリープ時間。

SELECT ステートメント間のスリープ時間を指定します。 デフォルトではスリープしない
全て。 トランザクションはコミットされず、「--file」ファイルはフラッシュされません。
睡眠。 それを制御するには、「--txn-size」を参照してください。

「--commit-each」を指定すると、スリープ前にコミットとフラッシュが行われます。

-- 睡眠係数
タイプ:float

"--sleep" を最後の SELECT 時間の倍数として計算します。

このオプションが指定されている場合、pt-archiver は最後のクエリ時間の間スリープします。
SELECT に指定された係数を掛けます。

これは、SELECT を調整するためのもう少し洗練された方法です。
SELECT にかかる時間に応じて、各 SELECT 間の時間。

- ソケット
短縮形: -S; タイプ: 文字列

接続に使用するソケットファイル。

- ソース
タイプ:DSN

アーカイブ元のテーブルを指定する DSN (必須)。 この引数は DSN です。 見る
構文の「DSN OPTIONS」。 ほとんどのオプションは、pt-archiver が MySQL に接続する方法を制御します。
ただし、このツールの構文にはいくつかの拡張 DSN オプションがあります。 D、t、および i
オプションは、アーカイブするテーブルを選択します:

--source h=my_server,D=my_database,t=my_tbl

a オプションは、USE で接続のデフォルトとして設定するデータベースを指定します。 もしも
b オプションが true の場合、SQL_LOG_BIN によるバイナリ ログが無効になります。 m オプション
外部 Perl モジュールが提供できるプラグ可能なアクションを指定します。 唯一の
必要な部分はテーブルです。 他の部分は、さまざまな場所から読み取ることができます
環境 (オプション ファイルなど)。

「i」の部分は特筆に値します。 これは pt-archiver にどのインデックスをすべきかを伝えます
スキャンしてアーカイブします。 これは、SELECT の FORCE INDEX または USE INDEX ヒントに表示されます。
アーカイブ可能な行をフェッチするために使用されるステートメント。 何も指定しない場合は、pt-archiver
適切なインデックスを自動検出し、存在する場合は「PRIMARY KEY」を優先します。 私の中で
経験すると、これは通常うまく機能するので、ほとんどの場合、おそらく省略できます
「い」の部分。

インデックスは、テーブルへの繰り返しアクセスを最適化するために使用されます。 pt-archiver が覚えている
各 SELECT ステートメントから取得する最後の行を使用し、それを使用して WHERE を作成します。
指定されたインデックスの列を使用して、MySQL が
次の SELECT は、潜在的にからスキャンするのではなく、最後の SELECT が終了した場所で行われます。
連続する各 SELECT でのテーブルの先頭。 外付けをご利用の場合
プラグインが昇順とどのように相互作用するかについては、「EXTENDING」を参照してください
インデックス。

'a' および 'b' オプションを使用すると、ステートメントがバイナリを通過する方法を制御できます。
ログ。 'b' オプションを指定すると、指定したサーバーでバイナリ ログが無効になります。
繋がり。 「a」オプションを指定すると、接続は指定された
スレーブがバイナリ ログ イベントを実行するのを防ぐために使用できます。
「--replicate-ignore-db」オプションで。 これらの XNUMX つのオプションは、異なるものとして使用できます。
同じ目標を達成するための方法: マスターからデータをアーカイブしますが、マスターには残します。
奴隷。 たとえば、マスターでパージ ジョブを実行し、それを防ぐことができます。
選択した方法を使用してスレーブで発生します。

警告: デフォルトのオプションファイルを使用 (F) ソケットを定義する DSN オプション
「--source」により、pt-archiver はそのソケットを使用して「--dest」に接続します。
--dest のソケットを指定します。 これは、pt-archiver が誤って接続する可能性があることを意味します
「--dest」に接続する場合は「--source」に。 例えば:

--source F=host1.cnf,D=db,t=tbl --dest h=host2

pt-archiver が「--dest」、host2 に接続する場合、「--source」を介して接続します。
host1、host1.cnf で定義されたソケット。

- 統計
タイミング統計を収集して出力します。

pt-archiver に、その動作に関するタイミング統計を収集させます。 これらの統計
「--plugin」で指定したプラグインで利用可能

「--quiet」を指定しない限り、「pt-archiver」は終了時に統計を出力します。 の
統計は次のようになります。

Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
出典: D=db,t=テーブル
選択4
挿入4
削除 4
アクション カウント時間の割合
コミット 10 0.1079 88.27
5 を選択 0.0047 3.87
削除 4 0.0028 2.29
挿入 4 0.0028 2.28
その他 0 0.0040 3.29

最初の XNUMX 行 (または XNUMX 行) には、時刻と、ソース テーブルと宛先テーブルが表示されます。 の
次の XNUMX 行は、フェッチ、挿入、および削除された行数を示しています。

残りの行には、カウントとタイミングが表示されます。 列はアクション、合計です
そのアクションが計時された回数、それにかかった合計時間、および
プログラムの総実行時間。 行は合計時間の降順でソートされます。 の
最後の行は、明示的に何にも起因しない残りの時間です。 アクションは
コマンドラインオプションによって異なります。

「--why-quit」が指定された場合、その動作はわずかに変更されます。 このオプションにより、
行がなくなったという理由だけで終了した場合でも、終了の理由を出力します。

このオプションには、コア Perl の一部である標準の Time::HiRes モジュールが必要です。
かなり新しい Perl リリース。

- ストップ
センチネル ファイルを作成して、実行中のインスタンスを停止します。

pt-archiver が "--sentinel" で指定されたセンチネル ファイルを作成し、終了します。
これにより、監視している実行中のすべてのインスタンスが停止されるはずです。
同じセンチネル ファイル。

--txn-サイズ
タイプ:int; デフォルト:1

トランザクションあたりの行数。

各トランザクションのサイズを行数で指定します。 ゼロはトランザクションを無効にします
完全に。 pt-archiver がこの数の行を処理した後、両方の行をコミットします。
「--source」と「--dest」が指定されている場合、「--file」で指定されたファイルをフラッシュします。

このパラメーターは、パフォーマンスにとって重要です。 ライブ サーバーからアーカイブする場合は、
たとえば、負荷の高い OLTP 作業を行っている場合、適切なバランスを選択する必要があります。
トランザクション サイズとコミット オーバーヘッド。 より大きなトランザクションは、
ロックの競合とデッドロックが増えるが、トランザクションが小さいほど頻繁に発生する
オーバーヘッドをコミットします。これは重大な場合があります。 アイデアを与えるために、小さなテストセットで私は
pt-archiver の作成中に使用した場合、値が 500 の場合、アーカイブに約 2 時間かかりました
私のデスクトップ マシンの静かな MySQL インスタンスでは、1000 行あたり XNUMX 秒です。
ディスクおよび別のテーブルへのアーカイブ。 値がゼロのトランザクションを無効にする、
自動コミットをオンにすると、パフォーマンスが 38 行あたり XNUMX 秒に低下します。

トランザクション ストレージ エンジンとの間でアーカイブしない場合は、
トランザクションを無効にして、pt-archiver がコミットしようとしないようにします。

- ユーザー
短い形式: -u; タイプ: 文字列

現在のユーザーでない場合は、ログインするユーザー。

- バージョン
バージョンを表示して終了します。

-[no]バージョンチェック
デフォルト:はい

Percona Toolkit、MySQL、およびその他のプログラムの最新バージョンを確認してください。

これは標準の「アップデートを自動的に確認する」機能であり、さらに XNUMX つの機能が追加されています。
特徴。 まず、ツールはローカル システム上の他のプログラムのバージョンをチェックします。
独自のバージョンに追加。 たとえば、すべての MySQL サーバーのバージョンをチェックします。
Perl、および Perl モジュール DBD::mysql に接続します。 次に、チェックして警告します。
既知の問題があるバージョンについて。 たとえば、MySQL 5.5.25 には重大なバグがあり、
5.5.25aとして再リリースされました。

更新または既知の問題は、ツールの通常の出力の前に STDOUT に出力されます。
この機能がツールの通常の動作を妨げることはありません。

詳細については、次のWebサイトをご覧ください。 。

- どこ
タイプ:文字列

アーカイブする行を制限する WHERE 句 (必須)。

アーカイブする行を制限する WHERE 句を指定します。 単語を含めないでください
どこ。 シェルが引数を解釈しないようにするために、引数を引用符で囲む必要がある場合があります。
例:

--where 'ts < current_date - interval 90 日'

安全のため、「--where」が必要です。 WHERE 句が必要ない場合は、
"--where" 1=1.

--なぜ-やめる
行が使い果たされない限り終了する理由を出力します。

実行中以外の理由で終了した場合、pt-archiver にメッセージを出力させます。
アーカイブする行がありません。 これは、「--run-time」を使用した cron ジョブがある場合に役立ちます。
たとえば、指定されていて、pt-archiver がその前に終了していることを確認したい場合
時間がない。

「--statistics」が指定されている場合、動作がわずかに変更されます。 を印刷します。
行がなくなったという理由だけで終了する理由。

この出力は、「--quiet」が指定されていても印刷されます。 これで、「pt-archiver」を入れることができます
「cron」ジョブを実行し、異常終了した場合に電子メールを受け取ります。

DSN OPTIONS


これらの DSN オプションは、DSN を作成するために使用されます。 各オプションは「option=value」のように与えられます。
オプションでは大文字と小文字が区別されるため、P と p は同じオプションではありません。 そんなことはありえない
「=」の前後には空白があり、値に空白が含まれる場合は引用符で囲む必要があります。
DSN オプションはカンマで区切られます。 詳細については、percona-toolkit マンページを参照してください。

・ NS

コピー: いいえ

クエリの実行時に使用するデータベース。

・A

DSN: 文字セット; コピー: はい

デフォルトの文字セット。

・ NS

コピー: いいえ

true の場合、SQL_LOG_BIN で binlog を無効にします。

・ NS

DSN: データベース; コピー: はい

テーブルを含むデータベース。

・ NS

DSN: mysql_read_default_file; コピー: はい

指定されたファイルからデフォルトのオプションのみを読み取ります

・h

DSN: ホスト; コピー: はい

ホストに接続します。

・ 私

コピー: はい

使用するインデックス。

・l

コピー: はい

LOAD DATA LOCAL INFILE を明示的に有効にします。

何らかの理由で、一部のベンダーは --enable-local-infile を使用せずに libmysql をコンパイルします。
オプション。ステートメントを無効にします。 これは、次のような奇妙な状況を引き起こす可能性があります。
サーバーは LOCAL INFILE を許可しますが、それが使用されるとクライアントは例外をスローします。

ただし、サーバーが LOAD DATA を許可している限り、クライアントはそれを簡単に再度有効にすることができます。 見る
そして
<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>。 このオプションは、
まさにそれ。

このオプションをオンにするとエラーが発生したり、異なる結果が発生したりするケースは見つかりませんでした。
念のため、このオプションはデフォルトではオンになっていません。

・ NS

コピー: いいえ

プラグイン モジュール名。

・ NS

DSN: パスワード; コピー: はい

接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"

・p

DSN: ポート; コピー: はい

接続に使用するポート番号。

・ NS

DSN: mysql_socket; コピー: はい

接続に使用するソケットファイル。

・t

コピー: はい

アーカイブするテーブル。

・あなた

DSN: ユーザー; コピー: はい

現在のユーザーでない場合は、ログインするユーザー。

拡張


pt-archiver は、外部 Perl モジュールをプラグインしていくつかのロジックを処理したり、および/または
行動。 「m」を使用して、「--source」と「--dest」の両方にモジュールを指定できます
仕様の一部。 例えば:

--source D=test,t=test1,m=My::Module1 --dest m=My::Module2,t=test2

これにより、pt-archiver は My::Module1 および My::Module2 パッケージをロードし、作成します。
それらのインスタンスを作成し、アーカイブ プロセス中にそれらを呼び出します。

「--plugin」でプラグインを指定することもできます。

モジュールは、次のインターフェイスを提供する必要があります。

new(dbh => $dbh, db => $db_name, tbl => $tbl_name)
プラグインのコンストラクターには、データベース ハンドルへの参照が渡されます。
名前、およびテーブル名。 プラグインは、pt-archiver が
接続、および引数で指定されたテーブルを調べる前に。 これにより、
一時テーブルを作成してデータを入力したり、その他のセットアップ作業を行ったりする機会をプラグインします。

before_begin(cols => \@cols, allcols => \@allcols)
このメソッドは、pt-archiver が行の反復処理を開始する直前に呼び出され、
それらをアーカイブしますが、他のすべてのセットアップ作業を行った後 (テーブル構造の調査、
SQL クエリの設計など)。 これは、pt-archiver がプラグインに通知する唯一の時間です。
アーカイブ中にプラグインに渡す行の列名。

「cols」引数は、ユーザーがアーカイブを要求した列名です。
デフォルトまたは「--columns」オプションによって。 「allcols」引数は列のリストです
pt-archiver がソース テーブルからフェッチするすべての行の名前。 もっと釣れるかも
独自の使用のためにいくつかの列が必要なため、ユーザーが要求したよりも列が不足しています。 いつ
後続のプラグイン関数は行を受け取ります。これは、余分なすべてを含む完全な行です
列がある場合は最後に追加されます。

is_archivable(row => \@row)
このメソッドは、行がアーカイブ可能かどうかを判断するために行ごとに呼び出されます。 これ
「--source」にのみ適用されます。 引数は、arrayref としての行そのものです。 もし
メソッドが true を返す場合、行はアーカイブされます。 それ以外の場合はスキップされます。

行をスキップすると、一意でないインデックスが複雑になります。 通常、pt-archiver は
スキャンを開始する場所として、最後に処理された行を対象とするように設計された WHERE 句
次の SELECT ステートメントのために。 から false を返して行をスキップした場合
is_archible()行がまだ残っているため、pt-archiver が無限ループに陥る可能性があります。
存在します。 そのため、「--source」引数にプラグインを指定すると、pt-archiver
WHERE 句を少し変更します。 「以上」で始まる代わりに
最後に処理された行まで、それは「厳密により大きい」から始まります。これは機能します
主キーなどの一意のインデックスでは問題ありませんが、行をスキップする (穴を残す) 場合があります。
一意ではないインデックス、またはインデックスの最初の列のみを昇順にする場合。

「pt-archiver」は「--no-delete」を指定すると同様に節を変更しますが、
再び無限ループが可能になるためです。

「--bulk-delete」オプションを指定して、このメソッドから false を返すと、
「pt-archiver」は、あなたが望むことをしないかもしれません。 行はアーカイブされませんが、
一括削除は行の範囲で動作し、どの行が削除されたかわからないためです。
維持するように選択されたプラグイン。

「--bulk-insert」オプションを指定すると、このメソッドの戻り値が影響します
一括挿入のために行が一時ファイルに書き込まれるかどうか。
期待どおりに動作します。 ただし、一括挿入には一括削除が必要です。

before_delete(row => \@row)
このメソッドは、各行が削除される直前に呼び出されます。 これはにのみ適用されます
" - ソース"。 これは、削除などの依存関係を処理するのに適した場所です
削除しようとしている行に外部キー化されているもの。 使用することもできます
これにより、すべての従属テーブルが再帰的にアーカイブされます。

このプラグイン メソッドは、"--no-delete" が指定された場合でも呼び出されますが、
「--bulk-delete」が与えられます。

before_bulk_delete(first_row => \@row, last_row => \@row)
このメソッドは、一括削除が実行される直前に呼び出されます。 それはに似ています
その引数が範囲の最初と最後の行であることを除いて、「before_delete」メソッド
削除されます。 「--no-delete」を指定しても呼び出されます。

before_insert(row => \@row)
このメソッドは、各行が挿入される直前に呼び出されます。 これはにのみ適用されます
「--dest」。 これを使用して、行を複数のテーブルに挿入できます。
ON DUPLICATE KEY UPDATE 句を使用して、データ ウェアハウスに集計テーブルを構築します。

「--bulk-insert」が指定されている場合、このメソッドは呼び出されません。

before_bulk_insert(first_row => \@row, last_row => \@row, filename =>
一括挿入ファイル名)
このメソッドは、一括挿入が実行される直前に呼び出されます。 それはに似ています
その引数が範囲の最初と最後の行であることを除いて、「before_insert」メソッド
削除されます。

custom_sth(row => \@row, sql => $sql)
このメソッドは、行を挿入する直前に呼び出されますが、"before_insert()"。 それ
必要に応じて、プラグインが別の「INSERT」ステートメントを指定できるようにします。 リターン
値 (もしあれば) は DBI ステートメントハンドルでなければなりません。 「sql」パラメータはSQLテキストです
デフォルトの「INSERT」ステートメントを準備するために使用されます。 次の場合、このメソッドは呼び出されません。
「--bulk-insert」を指定します。

値が返されない場合は、デフォルトの「INSERT」ステートメント ハンドルが使用されます。

このメソッドは、「--dest」で指定されたプラグインにのみ適用されるため、プラグインがそうでない場合
期待どおりに動作する場合は、宛先ではなく宛先に指定したことを確認してください
ソース。

custom_sth_bulk(first_row => \@row, last_row => \@row, sql => $sql, filename =>
$bulk_insert_filename)
「--bulk-insert」を指定した場合、このメソッドはバルクの直前に呼び出されます
挿入しますが、"before_bulk_insert()"、そして引数は異なります。

このメソッドの戻り値などは「カスタムsth()" 方法。

after_finish()
このメソッドは、pt-archiver がアーカイブ ループを終了し、すべてのデータベースをコミットした後に呼び出されます。
「--file」を処理し、閉じて、最終的な統計を出力しますが、pt-archiver が実行される前に
ANALYZE または OPTIMIZE (「--analyze」および「--optimize」を参照)。

「--source」と「--dest」の両方にプラグインを指定すると、pt-archiver コンストラクト、呼び出し
before_begin()、および呼び出し after_finish() XNUMX つのプラグインを「--source」の順序で、
「--dest」。

pt-archiver は、それがトランザクションを制御し、プラグインがコミットまたはロールしないことを前提としています
データベースハンドルを戻します。 プラグインのコンストラクタに渡されるデータベース ハンドルは、
同じハンドル pt-archiver が自分自身を使用します。 「--source」と「--dest」は別のものであることに注意してください
ハンドル。

サンプル モジュールは次のようになります。

パッケージ My::Module;

サブニュー{
私 ( $class, %args ) = @_;
return bless(\%args, $class);
}

サブbefore_begin {
私 ( $self, %args ) = @_;
# 後で使用するために列名を保存します
$self->{cols} = $args{cols};
}

サブ is_archivable {
私 ( $self, %args ) = @_;
# $args{row} で高度なロジックを実行
1リターン;
}

sub before_delete {} # 何もしない
sub before_insert {} # 何もしない
sub custom_sth {} # 何もしない
sub after_finish {} # 何もしない

1;

ENVIRONMENT


環境変数「PTDEBUG」を使用すると、STDERR への詳細なデバッグ出力が有効になります。 有効にする
デバッグしてすべての出力をファイルにキャプチャするには、次のようにツールを実行します。

PTDEBUG=1 pt-archiver ... > FILE 2>&1

注意: デバッグ出力は大量であり、数メガバイトの出力が生成される可能性があります。

SYSTEM 募集要項


Perl、DBI、DBD::mysql、およびいくつかのコア パッケージが必要です。
Perlのかなり新しいバージョン。

onworks.net サービスを使用してオンラインで pt-archiverp を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad