MySQLデータベースのデータのロールバック
- 第1章:データのロールバックにbinlogを使用する
- ①binlogファイルの場所を確認する
- ②マスターデータに格納されているデータのbinlogファイル名を閲覧
- ③binlogファイルの内容をコンソールに表示する
- ④ロールバック方法1:時間をかけてSQLステートメントをエクスポートする
- ⑤注:サーバーと現地時間を比較して時間差を計算し、時間傍受エラーを回避します
- ⑥ロールバック方法2:場所を通じてSQLステートメントをエクスポートする
- ⑦SQLファイルの回復方法1:ソースメソッドを使用してデータベースを回復する
- ⑧スキル:指定したライブラリに関連するSQLスクリプトをフィルタリングしてエクスポートする
- ⑨SQLファイルの回復方法2:回復データベースをインポートする
- ⑩スキル:Binlog直接回復方法
第1章:データのロールバックにbinlogを使用する
①binlogファイルの場所を確認する
最初に、次のステートメントでbinlogファイルの場所を確認します。
show variables like '%log_bin%';
場所がわかります /usr/local/mysql-8.0.11/data/
②マスターデータに格納されているデータのbinlogファイル名を閲覧
ビューshow master status
は、格納されているデータを現在binlog.000025に配置している場所を見つけることができます
③binlogファイルの内容をコンソールに表示する
binの下のmysqlbinlogツールを使用してbinlogファイルを表示すると、何が記録されているかを確認できます。
[root@localhost bin]# "/usr/local/mysql-8.0.11/bin/mysqlbinlog" --no-defaults "/usr/local/mysql-8.0.11/data/binlog.000025"
④ロールバック方法1:時間をかけてSQLステートメントをエクスポートする
誤って削除したときの様子をご覧ください。
中間時点を介してSQLステートメントをエクスポートすると、ローカル時間とサーバー時間が同期されないため、特定の時間差が生じます。次のセクションでは、時間差の計算方法について説明します。
[root@localhost bin]# "/usr/local/mysql-8.0.11/bin/mysqlbinlog" --no-defaults --start-datetime="2020.08.13 18:50:00" --stop-datetime="2020.08.13 18:55:00" "/usr/local/mysql-8.0.11/data/binlog.000025" > 0813.sql
⑤注:サーバーと現地時間を比較して時間差を計算し、時間傍受エラーを回避します
サーバーの時刻を確認してください。
[root@localhost bin]# date
Thu Aug 13 07:44:36 EDT 2020
現地時間を確認すると、私の現地時間の方が約8分早くなっていることがわかります。ログを傍受する場合は、8分前に内容を確認する必要があります。
⑥ロールバック方法2:場所を通じてSQLステートメントをエクスポートする
まず、2つのリカバリポイント間の位置情報を確認します。
上記は2つの時点で傍受されますが、これは2つの場所で傍受されます。
場所を指定してデータベースをエクスポートします。
[root@localhost mysql-8.0.11]# "/usr/local/mysql-8.0.11/bin/mysqlbinlog" --no-defaults --start-position=204590 -d ncc_0807mysql --stop-position=252554 "/usr/local/mysql-8.0.11/data/binlog.000025" > 0815.sql
⑦SQLファイルの回復方法1:ソースメソッドを使用してデータベースを回復する
データベースにログインし、データベースを切り替えて、データベースを復元します。
[root@localhost ~]# "/usr/local/mysql-8.0.11/bin/mysql" -uroot -p123456 -A
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 8.0.11 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| ncc_0807auto |
| ncc_0807mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.01 sec)
mysql> use ncc_0807mysql;
Database changed
mysql> source /usr/local/mysql-8.0.11/bin/0813.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
⑧スキル:指定したライブラリに関連するSQLスクリプトをフィルタリングしてエクスポートする
データベースを指定します:-dデータベース名、または-database =データベース名。
[root@localhost mysql-8.0.11]# "/usr/local/mysql-8.0.11/bin/mysqlbinlog" --no-defaults --start-datetime="2020.08.13 06:50:00" -d ncc_0807mysql --stop-datetime="2020.08.13 06:55:00" "/usr/local/mysql-8.0.11/data/binlog.000025" > 0814.sql
⑨SQLファイルの回復方法2:回復データベースをインポートする
リカバリデータベースをインポートします。
[root@localhost mysql-8.0.11]# "/usr/local/mysql-8.0.11/bin/mysql" -uroot -p123456 ncc_0807mysql < "/usr/local/mysql-8.0.11/0814.sql"
⑩スキル:Binlog直接回復方法
直接binlog回復ライブラリメソッドの場所。
転送せずに直接回復します。
[root@localhost mysql-8.0.11]# "/usr/local/mysql-8.0.11/bin/mysqlbinlog" --no-defaults --start-position=204590 --stop-position=252554 "/usr/local/mysql-8.0.11/data/binlog.000025" | "/usr/local/mysql-8.0.11/bin/mysql" -uroot -p123456
気に入ったら気に入ってください❤!