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_%';
恢复数据
创建新的日志控制开始点(创建新的日志文件) 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数据,删除以及恢复