Mysql 删库后 用binlog日志 恢复到最新数据

MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离、数据增量备份以及服务器宕机时的数据恢复。每个业务数据库必然都会定期做备份。可以在误删除或磁盘故障的时候将丢失的数据快速恢复。但是可以想想备份都是在固定时间点。不能完全恢复到最新的数据,这是不能接受的。试想一下,在主从架构中误操作把主库的数据...
摘要由CSDN通过智能技术生成

 

MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离、数据增量备份以及服务器宕机时的数据恢复。

每个业务数据库必然都会定期做备份。可以在误删除或磁盘故障的时候将丢失的数据快速恢复。但是可以想想备份都是在固定时间点。不能完全恢复到最新的数据,这是不能接受的。

试想一下,在主从架构中误操作把主库的数据库直接干掉了,而备份的数据还是几个小时前的。这几个小时内插入了很多数据 这些数据怎么恢复呢? 这时候就体现binlog日志的重要性了。

实践开始

MySQL 版本

[root@docker ~]# mysql -V
mysql  Ver 14.14 Distrib 5.7.24, for linux-glibc2.12 (x86_64) using  EditLine wrapper

系统版本

[root@docker ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

查看当前所有数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| devops             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

用devops库来做这次的验证

对现有数据库做个备份

# 看一下数据库有哪些数据
mysql> show tables;
+------------------+
| Tables_in_devops |
+------------------+
| ops_user         |
+------------------+
1 row in set (0.00 sec)
mysql> select * from ops_user;
+----+--------------+----------+-----------------------+------+--------+------------+
| id | username     | password | duties                | age  | gender | entry_time |
+----+--------------+----------+-----------------------+------+--------+------------+
|  2 | 贝克汉姆     | 123456   | 自动化运维            | 43   | 男     | 20190313   |
|  3 | 维多利亚     | 123456   | 自动化运维            | 43   | 女     | 20190313   |
|  4 | 罗密欧       | 123456   | 运维先生              | 28   | 男     | 20190313   |
|  5 | 朱丽叶       | 123456   | 先生情人              | 36   | 女     | 20190313   |
|  6 | 小丸子       | 123456   | 先生女友              | 18   | 女     | 20190313   |
+----+--------------+----------+-----------------------+------+--------+------------+

整库做个备份

# mysqldump -uroot -p123456 -B devops > /root/devops.sql

登录到数据库刷新binlog日志

每次刷新和服务重启的时候,都会生成一个binlog日志文件。刷新binlog日志,生成一个新的日志,那么我们之后所要操做的内容都会被记录到新的日志文件中。

# 阶段binlog日志
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

# 查看状态
mysql> show master status;
+----------------------+----------+--------------+------------------+-------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------+----------+--------------+------------------+-------------------+
| mysql3306-bin.000009 |      154 |              |                  |                   |
+----------------------+----------+--------------+------------------+-------------------+

mysql> use devops;

# 插入一条数据 作为备份时间后期间的新增数据
mysql> insert into ops_user(username,password,duties,age,gender,entry_time) values('花木兰','123456','自动化运维','30','女','20190313');


# 检查现在的数据

mysql> select * from ops_user;
+----+--------------+----------+-----------------------+------+--------+------------+
| id | username     | password | duties                | age  | gender | entry_time |
+----+--------------+----------+-----------------------+------+--------+------------+
|  2 | 贝克汉姆     | 123456   | 自动化运维            | 43   | 男     | 20190313   |
|  3 | 维多利亚     | 123456   | 自动化运维媳妇        | 43   | 女     | 20190313   |
|  4 | 罗密欧       | 123456   | 运维先生              | 28   | 男     | 20190313   |
|  5 | 朱丽叶       | 123456   | 先生情人              | 36   | 女     | 20190313   |
|  6 | 小丸子       | 123456   | 先生女友              | 18   | 女     | 20190313   |
|  7 | 花木兰       | 123456   | 先生情妇              | 30   | 女     | 20190313   |
+----+--------------+----------+-----------------------+------+--------+------------+
6 rows in set (0.00 sec)

直接删库

mysql> drop database devops;
Query OK, 1 row affected (0.05 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

可以看到devops库已经被删掉,在生产环境中一定要禁止这类操作,太危险了。如果发生了,立即使用备份数据进行恢复。

mysql> source /root/devops.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

......

Database changed
Query OK, 0 rows affected (0.01 sec)
......

Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)
......

Query OK, 0 rows affected (0.00 sec)

查看一下是否恢复成功

mysql> show databases;
+---------
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值