MySQL版本:8.0
问题复现:
需求:
在Docker容器中启动MySQL,并修改其MySQL的配置文件,使得它能够检测慢查询。
- Docker中启动MySQL
#mysql-data卷,存储sql数据
#mysql-conf卷,映射配置文件
docker run --name <container-name> -e MYSQL_ROOT_PASSWORD=<your-password> -v mysql-data:/var/lib/mysql -v mysql-conf:/etc -d mysql:<version>
- 修改配置项
卷映射默认存放目录:/var/lib/docker/volumes/<volume-name>
#开启慢查询
slow_query_log = on
#记录慢查询日志
slow-query-log-file = /var/lib/mysql/log/slow-query.log
#指定慢查询的阈值:2分钟
long_query_time = 2
- 登录MySQL客户端
#8d5是MySQL所在容器ID缩写
docker exec -it 8d5 mysql -u root -p
报错!!!
解决方案:
修改my.cnf文件权限
#不安全且不能解决问题
chmod -R 777 my.cnf
出现了新的问题:
mysql: [Warning] World-writable config file '/etc/my.cnf' is ignored.当然,这只是个警告。
- 重新启动容器
- 登录MySQL客户端【成功】
- 查看配置是否生效
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
可以看到都没有生效,所以我又将权限修改了回去。
chmod -R 644 my.cnf
#查看权限
ls -l my.cnf
#输出:-rw-r--r-- 1 root root 1496 Sep 28 15:14 my.cnf
修改变量作用域
参考了下述帖子:
linux - Unknown variable 'slow_query_log=1' - Server Fault
#开启慢查询
slow_query_log = on
#记录慢查询日志
slow-query-log-file = /var/lib/mysql/log/slow-query.log
#指定慢查询的阈值:2分钟
long_query_time = 2
- 重新启动容器
docker restart 8d5
- 登录MySQL客户端
#8d5是MySQL所在容器ID缩写
docker exec -it 8d5 mysql -u root -p
- 查看配置是否生效
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
完美解决。