必须挂载/var/lib/mysql到宿主机绝对路径,因MySQL 8.0所有数据(系统库、redo log、数据字典等)均写入该目录,不挂载则数据存于临时文件系统,容器删除后彻底丢失;挂载是唯一不可妥协的前提。
必须挂载 /var/lib/mysql 到宿主机绝对路径,否则容器一删数据全丢——这是唯一不可妥协的前提,其他所有配置都建立在此之上。
MySQL 8.0 最新镜像把所有数据(系统库、表空间、redo log、数据字典)全写在 /var/lib/mysql 下。不挂载,就等于存在容器临时文件系统里,docker rm 后彻底消失。Dockerfile 中的 VOLUME /var/lib/mysql 只是声明,不自动绑定宿主机;必须显式用 -v 挂载才生效。
/etc/mysql 或空父目录 /data)会导致启动失败,日志里常见 Can't open the mysql.plugin table 或卡在 Initializing database
./mysql)会被 Docker 忽略或报错,必须用绝对路径mysql-data:/var/lib/mysql)虽安全,但无法直接 ls 或 rsync 备份,生产环境多数人倾向可控性更强的宿主机目录MySQL 8.0 容器内默认以 UID 999 用户(mysql)运行,不是 root,也不是你当前 shell 用户。宿主机目录若由 root 创建且未改属主,容器会因无写权限卡死。
sudo mkdir -p /data/mysql8
sudo chown -R 999:999 /data/mysql8(不能只 chmod 777,SELinux 或某些发行版会拒绝)ib_logfile0)会导致 MySQL 跳过初始化,MYSQL_ROOT_PASSWORD 等环境变量全部失效/data),里面若有其他文件会干扰初始化逻辑这个环境变量只在首次初始化数据库时起作用。如果挂载目录非空,MySQL 直接加载现有数据,完全忽略所有 MYSQL_* 变量。
app_db 没自动建、日志出现 mysqld: Can't open the mysql.plugin table
ls /var/lib/mysql,如果已存在 mysql/、sys/、ibdata1,说明不是首次初始化sudo rm -rf /data/mysql8 && sudo mkdir -p /data/mysql8 && sudo chown -R 999:999 /data/mysql8,或者换新路径重新来MYSQL_DATABASE(建库)、MYSQL_USER+MYSQL_PASSWORD(建用户并授权),同样只对首次初始化生效MySQL 8.0 启动时按顺序读取:/etc/mysql/my.cnf → /etc/mysql/conf.d/*.cnf → /etc/mysql/mysql.conf.d/*.cnf。挂错位置或内容不合规,配置就静默失效。
conf.d 目录,例如 -v /host/conf.d:/etc/mysql/conf.d,然后在宿主机放 /host/conf.d/01-charset.cnf,内容只含 [mysqld] 及其下几行关键参数default_authentication_plugin=mysql_native_password(否则 Navicat、旧 JDBC 连不上)、default-time_zone='+8:00'(避免日志时间错乱)innodb_file_per_table=1),8.0 已默认开启,写了反而可能报错.cnf,内容必须有 [mysqld] 段,否则被跳过最易被忽略的是「首次初始化」这个隐式开关:它不靠命令触发,而由挂载目录是否为空决定。哪怕只是多了一个隐藏文件、一个日志碎片,MySQL 就会跳过初始化流程,所有预设逻辑全部失效——这通常不是异常,是设计使然。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)