通过日志进行恢复误删的表、数据、mysql库
(希望大家在工作中永远不要用到)执行什么命令都要对自己负责具备工匠精神
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_%';
恢复数据
创建新的日志控制开始点(创建新的日志文件) mysql
mysql> flush logs;
查看创建的日志文件(如下图最新生成的mysql-bin.00003) 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, 'cc');
INSERT INTO `study1`.`tb_class` VALUES (4, 'a', 10, 'dd');
INSERT INTO `study1`.`tb_class` VALUES (5, 'a', 10, 'ee');
INSERT INTO `study1`.`tb_class` VALUES (6, 'a', 10, 'ff');
删除表数据,插入新数据 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, 'b');
INSERT INTO `study1`.`tb_class` VALUES (999996, 'a', 10, 'c');
查找恢复点,即删除数据之前的备份点(mysql-bin.000003为上面生成的日志文件) linux
/usr/bin/mysqlbinlog --no-defaults -v --start-datetime="2022-06-08 10:00:00" --stop-datetime="2022-06-09 17:35:00" /var/lib/mysql/mysql-bin.000003 (可以使用find命令查找mysqlbinlog、mysql-bin.000003路径)
--no-defaults
读取没有选项的文件, 指定的原因是由于 mysqlbinlog 无法识别 BINLOG 中的default-character-set=utf8
指令- --start-datetime="2022-06-08 10:00:00" 开始时间
- --stop-datetime="2022-06-09 17:35:00" 结束时间
- | grep XXXX 进行过滤
恢复数据(恢复点如上截图,此处找到删除前备份点为2766) linux
/usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003 --stop-position=2766 -v | mysql -uroot -p密码
可以看到已经恢复的数据
删除表 mysql
DROP TABLE IF EXISTS `study1`.`tb_class`;
恢复 linux
/usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003 --stop-position=2766 -v | mysql -uroot -p密码
删库 mysql
DROP DATABASE `study1`;
恢复 linux
/usr/bin/mysqlbinlog --no-defaults -v /var/lib/mysql/mysql-bin.000003 --stop-position=2766 -v | mysql -uroot -p密码
总结
日志恢复过程中,主要靠备份点进行备份还原,如果遇到报错表已存在库、已存在表时因为建库建表时没规范的执行一次库、表的判断删除
DROP DATABASE IF EXISTS `库名`;
DROP TABLE IF EXISTS `库名`.`表名`;
本文来自博客园,作者:ganfd,转载请注明原文链接:https://www.cnblogs.com/ganfd/p/16355853.html