概要 binlog2sql は、Python で開発されたオープンソースの MySQL Binlog 解析ツールです。Binlog を元の SQL に解析できます。また、Binlog をロールバック SQL に解析し、主キーの INSERT SQL を削除することもサポートしています。これは、DBA や運用保守担当者がデータを回復するための優れたヘルパーです。 1. インストールと設定 1.1 目的
1.2 インストール シェル> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql シェル> pip インストール -r requirements.txt 2. 使用方法 2.1 使用前の設定 2.1.1 パラメータ設定 [mysqld] サーバーID = 1 log_bin = /var/log/mysql/mysql-bin.log 最大バイナリログサイズ = 1G binlog_format = 行 binlog_row_image = フル 2.1.2 ユーザーに必要な最小限の権限セット 選択、スーパー/レプリケーション クライアント、レプリケーション スレーブ 推奨される承認 *.* に SELECT、レプリケーションスレーブ、レプリケーションクライアント権限を付与 権限
2.2 基本的な使い方 2.2.1 基本的な使い方 標準SQLを解析する シェル> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002' 出力: `test`.`test3`(`addtime`, `data`, `id`) に値 ('2016-12-10 13:03:38', 'english', 4) を挿入します。 #開始 570 終了 736 `test`.`test3` を更新し、`addtime`='2016-12-10 12:00:00'、`data`='中文' を設定します。 `id`=3 WHERE `addtime`='2016-12-10 13:03:22' AND `data`='中文' AND `id`=3 LIMIT 1; #開始 763 終了 954 `addtime`='2016-12-10 13:03:38' かつ `data`='english' かつ `id`=4 の場合、`test`.`test3` から削除します。 LIMIT 1; #開始 981 終了 1147 ロールバックSQLを解析する シェル> python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147 出力: `test`.`test3`(`addtime`, `data`, `id`) に値 ('2016-12-10 13:03:38', 'english', 4) を挿入します。 #開始 981 終了 1147 `test`.`test3` を更新し、`addtime`='2016-12-10 13:03:22'、`data`='中文' を設定します。 `id`=3 WHERE `addtime`='2016-12-10 12:00:00' AND `data`='中文' AND `id`=3 LIMIT 1; #開始 763 終了 954 2.2.2 オプション mysql接続構成 -h ホスト; -P ポート; -u ユーザー; -p パスワード 解析モード --stop-never binlog の解析を続行します。オプション。デフォルト値は False で、コマンドが実行されたときに最新の binlog 位置に同期することを意味します。 -K, --no-primary-key INSERT ステートメントから主キーを削除します。オプション。デフォルト: False -B、--flashback はロールバック SQL を生成し、大きなファイルを解析でき、メモリによって制限されません。オプション。デフォルトは False です。 stop-never または no-primary-key と同時に追加することはできません。 --back-interval -B モードでは、ロールバック SQL 行が 1,000 行出力されるたびに、一定秒数の SLEEP ステートメントを追加します。SLEEP を追加しない場合は、0 に設定してください。オプション。デフォルトは1.0です。 解像度範囲制御 --start-file 開始解析ファイルにはファイル名のみが必要で、完全なパスは必要ありません。しなければならない。 --start-position/--start-pos 解析開始位置。オプション。デフォルトは start-file の開始位置です。 --stop-file/--end-file ファイルの解析を停止します。オプション。デフォルトは start-file と同じファイルです。解析モードが stop-never の場合、このオプションは効果がありません。 --stop-position/--end-pos 解析位置を停止します。オプション。デフォルトは停止ファイルの最後の位置です。解析モードが stop-never の場合、このオプションは無効です。 --start-datetime 解析開始時刻。形式は '%Y-%m-%d %H:%M:%S' です。オプション。デフォルトではフィルタリングはありません。 --stop-datetime 時間の解析を停止します。形式は '%Y-%m-%d %H:%M:%S' です。オプション。デフォルトではフィルタリングはありません。 オブジェクトフィルタリング -d, --databases は、ターゲット db の SQL のみを解析します。複数のデータベースは、-d db1 db2 のようにスペースで区切られます。オプション。デフォルト値は空です。 -t、--tables は、対象テーブルの SQL のみを解析します。複数のテーブルは、-t tbl1 tbl2 のようにスペースで区切られます。オプション。デフォルト値は空です。 --only-dml dml のみを解析し、ddl は無視します。オプション。デフォルトは False です。 --sql-type は指定されたタイプのみを解析し、INSERT、UPDATE、および DELETE をサポートします。複数のタイプは、--sql-type INSERT DELETE のようにスペースで区切られます。オプション。デフォルトでは、すべての追加、削除、変更を解析します。このパラメータが使用されてもタイプが入力されていない場合は、3 つのいずれも解析されません。 2.3 適用事例 2.3.1 テーブルデータ全体が誤って削除され、緊急ロールバックが必要になった テスト ライブラリ内の tbl テーブルの元のデータmysql> select * from tbl; +----+--------+---------------------+ | ID | 名前 | 追加時刻 | +----+--------+---------------------+ | 1 | シャオ・ジャオ | 2016-12-10 00:04:33 | | 2 | 小千 | 2016-12-10 00:04:48 | | 3 | シャオサン | 2016-12-13 20:25:00 | | 4 | シャオ・リー | 2016-12-12 00:00:00 | +----+--------+---------------------+ セット内の行数 (0.00 秒) mysql> テーブルから削除します。 クエリは正常、4 行が影響を受けました (0.00 秒) 20:28 に、エラーのため tbl テーブルがクリアされました。mysql> select * from tbl; 空のセット (0.00 秒) データを復元する手順: mysqlにログインして現在のbinlogファイルを表示します mysql> マスターステータスを表示します。 +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000051 | 967 | |mysql-bin.000052 | 965 | +------------------+-----------+ 最新の binlog ファイルは mysql-bin.000052 です。不正な SQL 操作の binlog の場所を見つけましょう。ミスを犯した人はミスが起きたおおよその時間しか知らないので、おおよその時間に基づいてデータをフィルタリングします。 シェル> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13 20:30:00' 出力: `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:26:00', 4, 'Xiao Li') に INSERT INTO します。 #開始 317 終了 487 時間 2016-12-13 20:26:26 `test`.`tbl` を更新し、`addtime`='2016-12-12 00:00:00'、`id`=4、`name`='Xiao Li' を設定します。WHERE `addtime`='2016-12-13 20:26:00' AND `id`=4 AND `name`='Xiao Li' LIMIT 1; #開始 514 終了 701 時間 2016-12-13 20:27:07 DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:33' AND `id`=1 AND `name`='小赵' LIMIT 1; #開始 728 終了 938 時間 2016-12-13 20:28:05 DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:48' AND `id`=2 AND `name`='小钱' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `name`='小孙' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-12 00:00:00' AND `id`=4 AND `name`='Xiao Li' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 3. 不正な SQL の正確な位置は 728 ~ 938 の間であることがわかりました。位置に基づいてさらにフィルタリングし、フラッシュバック モードを使用してロールバック SQL を生成し、ロールバック SQL が正しいかどうかを確認します (注: 実際の環境では、この手順で必要な SQL をさらにフィルタリングすることがよくあります。grep、エディターなどと組み合わせて使用します)。 シェル> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-position=3346 --stop-position=3556 -B > rollback.sql | cat 出力: `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-12 00:00:00', 4, 'Xiao Li') に INSERT します。#開始 728 終了 938 時間 2016-12-13 20:28:05 INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, '小孙'); #開始 728 終了 938 時間 2016-12-13 20:28:05 INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48', 2, '小钱'); #開始 728 終了 938 時間 2016-12-13 20:28:05 `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:33', 1, 'Xiao Zhao') に INSERT INTO します。#開始 728 終了 938 時間 2016-12-13 20:28:05 4. ロールバック SQL が正しいことを確認し、ロールバック ステートメントを実行します。 MySQL にログインして、データのロールバックが成功したことを確認します。 シェル> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < ロールバック.sql mysql> テーブルから * を選択します。 +----+--------+---------------------+ | ID | 名前 | 追加時刻 | +----+--------+---------------------+ | 1 | シャオ・ジャオ | 2016-12-10 00:04:33 | | 2 | 小千 | 2016-12-10 00:04:48 | | 3 | シャオサン | 2016-12-13 20:25:00 | | 4 | シャオ・リー | 2016-12-12 00:00:00 | +----+--------+---------------------+ 結論 3.1 制限事項(mysqlbinlog との比較)
3.2 利点(mysqlbinlog と比較)
要約する MySQL フラッシュバック ツール binlog2sql の詳細なインストールと設定に関するこの記事はこれで終わりです。MySQL フラッシュバック ツール binlog2sql の関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux で推奨される 9 つの優れたコード比較ツールの概要
序文:以前の記事では、特定のパラメータの機能についてよく紹介してきました。しかし、MySQL パラメ...
<br />私は数年間フロントエンドに取り組んできました。フロントエンドについて完全に理...
効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...
「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...
設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...
記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...
ページ: ベース: <テンプレート> <div class="タブコンテ...
この記事の例では、jQueryのカスタム虫眼鏡効果の具体的なコードを参考までに共有しています。具体的...
思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...
コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...
docker-maven-plugin プラグインを使用する場合、Maven は対応する jar パ...
サーバー情報管理サーバー: m01 172.16.1.61サーバー: nfs01 172.16.1....
1. ナビゲーション: 順序なしリストとその他のラベル要素ナビゲーションを記述するために最も一般的に...
質問: インデックスは作成されているのに、Like ファジー クエリがまだ遅いのはなぜですか?インデ...
目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...