天天看點

利用mysqldump+binlog恢複被删除的資料

接着mysql8.0 主從複制操作

mysql> show databases;

+--------------------+

| database           |

| information_schema |

| mysql              |

| mzl                |

| performance_schema |

| sys                |

5 rows in set (0.00 sec)

mysql> use mzl;

database changed

mysql> show tables;

empty set (0.00 sec)

mysql> create table class (id int(10) not null auto_increment, name varchar(30),grade varchar(20), primary key(id));

query ok, 0 rows affected, 1 warning (0.04 sec)

mysql> desc class;

+-------+-------------+------+-----+---------+----------------+

| field | type        | null | key | default | extra          |

| id    | int(10)     | no   | pri | null    | auto_increment |

| name  | varchar(30) | yes  |     | null    |                |

| grade | varchar(20) | yes  |     | null    |                |

3 rows in set (0.01 sec)

利用mysqldump+binlog恢複被删除的資料

插入資料

利用mysqldump+binlog恢複被删除的資料

使用mysqldump對mzl資料庫執行完全備份

[root@k8s-master1 ~]# mysqldump  -uroot -p123456 --single-transaction  --master-data=2 --flush-logs --flush-privileges --events --routines  --all-databases  >  /tmp/mzldb0105.sql

mysqldump: [warning] using a password on the command line interface can be insecure.

目前兩個表共有資料如下(全備資料庫)

利用mysqldump+binlog恢複被删除的資料
利用mysqldump+binlog恢複被删除的資料

以上相當于晚上23:50點資料庫的全備資料

現在class和class02重新插入新的資料,相當于1月4日晚上23:50以後到1月5日早上12:00之前的資料

mysql> insert into class02 values (3,'jim','國小一年'),(4,'tom','研究所學生');

query ok, 2 rows affected (0.01 sec)

records: 2  duplicates: 0  warnings: 0

mysql>  insert into class values (25,'田總','博士'),(26,'範總','大四');

利用mysqldump+binlog恢複被删除的資料

删除mzl庫

mysql> drop database mzl;

利用mysqldump+binlog恢複被删除的資料

使用mysqldump的全備導入

mysql> create database mzl;

query ok, 1 row affected (0.00 sec)

mysql> source /tmp/mzldb0105.sql

query ok, 0 rows affected (0.00 sec)

檢視全備資料

利用mysqldump+binlog恢複被删除的資料

全量導入之後,資料不完整,沒有後來插入的資料,接下來使用mysqlbinlog對二進制日志執行增量恢複

mysqlbinlog進行增量日志恢複最重要的就是确定待恢複的起始位置(start-position)和終止位置(stop-position),起始位置(start-position)是我們執行全備之後的位置,而終止位置則是故障發生之前的位置。

[root@k8s-master1 tmp]# more mzldb0105.sql

-- position to start replication or point-in-time recovery from

-- change master to master_log_file='mysql-bin.000005', master_log_pos=191;

利用mysqldump+binlog恢複被删除的資料

确認要恢複終點位置,即執行"drop database lijiaman"之前的位置,需要到binlog裡面确認。

[root@k8s-master1 mysql]# mysqlbinlog  --no-defaults   --base64-output=decode-rows  -v -v   mysql-bin.000005 > mzl-bin.txt

[root@k8s-master1 mysql]# more mzl-bin.txt 

利用mysqldump+binlog恢複被删除的資料
利用mysqldump+binlog恢複被删除的資料

确定了開始結束點,執行增量恢複

開始:mysql-bin.000005日志的191

結束:mysql-bin.000005檔案的861

利用mysqldump+binlog恢複被删除的資料

恢複mysqlbinlog

[root@k8s-master1 mysql]# mysqlbinlog --no-defaults --start-position=191  --stop-position=958 /data/mysql/mysql/mysql-bin.000005 |mysql -uroot -p123456

原文連結:https://mp.weixin.qq.com/s?__biz=mza3mtqxndk3nq==&mid=2650861606&idx=1&sn=b292961a38f83bd125af2091f210653b&chksm=84d9b5f6b3ae3ce0fc596e36631b8807641e32753cebf03f5f34b56627e3ea645d58fed12dda&cur_album_id=1683530796805980166&scene=189#rd

繼續閱讀