docker安装mysql并开启binlog

1、在linux中对应的挂载目录,我这里使用的是/mydata/mysql/my.cnf,创建mysql配置文件my.cnf,内容如下:

1
2
3
4
5
6
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
log-bin=mysql-bin
server-id=1

2、执行docker命令直接进行安装,看到如下提示说明安装成功了

1
docker run -di -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/my.cnf:/etc/mysql/my.cnf --privileged=true --restart=always -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.7 --lower_case_table_names=1

3、使用docker ps -a查看mysql的运行状况

4、查看当前的log_bin的开启情况

1
SHOW VARIABLES LIKE 'LOG_BIN%';

如果未开启状态,则需要在my.cnf中添加如下配置并重启mysql服务

1
2
3
[mysqld]
log-bin=mysql-bin
server-id=1

5、同样如果某些表不需要进行记录,也可以在配置文件中进行设置忽略

1
2
binlog-ignore-db = test
replicate-ignore-db = test

如何通过binlog恢复数据

首先查看当前mysql时间是否与服务器时间一致

1
select now(); 

如果时间不一致,会影响一会我们排查具体操作的时间范围,可以使用如下命令修复,修复后需要重启mysql服务

1
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime

然后进入docker容器中lob_bin_basename的位置,我这里是/var/lib/mysql/,然后找前缀为mysql-bin的日志文件

1
2
docker exec -it 容器名称 bash
cd /var/lib/mysql

然后通过mysqlbinlog导出要查询的日志到tmp.log文件,这里需要根据大概的操作时间按点来进行筛选

1
mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS --start-datetime='2022-01-22 00:00:00' --stop-datetime='2022-01-22 23:00:00' mysql-bin.000003 > tmp.log

到这里就可以根据表名或者其他关键字进行查找恢复了