如何使用正式的Docker镜像启用MySQL二进制日志logging?

使用官方的mysql映像启用二进制日志的最好方法是什么?

我已经尝试使用mysql:5.7映像,在运行它时也覆盖了命令,还要通过启动选项启用二进制日志logging到mysqld(请参见下文)。 这种方法的问题是,mysql用户没有权限写入/var/log/mysql目录。

运行命令:

 docker run -d \ --name mysql \ -v /var/lib/mysql:/var/lib/mysql \ mysql:5.7 \ mysqld \ --datadir=/var/lib/mysql \ --user=mysql \ --server-id=1 \ --log-bin=/var/log/mysql/mysql-bin.log \ --binlog_do_db=test 

输出:

 mysqld: File '/var/log/mysql/mysql-bin.index' not found (Errcode: 2 - No such file or directory) 

我应该分叉存储库,并为/var/log/mysql添加一个用户可以写入并创build一个自定义图像的卷,还是有更好的方法来做到这一点? 这可能只使用官方的MySQL镜像?

这种方法的问题是,mysql用户没有权限写入/ var / log / mysql目录

问题实际上是在mysql:5.7 Docker镜像上不存在目录/var/log/mysql 。 您可以确保它运行以下容器:

 $ docker run --rm mysql:5.7 ls /var/log/ alternatives.log apt bootstrap.log btmp dmesg dpkg.log faillog fsck lastlog wtmp 

此外, MySQL二进制日志不是用于跟踪MySQL服务器活动或错误的日志; 他们是日志意味着给你的MySQL服务器一个服务器崩溃的情况下恢复数据的机会。

因此,您需要这些二进制日志:

  • 保持接近您的数据
  • 写在一个快速的文件系统上

在大多数情况下,Docker容器文件系统很慢,这就是容器的MySQL数据文件夹被声明为VOLUME的原因 。

所以你也希望你的二进制日志写在Docker数据卷上而不是Docker容器文件系统上。


长话短说,开始你的容器:

 docker run -d \ --name mysql \ -v /var/lib/mysql:/var/lib/mysql \ mysql:5.7 \ mysqld \ --datadir=/var/lib/mysql \ --user=mysql \ --server-id=1 \ --log-bin=/var/lib/mysql/mysql-bin.log \ --binlog_do_db=test