使用官方mysql映像启用二进制日志记录的最佳方法是什么?
我尝试过使用mysql:5.7映像,在运行它时覆盖命令以通过启动选项启用二进制日志记录到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
添加一个mysql用户可以写入的卷并创建自定义映像,还是有更好的方法来实现它?这只能使用官方的mysql图像吗?
答案 0 :(得分:5)
这种方法的问题是mysql用户没有写入/ var / log / mysql目录的权限
问题实际上是/var/log/mysql
Docker镜像上不存在目录mysql:5.7
。您可以确保它运行以下容器:
$ docker run --rm mysql:5.7 ls /var/log/
alternatives.log
apt
bootstrap.log
btmp
dmesg
dpkg.log
faillog
fsck
lastlog
wtmp
此外,MySQL binary logs不是用于跟踪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