如何使用正式的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