Docker中Official mysql:8.0(即8.0.4)镜像初始化数据库耗时异常求助
解决Docker中mysql:8.0镜像初始化数据库耗时过长的问题
我之前也踩过这个坑!本地Docker环境里跑官方mysql:8.0(也就是8.0.4版本)时,初始化数据库居然要10分钟以上,看日志能发现最后一步直接卡了7分钟。大概率是系统熵池不足导致的——MySQL 8.0初始化过程中需要生成安全随机数来完成加密操作(比如生成SSL证书、初始化用户密码),如果宿主机的熵池没有足够的随机数据,就会一直阻塞等待,拖慢整个初始化流程。
给你几个实用的解决办法:
一、临时解决:启动容器时指定随机源
启动MySQL容器时,添加--random-source=/dev/urandom参数,让MySQL使用非阻塞的伪随机数生成器,避免等待:
docker run -d --name mysql8 \ -e MYSQL_ROOT_PASSWORD=your_root_password \ mysql:8.0 \ --default-authentication-plugin=mysql_native_password \ --random-source=/dev/urandom
注:
--default-authentication-plugin=mysql_native_password是为了兼容旧版客户端,如果你不需要可以去掉,但加上更稳妥。
二、宿主机层面永久解决:补充系统熵池
如果不想每次启动容器都加参数,可以在宿主机上安装rng-tools来补充熵池:
Debian/Ubuntu系统
sudo apt-get update && sudo apt-get install -y rng-tools sudo systemctl start rng-tools sudo systemctl enable rng-tools # 设置开机自启
CentOS/RHEL系统
sudo yum install -y rng-tools sudo systemctl start rngd sudo systemctl enable rngd # 设置开机自启
安装后,系统会自动补充熵池,后续再启动MySQL容器就不会出现初始化慢的问题了。
三、Docker Compose配置修改
如果用Docker Compose管理容器,在docker-compose.yml里添加command字段即可:
version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: your_root_password command: > --default-authentication-plugin=mysql_native_password --random-source=/dev/urandom ports: - "3306:3306"
你可以先试试第一种临时方案,验证是不是熵池的问题——如果启动后初始化速度秒级完成,那就实锤了。之后再根据需求选择永久解决的方式。
内容的提问来源于stack exchange,提问作者Abdullah Al Maruf - Tuhin
相关产品推荐
相关产品推荐

