在我的Windows 10 Pro Host Machine上运行Docker官方图像MySQL:8.0.30-Debian,我想记录所有查询,慢速查询和错误与主机计算机上的文件。在本文中,我们正在讨论如何实现这一目标。
我们之前已经讨论过如何在Docker on Windows 10: running mysql:8.0.30-debian with a custom config file中为MySQL Docker Official Image实现自定义配置文件。这篇文章假设我们正在使用此自定义配置文件。
我想做的是记录所有查询,慢速查询和对主机上的文件的错误。对每种日志类型的官方引用:
因此,自定义配置文件 e:\ mysql-config \ mysql-docker.cnf 被更新为:
[mysqld]
default_authentication_plugin=mysql_native_password
log_bin_trust_function_creators=1
# Below contents are updated contents.
# General and slow logging.
log_output=FILE
general_log=1
general_log_file="/var/lib/mysql/general_log.log"
slow_query_log=1
slow_query_log_file="/var/lib/mysql/slow_query.log"
long_query_time=10
log_queries_not_using_indexes=1
# Error Logging.
log_error="/var/lib/mysql/error.err"
我直接在Windows上更新了它,它的权限被更改了,正如Docker on Windows 10: running mysql:8.0.30-debian with a custom config file中所述,我们需要将其权限更改为正确的权限。
mysql-docker mysql:8.0.30-debian 容器正在运行,使用 bash Process 启动交互式模式更改配置文件权限:
E:\>docker exec -it mysql-docker bash
root@8e6656b15d9a:/# cd /etc/mysql/conf.d/
root@8e6656b15d9a:/# chmod u+rw-x mysql-docker.cnf
root@8e6656b15d9a:/# chmod g+r-wx mysql-docker.cnf
root@8e6656b15d9a:/# chmod o+r-wx mysql-docker.cnf
权限现在应该是正确的。验证:
root@8e6656b15d9a:/# ls -l
total 4
-rw-r--r-- 1 root root 380 Oct 20 11:40 mysql-docker.cnf
重新启动 mysql-docker 用于新设置要生效的容器:
E:\>docker stop mysql-docker
E:\>docker start mysql-docker
请注意,对于上述两个(2)命令,必须启动 mysql-docker ,没有 - rm flag,也就是说:
docker run -d -it --name mysql-docker -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pcb.2176310315865259 --mount type=bind,source=//e/mysql-config,target=/etc/mysql/conf.d --mount source=mysqlvol,target=/var/lib/mysql mysql:8.0.30-debian
还请注意,上述DOCKER RUN 命令中的以下选项: - mount source = mysqlvol,target =/var/lib/mysql 。 我们将稍后再回到此选项。
使用客户端工具,例如 mysql workbench 来验证新设置是否有效:
show variables like 'general_log';
show variables like 'slow_query_log';
show variables like 'log_queries_not_using_indexes';
上面的命令应每个命令上的。同样,以下应分别返回我们在配置文件中设置的相应值:
show variables like 'general_log_file';
show variables like 'slow_query_log_file';
show variables like 'log_error';
â€ï /var/lib/mysql/error.err 是?
在Python: Docker volumes -- where is my SQLite database file?中,我已经讨论了 docker卷的位置或数据文件在 Windows 10 Pro 主机上:从本质上讲,由于我的 docker桌面的安装使用基于Linux(WSL 2)引擎的Windows子系统,我可以复制并粘贴此目录:
\\wsl$\docker-desktop-data\version-pack-data\community\docker
to Windows File Explorer ,它应该转到顶级 docker桌面数据目录; mysql-docker 的文件在:
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\mysqlvol\_data
我们应该找到我们的日志文件:
为什么 \ wsl $ \ docker-desktop-data \ version-pack-data \ community \ docker \ docker \ volumes \ mysqlvol ??
回忆 docker run 选项前面提到的 - mount source = mysqlvol,target =/var/lib/mysql/mysql ? source = mysqlvol 是主机卷或容器的数据文件的位置。
记录所有查询都可以减慢服务器的速度,并且日志文件可以变得很大,只能在开发过程中使用,当然不得在生产中使用。另外,可以在飞行中设置和重置这些选项,而无需使用配置文件或服务器重新启动。例如,通过 mysql workbench :
SET GLOBAL general_log = 'OFF';
SET GLOBAL general_log = 'ON';
我已经尝试过了,它可以工作:我可以关闭 eneral_log ,然后删除日志文件,再次打开 general_log ,并创建一个新的日志文件。
我希望您能发现这种有用和有用。感谢您的阅读和保持安全。