MySQLの誤操作後にbinlog2sqlを使用して素早くロールバックする方法の詳細な説明

MySQLの誤操作後にbinlog2sqlを使用して素早くロールバックする方法の詳細な説明

序文

日常の仕事や勉強では、データベースを操作するときに「不注意」によるミスを犯すことは避けられません。すぐに回復する必要がある場合、バックアップで回復できる可能性は低いです。次の記事では、主にMysqlの誤操作後にbinlog2sqlを使用してすばやくロールバックする方法を紹介します。さっそく、詳細な紹介を見てみましょう。

1. 一般的な説明:

DML(データ操作言語):

これらは、SELECT、UPDATE、INSERT、および DELETE です。名前が示すように、これら 4 つのコマンドはデータベース内のデータを操作するために使用されます。

DDL(データ定義言語):

DDL には DML よりも多くのコマンドがあります。主なコマンドは CREATE、ALTER、DROP などです。DDL は主に、テーブルの構造、データ型、テーブル間のリンクと制約、その他の初期化タスクを定義または変更するために使用されます。これらは主にテーブルを作成するときに使用されます。

DCL(データ制御言語):

データベース制御機能です。これは、(許可、拒否、取り消しなどの) ステートメントを含む、データベース ユーザーまたはロールの権限を設定または変更するために使用されます。デフォルトでは、sysadmin、dbcreator、db_owner、または db_securityadmin のみが DCL を実行する権限を持ちます。

2. binlog2sqlのインストール

mysql binlog から必要な sql を解析します。オプションに応じて、元の SQL、ロールバック SQL、主キーなしの挿入 SQL などを取得できます。

2.1. 目的

  •  迅速なデータロールバック(フラッシュバック)
  • マスタースレーブ切り替え後のデータ不整合の修復
  • バイナリログから標準SQLを生成し、派生関数を導入する

2.2 インストール

# cd /usr/local
# git クローン https://github.com/danfengcao/binlog2sql.git
# ls 
binlog2sql ゲーム java lib64 mariadb sbin src 
# cd binlog2sql
# pip インストール -r requirements.txt
-bash: pip: コマンドが見つかりません
 --------------pip ツールをインストールする-------------
# wget https://bootstrap.pypa.io/get-pip.py 
# python get-pip.py
# pip -V # /usr/lib/python2.7/site-packages (python 2.7) から pip バージョン pip 9.0.1 を表示します
# pip インストール -r requirements.txt
要件はすでに満たされています: /usr/lib/python2.7/site-packages の PyMySQL==0.7.8 (-r requirements.txt (行 1) より)
要件はすでに満たされています: /usr/lib/python2.7/site-packages の wheel==0.24.0 (-r requirements.txt (行 2) より)
要件はすでに満たされています: /usr/lib/python2.7/site-packages の mysql-replication==0.9 (-r requirements.txt (行 3) より)

2.3. ユーザーに必要な最小限の権限セット:

選択、スーパー/レプリケーションクライアント、レプリケーションスレーブの権限を付与することをお勧めします。

mysql > 'flashback' で識別される flashback@'localhost' に GRANT SELECT、REPLICATION SLAVE、REPLICATION CLIENT ON *.* を許可します。
mysql > 'flashback' で識別される flashback@'127.0.0.1' に GRANT SELECT、REPLICATION SLAVE、REPLICATION CLIENT ON *.* を許可します。

2.4 基本的な使い方

標準SQLを解析する

シェル> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -ddatabase -t table1 table2 --start-file='mysql-bin.000002' --start-datetime='2017-01-12 18:00:00' --stop-datetime='2017-01-12 18:30:00' --start-pos=1240

ロールバック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

3. テスト:

3.1. 新しいテーブルusersを作成する

create table cope_users like info_users; # 新しいテーブルを作成します insert into cope_users select * from info_users limit 500; # 500 行のデータを挿入します delete from cope_users where id<20; # 20 行のデータを削除します

3.2. 標準SQLの解析

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-datetime='2017-07-11 15:10:00' --stop-datetime='2017-07-11 15:12:00'
`ttt`.`users` "uid` = '0e8e2609c748bbb052d7'および` ip` = '172.16.208.32'および `sex` = 0および` app_ver` = '5.2.3'および `devide` = 2と` guides` = 148および `id` = 1 and` latitude` = ''および `add_time` = 1481602080および` recharge_time` = 0および `token_change_time` = 1481602129および` expaire_time` = 0および `nickname` = ' 67d64b79e8 'および `push_key` =' 'および` level` = 0および `bovel` =' 18810895535 'および` settings` =' = '=' = ''および `os_ver` = '=' 'limit 1;
`ttt`.`users`から削除` uid` = 'b5cfbdb4205b56703a97'および `ip` =" `id` = 2および` latitude` = ''および `add_time` = 1481602096および` recharge_change_time` = 1481602096および `expire_time` = 0および` nickname` = '家长091410' 2811354fe 'および `push_key` =' 7759d6772c9851a2bfc13835a3d7e7da 'および「モバイル」=' 13629470521 'および` settings `=' 'and` and `=' '=' '='終了83053時間2017-07-11 15:11:50

3.3. ロールバックSQLを解析する

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py --flashback -h127.0.0.1 -P3306 -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-position=79078 --stop-position=83053

解析されたSQLをチェックし、正しい場合はSQLファイル/data/backup/rollback.sqlに出力できます。

# python /usr/local/binlog2sql/binlog2sql/binlog2sql.py --flashback -uflashback -pflashback -dttt -tusers --start-file='mysql-bin.000034' --start-position=79078 --stop-position=83053> /data/backup/rollback.sql
# cat /data/backup/rollback.sql 
`id`、` latitude`、 `add_time`、 `recharge_time`、` token_change_time `、` nickname`、 `device_key`、` level `、` mobile `、` settings `、` dergitude`、 `signature`、 `os_46666530) '、' 172.16.218.75 '、0、' 5.2.93 '、3、' {\ "2103 \":1、\ "2100 \":1、\ "2101 \":1、\ "2102 \":1、\ "2104 \" 610680、0、1490239125、0、 'Zf'、 'DA75B093-BD22-48F6-BBB1-D3296E29E9B5'、 'BE05183F80A96E788E0B0A99D127392' Art 79078 End 83053 Time 2017-07-11 15:11:50
`ttt`.`users`( `uid`、` ip`、 `sex`、` app_ver`、 `device_type`、` guides`、 `last_login_time`、` latitude `、` add_time `、` rechange_time `、` expire `、 `push_key`、` level'、 `mobile`、` settings `、` suting `、` signature`、 `os_ver`)値( '77e50b4910a9389057 ed'、 '172.16.218.37'、0、 '5.2.14 10517、0、1488787835、0、 '陈俊宇'、 'ed0A273D-74DE-4173-92C6-55D92597BC79'、 ''、 '18612482272'、 ''、 '、' '' end '、' ')、'); 11:50

mysql接続構成

 -h ホスト; -P ポート; -u ユーザー; -p パスワード

解析モード

  • --realtime binlog を継続的に同期します。オプション。追加しない場合は、コマンドが実行されたときにデータが最新の binlog 位置に同期されます。
  • --popPk INSERT ステートメントから主キーを削除します。オプション。
  • -B, --flashback ロールバックステートメントを生成します。オプション。 realtime または popPk と同時に追加することはできません。

解像度範囲制御

  • --start-file ファイルの解析を開始します。しなければならない。
  • --start-pos 開始ファイルの解析開始位置。オプション。デフォルトは start-file の開始位置です。
  • --end-file ファイルの解析を終了します。オプション。デフォルトは start-file と同じファイルです。解析モードがリアルタイムの場合、このオプションは効果がありません。
  • --end-pos 終了ファイルの解析終了位置。オプション。デフォルトはファイルの最後の位置です。解析モードがリアルタイムの場合、このオプションは無効です。

オブジェクトフィルタリング

  • -d、--databases はターゲット DB の SQL のみを出力します。オプション。デフォルト値は空です。
  • -t、--tables はターゲット テーブルの SQL のみを出力します。オプション。デフォルト値は空です。

3.4. ロールバックを開始する

# mysql -uroot -p000000 < /data/backup/rollback.sql

3.5. ログインデータベースの検証

IV. 注意事項

4.1. 構成ファイルでは次のパラメータが設定されます。

サーバーID = 1
log_bin = /data/mysql/mysql-bin.log
最大バイナリログサイズ = 1G
binlog_format = 行
binlog_row_image = full # デフォルト

4.2. フラッシュバック中にMySQLサービスを開始する必要がある

BINLOG_DUMP プロトコルを介して binlog コンテンツを取得するため、SQL ステートメントに組み込む前に、サーバー側の information_schema.COLUMNS テーブルを読み取ってテーブル構造のメタ情報を取得する必要があります。したがって、ユーザーに提供する必要がある最小限の権限は次のとおりです。

'user'@'%' に *.* の SELECT、REPLICATION SLAVE、REPLICATION CLIENT 権限を付与します。

ソースコードでは、python-mysql-replication は主に MySQL binlog をリアルタイムで解析して各イベントを取得するために使用されます。 python-mysql-replication は、MySQL レプリケーション プロトコルを実装します。クライアントはスレーブを装って、マスターの binlog と EVENT を取得します。

4.3. ほとんどの場合、標準 SQL とロールバック SQL は、挿入、更新、削除のために解析できます。

1 つの例外: 挿入、更新、削除操作の後、テーブルを削除/切り捨てます。 この時点ではすべてのイベントが binlog に記録されていますが、binlog2sql を使用して標準 SQL とロールバック SQL を生成すると、DML 操作の対応するテーブルが見つからなくなります。

4.4. DDL は binlog2sql を使用してデータをフラッシュバックできません。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL フラッシュバック ツール binlog2sql の詳細なインストールと設定のチュートリアル
  • binlog2sql と簡単なバックアップおよびリカバリを使用して mysql8.0.20 を構成するための詳細な手順

<<:  Hadoop 2.Xの新機能、ごみ箱機能の説明

>>:  Hadoop におけるネームノードとセカンダリネームノードの動作メカニズムの説明

推薦する

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

nginxでgzip圧縮を有効にする手順を完了する

目次序文1. gzip圧縮を設定する2. 詳細設定3. nginxサービスを再起動する要約する序文ウ...

Linux yum パッケージ管理方法

導入yum (Yellow dog Updater, Modified) は、Fedora、RedH...

Vue のキーボードイベント監視の概要

キー修飾子キーボード イベントをリッスンする場合、詳細なキーを確認する必要があることがよくあります。...

Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

1. コンセプト1. ホットバックアップとバックアップの違いホット バックアップは高可用性 (HA)...

CentOS サーバーのセキュリティ構成戦略

最近、ブルートフォース攻撃によるサーバのクラッキングが頻発しています。侵入行為を大まかに分析し、よく...

Nginx ポート競合を解決するトラブルシューティング方法の例

問題の説明データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring...

マインスイーパゲームを実装するための jQuery プラグイン (1)

この記事では、jQueryプラグインを使用したマインスイーパゲームの最初の記事の具体的なコードを参考...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

最新バージョンMySQL5.7.19 解凍版インストールガイド

MySQL バージョン: MySQL Community Edition (GPL) ------ ...

MySQL でストアド プロシージャを作成し、データ テーブルに新しいフィールドを追加する方法の分析

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、データ テーブルに新しいフ...

MySql における無効な Null セグメント判定と IFNULL() 失敗の解決策

MySql Nullフィールド判定とIFNULL失敗処理ps: (プロセスを表示したくない場合は、S...

nginx を使用してカナリアリリースをシミュレートする方法

この記事では、ブルーグリーン デプロイメントと、nginx を使用してカナリア リリースを最も簡単な...

divは、自動入力スタイルをブロックする入力ボックスとして入力を使用せずにコンテンツを入力できます。

今日、私は公開用の動的なウィンドウ スタイルを設計しましたが、マウスで入力をクリックしたときにブラウ...

JavaScript の Set データ構造の詳細な説明

目次1. セットとは何か2. セットコンストラクタ2.1) 配列2.2) 文字列2.3) 議論2.4...