linux下docker启动mysql8不成功解决方法
在输入docker运行容器命令后,通常应该启动了mysql
但是这里输入 docker ps
, 并没有容器在运行,输入docker ps -a
,可以看到在status这一栏,端口并未映射
输入docker logs mysql
显示
原因
出现这个问题的原因主要与MySQL 8在容器化环境中的一些默认安全设置有关。具体来说,MySQL 8要求一个专用的目录来处理安全文件操作,并且这个目录必须存在并且可访问。以下是导致问题的一些详细原因:
默认的secure-file-priv目录:
MySQL 8引入了secure-file-priv参数,用于指定一个目录,该目录只能用于导入和导出操作,以增强安全性。如果指定的目录不存在或者MySQL没有权限访问该目录,MySQL服务器就会拒绝启动。
容器化环境中的文件系统:
在Docker容器中,文件系统是临时的,并且在容器每次启动时重新创建。如果没有显式地创建或挂载所需的目录,MySQL就无法找到它们。
挂载点问题:
在运行容器时,你使用了多个挂载点 (/var/log/mysql, /var/lib/mysql, /etc/mysql)
,但没有挂载 /var/lib/mysql-files
,导致MySQL
尝试访问一个不存在的目录。
为了解决这个问题,需要确保在启动容器时所有必需的目录都已经创建,并且挂载到适当的位置。
解决方法
docker run -p 3307:3306 --name mysql8 \
-v /usr/local/mydata/mysql/log:/var/log/mysql \
-v /usr/local/mydata/mysql/data:/var/lib/mysql \
-v /usr/local/mydata/mysql/conf:/etc/mysql \
-v /usr/local/mydata/mysql/files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=jackhong \
-d mysql:8.0