一、binlog日志开启
1、在mysql安装目录下找到 my.ini 文件
2、在my.ini 文件的 [mysqld] 部分,添加以下内容
server_id=2023
log_bin=mysql-bin
binlog_format=row
* server_id是设置服务器的ID,可自定义数值
*log_bin=mysql-bin 启动二进制日志binlog,并指定日志的文件名前缀为mysql-bin
*binlog_format=row 设置记录格式为ROW
3、保存 my.ini 后重启MySQL服务
1)方法一:以管理员权限打开命令提示符,输入
# 停止mysql
net stop mysql
# 启动mysql
net start mysql
2)方法二:在任务管理器中找到mysql服务,右键手动重启
4、查看binlog日志是否已启用
连接上mysql数据库后,输入
show variables like '%log_bin%';
如果返回值中“log_bin”的值为ON,则表示已经启动了binlog日志。
* 返回结果中的“log_bin_basename”,展示了binlog日志的前缀名及存储位置
5、查看已有的binlog文件及正在使用的binlog文件
# 查看已有的binlog文件
show binary logs;
# 或者
show master logs;
# 查看正在使用的binlog文件
show master status;
6、生成新的binlog日志
方式一:重启mysql服务
方式二:使用命令
flush logs;
二、数据恢复(基于节点id)
1、创建表、插入及更改数据
# 创建表test
create table test (
id int not null auto_increment primary key,
name VARCHAR(10) DEFAULT null
) ENGINE=InnoDB auto_increment=1 DEFAULT CHARSET=utf8;
# 插入值
INSERT into test VALUES(2,"xiuaohong");
#修改值
update test set name = "dahong" where id = 2;
update test set name = "buhong" where id = 2;
2、查看binlog记录事件
show binlog events in '当前使用的binlog日志';
3、 数据恢复
注意:用命令提示符按照个人情况修改后运行以下命令
mysqlbinlog --no-defaults --start-position=571 --stop-position=719 binlog文件的绝对路径 | mysql -u MySQL账号 -p
* --no-defaults 如果没加这个参数,命令执行时候会遇到报错(mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8‘)
* --start-position=571 要回退的那一步操作的“BEGIN”的“End_log_pos”
* --stop-position=791 要回退的那一步操作“COMMIT”的“End_log_pos”
注意:如果是要恢复为插入时候的数值,可以把该条记录删除,选择插入时的记录进行恢复;如果是删库恢复,需要把从建库到删除前的最后一条对库的操作记录全部执行。
结果:
三、数据恢复(基于时间)
1、确认时间
注意:用命令提示符按照个人情况修改后运行以下命令
# 查看binlog
mysqlbinlog --no-defaults 具体binlog文件的绝对路径
# 或者
mysqlbinlog --no-defaults -v --set-charset=utf8 具体binlog文件的绝对路径
# -v 表示使用伪sql代码形式查看
# 转为其他文件形式进行查看
mysqlbinlog --no-defaults -v --set-charset=utf8 具体binlog文件的绝对路径 > 转换后的文件的绝对路径
# 该命令将伪sql代码状态下的binlog日志复制一份,源文件不变
* 若不记得具体时间可配合“基于节点id”方法中看到的节点id
2、数据恢复
mysqlbinlog --no-defaults --start-datetime="2023-12-13 11:42:58" --stop-datetime="2023-12-13 11:58:40" binlog文件的绝对路径 | mysql -u MySQL账号 -p
四、补充
无法以该方法恢复数据可尝试【记一次通过binlog日志恢复MySQL数据库的经历_mysql 从日志恢复-CSDN博客】 (未实践)