如何使用官方Docker映像启用MySQL二进制日志记录?

Bre*_*ett 2 mysql docker

使用官方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
Run Code Online (Sandbox Code Playgroud)

输出:

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

我应该分叉存储库并添加一个供/var/log/mysqlmysql用户写入并创建自定义映像的卷,还是有更好的方法呢?仅使用官方的mysql镜像可能吗?

Tho*_*eil 6

这种方法的问题是mysql用户无权写入/ var / log / mysql目录

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

$ docker run --rm mysql:5.7 ls /var/log/
alternatives.log
apt
bootstrap.log
btmp
dmesg
dpkg.log
faillog
fsck
lastlog
wtmp
Run Code Online (Sandbox Code Playgroud)

此外,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
Run Code Online (Sandbox Code Playgroud)