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 におけるネームノードとセカンダリネームノードの動作メカニズムの説明

推薦する

Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...

MySQL ストアド プロシージャのエラー処理例の詳細な説明

この記事では、例を使用して MySQL ストアド プロシージャのエラー処理について説明します。ご参考...

フロントエンドの上級者向けコースでは、JavaScript のストレージ機能の使い方を学習します。

目次序文背景実施計画の考え方js ストレージ機能ソリューション設計やっと要約する序文どの SaaS ...

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加によく使用される MySQL の SQL 文の概要

この記事では、テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加を行う一般的な ...

メンテナンスしやすい CSS コードを書くための 5 つのガイドライン

1. スタイルシートの先頭にコメント ブロックを追加して、スタイルシートの作成日、作成者、タグ、その...

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

JDBC および MySQL 一時テーブルスペースの詳細な分析

背景一時テーブルスペースは、データベースのソート操作を管理し、一時テーブルや中間ソート結果などの一時...

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...

フォーム検証機能を実装するためのネイティブ js

目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

Zabbix パスワードをリセットする方法 (ワンステップ)

問題の説明長い間アカウントパスワードを入力して Zabbix にログインしていないため、管理者パスワ...

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

Vueはミックスインを使用してコンポーネントを最適化します

目次ミックスインの実装フック関数のマージプロジェクト実践伸ばす要約するVue は mixins AP...