mysql 开启binlog日志,恢复误的删表、数据

mysql 开启binlog日志,恢复数据

linux下开启mysql的binlog日志功能。

1.配置mysql配置文件my.cnf。

#配置文件储存的位置
log-bin=mysql-bin
#5.7以及以上版本需要配置这一行(保证唯一性,可随意输入)
server-id=123
#binlog的格式 :statement(保存语句)、row(保存执行后的结果)、mixed(同时保存语句和结果)
binlog-format=ROW
#表示每执行一次就同步
sync-binlog=1

2.重启mysql服务后。查看日志功能是否正常开启

mysql> show variables like 'log_%';

![在这里插入图片描述](https://img-blog.csdnimg.cn/7a7a380743b449e3b5ae429741b98ea7.png

恢复数据

创建新的日志控制开始点(创建新的日志文件) mysql

mysql> flush logs;

查看创建的日志文件(如下图最新生成的mysql-bin.000014) mysql

mysql> show master status;

在这里插入图片描述
创建数据库 mysql

DROP DATABASE IF EXISTS `study1`;
CREATE DATABASE `study1`;

创建数据表 mysql

DROP TABLE IF EXISTS `study1`.`tb_class`;
CREATE TABLE `study1`.`tb_class`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `score` int(255) NULL DEFAULT NULL,
  `grade` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

插入数据 mysql

INSERT INTO `study1`.`tb_class` VALUES (1, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (2, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (3, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (4, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (5, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (6, 'a', 10, 'a');

在这里插入图片描述
删除表数据,插入新数据 mysql

DELETE from `study1`.`tb_class`;
INSERT INTO `study1`.`tb_class` VALUES (99999, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (999995, 'a', 10, 'a');
INSERT INTO `study1`.`tb_class` VALUES (999996, 'a', 10, 'a');

查找恢复点,即删除数据之前的备份点(mysql-bin.000014为上面生成的日志文件) linux

/usr/bin/mysqlbinlog --no-defaults -v  /var/lib/mysql/mysql-bin.000014

在这里插入图片描述

恢复数据(恢复点如上截图,此处找到删除前备份点为3014) linux

/usr/bin/mysqlbinlog --no-defaults -v  /var/lib/mysql/mysql-bin.000014 --stop-position=3014 -v | mysql -uroot -proot

可以看到数据已恢复到删除前的状态。
在这里插入图片描述
删除表 mysql

DROP TABLE IF EXISTS `study1`.`tb_class`;

恢复 linux

/usr/bin/mysqlbinlog --no-defaults -v  /var/lib/mysql/mysql-bin.000014 --stop-position=3014 -v | mysql -uroot -proot

删库 mysql

DROP DATABASE `study1`;

恢复 linux

/usr/bin/mysqlbinlog --no-defaults -v  /var/lib/mysql/mysql-bin.000014 --stop-position=3014 -v | mysql -uroot -proot

总结

日志恢复,既是在日志生成那一刻将执行的操作保存下来,在需要恢复的时候重新执行一遍到指定位置点(如上面的3014),如遇到恢复时提示创建的库存在、创建的表存在。则是因为创建库、表时没规范的执行一次库、表的判断删除

DROP DATABASE IF EXISTS `库名`;
DROP TABLE IF EXISTS `库名`.`表名`;

mysql-binlog 日志恢复演示

参考学习自以下文章:
docker下使用logbin备份mysql数据,删除以及恢复

MySQL通过binlog恢复数据

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值