show variables like 'log_%'; 查询数据库当前是否开启了binlog
真正的修改很简单,就修改一个配置然后重启
要修改的文件名字是 mysql.cnf,他一般存在于 /etc/mysql 下,只需要在文件内追加几行
[mysqld]
# binlog 配置
log-bin = mysql-bin.log
expire-logs-days = 14
max-binlog-size = 500M
# 5.7以后的版本需要制定唯一的编号
server-id = 1
log-bin 最好不要随便定义目录,因为有权限的问题,可能导致最终数据库无法正常启动
所以比较稳妥的做法是像我一样老实的单指定一个单文件,要是很不幸你设置了一个自定义目录,并且数据库你也重启了,那么你会发现你的mysql容器一直在尝试重启,无法正确启动,用 docker logs 容器名 命令可以看到
这时候无法通过 docker exec -ti 命令进入容器内,只能通过强行从宿主机将正确的配置文件覆盖到容器内,然后再次重启来解决问题了,具体方法为
docker inspect -f '{{.ID}}' 应用名 查出容器长ID
然后用 docker cp 源文件 容器长ID:/docker内路径 命令覆盖错误的配置文件,重新启动容器,然后mysql终于运行正常了!
show variables like 'log_%'; 再次查询mysql
大功告成!
另外还有一点需要注意的是同一个docker容器内如果有多个binlog则 log-bin 对应的文件名必须不能相同,不然会出现读取同一个binlog日志的现象