- 拉取镜像。
docker pull mysql:5.7
- 准备这样一个目录
我的目录
/home/shenyi
-----mysql
---data
---conf
--my.cnf (配置文件放在这)
---mylog
my.cnf
配置文件
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
datadir=/data
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
log-error=/mylog/error.log
slow_query_log = on //开启慢查询
long_query_time=2 //定义2秒以上为慢查询
slow-query-log-file =/mylog/slow.log //慢查询日志路径
- 运行docker容器
//实例化docker容器
docker run --name mysql -d -p 3306:3306 -v /home/gin/mysql/data:/data -v /home/gin/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/gin/mysql/mylog:/mylog -e MYSQL_ROOT_PASSWORD=admin123456 mysql:5.7
这里docker容器启动失败,logs一下查看详情
[gin@gin ~]$ sudo docker logs e3a91d33b7e1
2020-08-10 21:28:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-08-10 21:28:22+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-08-10 21:28:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-08-10T21:28:22.402914Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicis_for_timestamp server option (see documentation for more details).
2020-08-10T21:28:22.408735Z 0 [Note] mysqld (mysqld 5.7.31-log) starting as process 1 ...
2020-08-10T21:28:22.411244Z 0 [ERROR] Could not open file '/mylog/error.log' for error logging: Permission denied
2020-08-10T21:28:22.411289Z 0 [ERROR] Aborting
2020-08-10T21:28:22.411317Z 0 [Note] Binlog end
2020-08-10T21:28:22.411512Z 0 [Note] mysqld: Shutdown complete
因为容器默认使用的是mysql用户。 因此我们需要把映射的文件夹修改owner:
//1. 首先进入容器
docker exec -it <容器ID> /bin/bas
//2. 查看mysql用户权限
cat /etc/passwd | grep mysql
//结果,mysql权限是999
mysql:x:999:999::/home/mysql:/bin/sh
//3. 快捷键退出(Ctrl+P+Q)
//4. 修改文件权限
chown -R 999 mylog
//5. 重启docker容器
docker restart <容器ID>
- 测试
//执行慢查询SQL语句
select sleep(3);
//查看日志
cat mylog/slow.log
结果
mysqld, Version: 5.7.31-log (MySQL Community Server (GPL)). started with:
Tcp port: 0 Unix socket: (null)
Time Id Command Argument
# Time: 2020-08-10T21:41:57.002770Z
# User@Host: root[root] @ [192.168.56.1] Id: 7
# Query_time: 3.013921 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use swoft2;
SET timestamp=1597095717;
select sleep(3);