これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド pt-findp です。
プログラム:
NAME
pt-find - MySQL テーブルを検索し、GNU find などのアクションを実行します。
SYNOPSIS
使用法: pt-find [オプション] [データベース]
pt-find は MySQL テーブルを検索し、GNU find と同様のアクションを実行します。 デフォルトのアクション
データベースとテーブル名を出力することです。
XNUMX 日以上前に作成された、MyISAM エンジンを使用するすべてのテーブルを検索し、そのテーブルを出力します。
名前:
pt-find --ctime +1 --engine MyISAM
InnoDB テーブルを検索し、MyISAM に変換します。
pt-find --engine InnoDB --exec "ALTER TABLE %D.%N ENGINE=MyISAM"
name_sid_pid という名前付けに従って、存在しないプロセスによって作成されたテーブルを検索します。
規則に従って、それらを削除してください。
pt-find --connection-id '\D_\d+_(\d+)$' --server-id '\D_(\d+)_\d+$' --exec-plus "DROP TABLE %s"
テスト データベースとジャンク データベースで空のテーブルを見つけて削除します。
pt-find --empty ジャンク テスト --exec-plus "DROP TABLE %s"
合計サイズが XNUMX GB を超えるテーブルを検索します。
pt-find --tablesize +5G
すべてのテーブルを検索し、その合計データとインデックス サイズを出力し、最大のテーブルを最初に並べ替えます。
(ちなみに、sort は別のプログラムです)。
pt-find --printf "%T\t%D.%N\n" | ソート -rn
上記と同様ですが、今回は後続のためにデータをデータベースに挿入し直します。
pt-find --noquote --exec "INSERT INTO sysdata.tblsize(db, tbl, size) VALUES('%D', '%N', %T)"
リスク
Percona Toolkit は成熟しており、現実世界で実証されており、十分にテストされていますが、すべてデータベースです
ツールはシステムやデータベース サーバーにリスクをもたらす可能性があります。 このツールを使用する前に、
お願いします:
・ツールのドキュメントを読む
・ツールの既知の「バグ」を確認します
· 非運用サーバーでツールをテストする
· 運用サーバーをバックアップし、バックアップを検証します。
DESCRIPTION
pt-find は、指定したテストに合格する MySQL テーブルを検索し、アクションを実行します。
あなたが指定します。 デフォルトのアクションでは、データベースとテーブル名が STDOUT に出力されます。
pt-find は GNU find よりも簡単です。 複雑な式を指定することはできません
コマンドラインで。
pt-find は、可能な場合は SHOW TABLES を使用し、必要な場合は SHOW TABLE STATUS を使用します。
オプション TYPES
オプションには XNUMX 種類あります。通常のオプション。何らかの動作を決定します。
設定; テーブルをテーブルのリストに含めるべきかどうかを決定するテスト
見つかった; アクションは、pt-find が見つけたテーブルに対して何らかの処理を行います。
pt-find は標準の Getopt::Long オプション解析を使用するため、二重ダッシュを使用する必要があります。
GNU find とは異なり、長いオプション名の前にあります。
OPTIONS
このツールは追加のコマンドライン引数を受け入れます。 「概要」と使用方法を参照してください。
詳細については情報。
--ask-pass
MySQL に接続するときにパスワードの入力を求められます。
- 大文字小文字を区別しません
すべての正規表現検索で大文字と小文字が区別されないことを指定します。
- 文字コード
短縮形: -A; タイプ: 文字列
デフォルトの文字セット。 値が utf8 の場合、STDOUT の Perl の binmode を utf8 に設定します。
mysql_enable_utf8 オプションを DBD::mysql に渡し、その後 SET NAMES UTF8 を実行します。
MySQL に接続します。 他の値は、utf8 レイヤーを使用せずに STDOUT で binmode を設定します。
MySQL に接続した後、SET NAMES を実行します。
--config
タイプ:配列
このコンマ区切りの構成ファイルのリストを読んでください。 指定する場合、これが最初である必要があります
コマンドラインのオプション。
-データベース
短縮形:-D; タイプ:文字列
このデータベースに接続します。
-- 開始日
時間を測定する (「--mmin」など)
現在の時刻。
--デフォルトファイル
短縮形: -F; タイプ: 文字列
指定されたファイルから mysql オプションのみを読み取ります。 絶対パス名を指定する必要があります。
- 助けて
ヘルプを表示して終了します。
- ホスト
短い形式: -h; タイプ: 文字列
ホストに接続します。
- また
テストを AND ではなく OR で結合します。
デフォルトでは、テストはテスト間に AND があるかのように評価されます。 このオプション
ORに切り替えます。
pt-find 自体ではオプション解析が実装されていないため、複雑な指定はできません
括弧、または OR と AND を組み合わせた式。
- パスワード
短い形式: -p; タイプ: 文字列
接続時に使用するパスワード。 パスワードにカンマが含まれている場合はエスケープする必要があります
バックスラッシュ付き: "exam\,ple"
--pid
タイプ:文字列
指定された PID ファイルを作成します。 PID ファイルがすでに存在する場合、ツールは起動しません。
含まれているPIDは、現在のPIDとは異なります。 ただし、PIDファイルの場合
存在し、それに含まれる PID が実行されなくなった場合、ツールは PID を上書きします
現在の PID を持つファイル。 PID ファイルは、ツールが終了すると自動的に削除されます。
- 港
短縮形: -P; 型: int
接続に使用するポート番号。
--[いいえ]引用
デフォルト:はい
MySQL の標準のバックティック文字を使用して、MySQL 識別子名を引用符で囲みます。
引用は、テストの実行後、アクションの実行前に行われます。
--set-vars
タイプ:配列
この「変数=値」ペアのカンマ区切りリストに MySQL 変数を設定します。
デフォルトでは、ツールは以下を設定します。
wait_timeout=10000
コマンドラインで指定された変数は、これらのデフォルトをオーバーライドします。 例えば、
「--set-vars wait_timeout=500」を指定すると、デフォルト値の 10000 がオーバーライドされます。
変数を設定できない場合、ツールは警告を出力し、続行します。
- ソケット
短縮形: -S; タイプ: 文字列
接続に使用するソケットファイル。
- ユーザー
短い形式: -u; タイプ: 文字列
現在のユーザーでない場合は、ログインするユーザー。
- バージョン
バージョンを表示して終了します。
-[no]バージョンチェック
デフォルト:はい
Percona Toolkit、MySQL、およびその他のプログラムの最新バージョンを確認してください。
これは標準の「アップデートを自動的に確認する」機能であり、さらに XNUMX つの機能が追加されています。
特徴。 まず、ツールはローカル システム上の他のプログラムのバージョンをチェックします。
独自のバージョンに追加。 たとえば、すべての MySQL サーバーのバージョンをチェックします。
Perl、および Perl モジュール DBD::mysql に接続します。 次に、チェックして警告します。
既知の問題があるバージョンについて。 たとえば、MySQL 5.5.25 には重大なバグがあり、
5.5.25aとして再リリースされました。
更新または既知の問題は、ツールの通常の出力の前に STDOUT に出力されます。
この機能がツールの通常の動作を妨げることはありません。
詳細については、次のWebサイトをご覧ください。 。
TESTS
ほとんどのテストは、SHOW TABLE STATUS 出力の列に対して何らかの基準をチェックします。 数値
引数は、n より大きい場合は +n、n より小さい場合は -n、正確な場合は n として指定できます。
n. すべての数値オプションは、k、M、または G のオプションの接尾辞乗数を取ることができます (1_024、
それぞれ 1_048_576、および 1_073_741_824)。 すべてのパターンは Perl 正規表現です
(「man perlre」を参照) SQL LIKE パターンとして指定されていない限り。
日付と時刻はすべて、pt-find が最初に質問したときの同じ瞬間を基準にして測定されます。
データベースサーバーは何時ですか。 すべての日付と時刻の操作は SQL で行われるため、
5 日前に変更されたテーブルを検索すると言うと、SELECT に変換されます。
DATE_SUB(CURRENT_TIMESTAMP、5 日間隔)。 「--day-start」を指定すると、当然のことですが、
代わりに CURRENT_DATE を基準にします。
ただし、テーブル サイズやその他のメトリックは、瞬間的には一貫していません。 できる
MySQL がすべての SHOW クエリを処理するのに時間がかかり、pt-find は何もできません
そのことについて。 これらの測定値は、測定された時点のものです。
このリストにないテストが必要な場合は、バグレポートを提出してください。pt-find を強化します。
あなたのために。 とても簡単です。
--autoinc
タイプ: 文字列; グループ: テスト
テーブルの次の AUTO_INCREMENT は n です。 これは Auto_increment 列をテストします。
--avgrowlen
タイプ: サイズ; グループ: テスト
テーブルの平均行長は n バイトです。 これは Avg_row_length 列をテストします。 指定された
Avg_row_length が NULL であるかどうかをテストするには、size を「NULL」にできます。
-チェックサム
タイプ: 文字列; グループ: テスト
テーブルのチェックサムは n です。 これにより、チェックサム列がテストされます。
--cmin
タイプ: サイズ; グループ: テスト
テーブルはn分前に作成されました。 これにより、Create_time 列がテストされます。
- 照合
タイプ: 文字列; グループ: テスト
テーブル照合はパターンと一致します。 これにより、照合順序列がテストされます。
--列名
タイプ: 文字列; グループ: テスト
テーブル内の列名がパターンと一致します。
--列の種類
タイプ: 文字列; グループ: テスト
テーブル内の列はこのタイプと一致します (大文字と小文字は区別されません)。
型の例は次のとおりです: varchar、char、int、smallint、bigint、XNUMX 進数、年、タイムスタンプ、
テキスト、列挙型。
- コメント
タイプ: 文字列; グループ: テスト
テーブルのコメントがパターンと一致します。 これにより、Comment 列がテストされます。
--接続 ID
タイプ: 文字列; グループ: テスト
テーブル名に存在しない MySQL 接続 ID が含まれています。 これはテーブル名をテストします。
パターン。 このテストの引数は、次の内容をキャプチャする Perl 正規表現である必要があります。
(\d+) のような数字。 テーブル名がパターンと一致する場合、これらのキャプチャされた数字は
は、何らかのプロセスの MySQL 接続 ID とみなされます。 接続できない場合
SHOW FULL PROCESSLIST に従って存在する場合、テストは true を返します。 接続IDの場合
pt-find 自身の接続 ID より大きい場合、安全のためにテストは false を返します。
なぜこれをしたいのですか? MySQL ステートメントベースのレプリケーションを使用する場合、
おそらく、一時テーブルが引き起こす可能性のある問題を知っているでしょう。 回避策を選択することもできます
これは、一時テーブルではなく、一意の名前を持つ実際のテーブルを作成することによって実現されます。 一方通行
これを行うには、テーブルの最後に接続 ID を追加します。次のようになります。
スクラッチテーブル_12345。 これにより、テーブル名が一意であることが保証され、次のことが可能になります。
どの接続に関連付けられているかを見つけます。 そしておそらく最も重要なことは、
接続はもう存在しないため、クリーンアップせずに接続が切断されたと考えることができます
このテーブルは削除の候補です。
これが私がスクラッチ テーブルを管理する方法であり、このテストを pt-find に含めた理由です。
「--connection-id」に使用する引数は「\D_(\d+)$」です。 これは、
末尾の一連の数字、その前にアンダースコアと数字以外の文字が続く
(後者の基準により、末尾に日付があるテーブルを調べることができなくなります。
人々はそうする傾向があります: baron_scratch_2007_05_07 など)。 保管しておいたほうが良いです
もちろんスクラッチテーブルは別です。
これを行う場合は、ユーザー pt-find が PROCESS 権限を持って実行されていることを確認してください。
そうしないと、同じユーザーからの接続のみが表示され、いくつかのテーブルが考慮される可能性があります。
使用中でもすぐに取り外すことができます。 安全のため、pt-find はこれをチェックします。
あなた。
「--server-id」も参照してください。
--createopts
タイプ: 文字列; グループ: テスト
テーブル作成オプションがパターンと一致します。 これにより、Create_options 列がテストされます。
--ctime
タイプ: サイズ; グループ: テスト
テーブルは n 日前に作成されました。 これにより、Create_time 列がテストされます。
--データフリー
タイプ: サイズ; グループ: テスト
テーブルには n バイトの空き領域があります。 これは Data_free 列をテストします。 指定されたサイズ
Data_free が NULL であるかどうかをテストするには、「NULL」を指定できます。
--データサイズ
タイプ: サイズ; グループ: テスト
テーブルデータは n バイトのスペースを使用します。 これは Data_length 列をテストします。 指定された
Data_length が NULL であるかどうかをテストするには、size を「NULL」にできます。
--dblike
タイプ: 文字列; グループ: テスト
データベース名は SQL LIKE パターンと一致します。
--dbreex
タイプ: 文字列; グループ: テスト
データベース名はこのパターンに一致します。
- 空の
グループ: テスト
テーブルには行がありません。 これにより、Rows 列がテストされます。
- エンジン
タイプ: 文字列; グループ: テスト
テーブル ストレージ エンジンはこのパターンに一致します。 これは Engine 列をテストするか、
MySQL の以前のバージョンの [Type] 列。
- 関数
タイプ: 文字列; グループ: テスト
関数定義がパターンと一致します。
--indexsize
タイプ: サイズ; グループ: テスト
テーブルインデックスは n バイトのスペースを使用します。 これは Index_length 列をテストします。 の
指定されたサイズを「NULL」にすると、Index_length が NULL であるかどうかをテストできます。
--kmin
タイプ: サイズ; グループ: テスト
テーブルはn分前にチェックされました。 これにより、Check_time 列がテストされます。
--ktime
タイプ: サイズ; グループ: テスト
テーブルは n 日前にチェックされました。 これにより、Check_time 列がテストされます。
--分
タイプ: サイズ; グループ: テスト
テーブルが最後に変更されたのは n 分前です。 これにより、Update_time 列がテストされます。
--mtime
タイプ: サイズ; グループ: テスト
テーブルが最後に変更されたのは n 日前です。 これにより、Update_time 列がテストされます。
- 手順
タイプ: 文字列; グループ: テスト
プロシージャ定義がパターンと一致します。
--rowformat
タイプ: 文字列; グループ: テスト
テーブルの行形式がパターンと一致します。 これは Row_format 列をテストします。
-行
タイプ: サイズ; グループ: テスト
テーブルには n 行があります。 これにより、Rows 列がテストされます。 指定サイズは「NULL」から
行が NULL である場所をテストします。
-- サーバー ID
タイプ: 文字列; グループ: テスト
テーブル名にはサーバー ID が含まれます。 という名前で一時テーブルを作成すると、
「--connection-id」で説明されている規則ですが、サーバーのサーバー ID も追加します。
テーブルが作成されると、このパターン マッチを使用してテーブルが確実に作成されるようにすることができます。
作成されたサーバーにのみドロップされます。 これにより、テーブルが
使用中に誤ってスレーブにドロップした場合 (サーバー ID が
すべて一意であり、レプリケーションが機能するためにはこれが必要です)。
たとえば、マスター (サーバー ID 22) 上に次のテーブルを作成します。
スクラッチテーブル_22_12345。 スレーブ (サーバー ID 23) でこのテーブルが表示された場合は、
そのような接続がなければ安全にドロップできると思います 12345。
「--server-id '\D_(\d+)_\d+$'」を使用して、名前をサーバー ID と強制的に一致させます。テーブル
スレーブにはドロップされません。
--テーブルサイズ
タイプ: サイズ; グループ: テスト
テーブルは n バイトのスペースを使用します。 これは、Data_length と Index_length の合計をテストします。
列。
--tbllike
タイプ: 文字列; グループ: テスト
テーブル名は SQL LIKE パターンと一致します。
--tblregex
タイプ: 文字列; グループ: テスト
テーブル名はこのパターンに一致します。
--tblversion
タイプ: サイズ; グループ: テスト
テーブルのバージョンは n です。 これにより、「バージョン」列がテストされます。
- 引き金
タイプ: 文字列; グループ: テスト
トリガーアクションステートメントがパターンと一致します。
--トリガーテーブル
タイプ: 文字列; グループ: テスト
「--trigger」はテーブルマッチングパターンに定義されています。
- 見る
タイプ: 文字列; グループ: テスト
CREATE VIEW はこのパターンに一致します。
ACTIONS
「--exec-plus」アクションは他のすべての後に実行されますが、それ以外の場合はアクションが実行されます。
不定の順序。 決定論が必要な場合は、バグレポートを提出してください。これを追加します
特徴。
--exec
タイプ: 文字列; グループ: アクション
見つかった各項目に対してこの SQL を実行します。 SQL にはエスケープと書式設定を含めることができます
ディレクティブ (「--printf」を参照)。
--exec-dsn
タイプ: 文字列; グループ: アクション
「--exec」で SQL を実行するときに使用する DSN をキーと値の形式で指定します。
「--exec-plus」。 指定されていない値はコマンドライン引数から継承されます。
--exec-plus
タイプ: 文字列; グループ: アクション
この SQL をすべての項目で一度に実行します。 このオプションは「--exec」とは異なります。 がある
エスケープまたはフォーマットディレクティブはありません。 の特別なプレースホルダーは XNUMX つだけです
データベースとテーブル名のリスト、%s。 見つかったテーブルのリストが結合されます
カンマで区切って、%s を配置した場所に置き換えます。
たとえば、これを使用して、見つかったすべてのテーブルを削除できます。
ドロップテーブル %s
これは、GNU find の「-exec コマンド {} +」構文に似ています。 ただそれは完全ではない
不可解な。 また、コマンドライン パーサーを作成する必要もありません。
-印刷
グループ: アクション
データベースとテーブル名を出力し、その後に改行を続けます。 これはデフォルトのアクションです
他のアクションが指定されていない場合。
--printf
タイプ: 文字列; グループ: アクション
「\」エスケープと「%」ディレクティブを解釈して、標準出力に形式を出力します。
エスケープは、\n や \t などのバックスラッシュ文字です。 Perl はこれらを解釈するので、次のことができます。
Perl が知っているエスケープを使用します。 ディレクティブは %s に置き換えられ、現時点では
書き込み時には、フィールド幅や
アラインメント(ただし、その方法については思案中です)。
以下にディレクティブのリストを示します。 それらのほとんどは単に次の列から来ていることに注意してください。
テーブルステータスを表示します。 列が NULL であるか存在しない場合は、空の文字列が返されます。
出力。 % 文字の後に次のリストにない文字が続く場合は、
破棄されます (ただし、他の文字は出力されます)。
CHAR データソースのメモ
------------------------------------------------------------------ --------------
Auto_increment
Avg_row_length
c チェックサム
C 作成時間
D データベース テーブルが存在するデータベース名
d データ長
E エンジン MySQL の古いバージョンでは、これは Type です。
F データフリー
f Innodb_free コメント フィールドから解析
I インデックスの長さ
K チェック時間
L 照合
M 最大データ長
N 名前
○コメント
P オプションの作成
R 行の形式
サ行
T テーブル長 データ長 + インデックス長
U 更新時間
Vバージョン
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-findp を使用する