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)

image.png

插入数据

image.png

使用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.

目前两个表共有数据如下(全备数据库)

image.png

image.png

以上相当于晚上23:50点数据库的全备数据

现在classclass02重新插入新的数据,相当于1月4日晚上23:50以后到1月5日早上1200之前的数据

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,'范总','大四');

Query OK, 2 rows affected (0.01 sec)

Records: 2  Duplicates: 0  Warnings: 0

图片

删除mzl库

mysql> drop database mzl;

图片

使用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)

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.00 sec)

查看全备数据


图片

全量导入之后,数据不完整,没有后来插入的数据,接下来使用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;

图片

确认要恢复终点位置,即执行"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 

图片

图片

确定了开始结束点,执行增量恢复

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

结束:mysql-bin.000005文件的861

图片

恢复mysqlbinlog

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


相关阅读:

Mysql8.0 主从复制

Mysql权限管理

Mysql8.0安装实战


图片


猜你喜欢

转载自blog.51cto.com/15127516/2657670