1. 程式人生 > >在mysql 使用binlog日誌

在mysql 使用binlog日誌

str gdi strong my.cnf配置 dup lec sel ins 之前

一. 利用binlog恢復庫表
策略:
1.啟用binlog日誌
2.創建db1庫tb1表,插入3條記錄
3.刪除tb1表中剛插入的3條記錄
4.使用mysqlbinlog恢復刪除的3條記錄

步驟一:啟用binlog日誌
1)調整/etc/my.cnf配置,並重啟服務
[mysqld]
......
log_bin=logdir
server_id=50
binlog_format=mixed
......

[root@MySQL50 ~]# systemctl restart mysqld

2)確認binlog日誌文件
新啟用binlog後,每次啟動MySQl服務都會新生成一份日誌文件:
[root@MySQL50 ~]# ls /var/lib/mysql/logdir.*

/var/lib/mysql/logdir.000001 /var/lib/mysql/logdir.index
其中logdir.index文件記錄了當前保持的二進制文件列表:
重啟MySQL服務程序,或者執行SQL操作“FLUSH LOGS;”,會生成一份新的日誌:

[root@MySQL50 ~]# cat /var/lib/mysql/logdir.index
./logdir.000001
[root@MySQL50 ~]# systemctl restart mysqld
[root@MySQL50 ~]# cat /var/lib/mysql/logdir.index
./logdir.000001
./logdir.000002
步驟二:利用binlog日誌重做數據庫操作
1)執行數據庫表添加操作

創建db1·庫tb1表,表結構自定義:

mysql> create database db1;
Query OK, 1 row affected (0.11 sec)

mysql> create table db1.tb1 (
-> id tinyint,
-> name char(18)
-> );
Query OK, 0 rows affected (0.68 sec

mysql> insert into db1.tb1 values(
-> 1,"yangmi"),
-> (2,"tangyuan"),
-> (3,"liuyan");

Query OK, 3 rows affected (0.13 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from db1.tb1;
+------+----------+
| id | name |
+------+----------+
| 1 | yangmi |
| 2 | tangyuan |
| 3 | liuyan |
+------+----------+
3 rows in set (0.00 sec)
2)刪除前一步添加的3條表記錄

執行刪除所有表記錄操作:
mysql> delete from db1.tb1;
Query OK, 3 rows affected (0.14 sec)

mysql> select * from db1.tb1;
Empty set (0.00 sec)
步驟三:通過binlog日誌恢復表記錄
binlog會記錄所有的數據庫、表更改操作,所以可在必要的時候重新執行以前做過的一部分數據操作,但對於啟用binlog之前已經存在的庫、表數據將不適用。
根據上述“恢復被刪除的3條表記錄”的需求,應通過mysqlbinlog工具查看相關日誌文件,找到刪除這些表記錄的時間點,只要恢復此前的SQL操作(主要是插入那3條記錄的操作)即可。

[root@MySQL50 ~]# cat /var/lib/mysql/logdir.index
./logdir.000001
./logdir.000002

mysql> show variables like "binlog_format";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.01 sec)

2) 執行指定Pos節點範圍內的sql命令恢復數據
mysql> create table db1.tb2 ( id tinyint, name char(12) );
Query OK, 0 rows affected (0.40 sec)

alert user root@localhost identified by "Wjc_2018";

在mysql 使用binlog日誌