1. 查看是否打开了Binlog

```

show variables like ‘%log_bin%’;

```

ON表示已经打开 OFF表示关闭 默认关闭状态

![image](https://zmzycc.top/upload/2023/02/image.png)

2. 开启开启binlog

1. 方法一

```

SET SQL_LOG_BIN=1 命令开启

SET SQL_LOG_BIN=0 命令关闭

```

2. 方法二

```

找到mysql的配置文件,添加以下参数。并重启mysql服务

vim /etc/my.cnf

server_id=1

log-bin=mysql-bin

binlog-format=Row

expire_logs_days=5

```

3. 查看所有log文件

```

show master logs;

```

![image-1675405380009](https://zmzycc.top/upload/2023/02/image-1675405380009.png)

4. 使用Binlog恢复数据

```

刷新binlog日志

Flush logs;

```

1. 查看当前正在binlog日志

```

show master status;

```

![image-1675405920704](https://zmzycc.top/upload/2023/02/image-1675405920704.png)

测试表, 测试update 【全部改为王五,再改为老王,恢复为全部为王五】

![image-1675406000677](https://zmzycc.top/upload/2023/02/image-1675406000677.png)

```

update school set name = '王五';

update school set name = ‘老王’;

```

恢复数据最好再次刷新新的binlog日志

![image-1675406429761](https://zmzycc.top/upload/2023/02/image-1675406429761.png)

查看修改产生的binlog日志文件内容

```

show binlog EVENTS in 'mysql-bin.000014';

```

如果是恢复最后一次修改前数据,则使用记录的倒数第二条日志的结束起止坐标

![image-1675408282379](https://zmzycc.top/upload/2023/02/image-1675408282379.png)

5. 通过指定位置恢复数据

```

/usr/local/mysql/bin/mysqlbinlog --start-position=219 --stop-position=544 --database=test /data/mysql/data/mysql-bin.000014 | /usr/bin/mysql -uroot -pzhangyou -v test

/usr/local/mysql/bin/mysqlbinlog 为binlog命令

--database=test 指定数据库为test的日志

/data/mysql/data/mysql-bin.000014 为binlog日志

--start-position=219 开始位置

--stop-position=544 结束位置

/usr/bin/mysql -uroot -pzhangyou -v test 连接mysql、并指定需要恢复的数据库 -v 为显示详细信息

```

通过时间恢复

```

/usr/local/mysql/bin/mysqlbinlog --start-datetime="2023-02-03 14:35:50" --stop-datetime="2023-02-03 14:36:48" --database=test /data/mysql/data/mysql-bin.000014 | mysql -uroot -pzhangyou -v test

```

![image-1675414946873](https://zmzycc.top/upload/2023/02/image-1675414946873.png)

查看binlog日志的几种方式

1. 生成sql文件

/usr/local/mysql/bin/mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000014 > a.sql