如何在Docker容器中将MySQL数据持久化到宿主机?

作者:袖梨 2026-09-03

必须挂载/var/lib/mysql到宿主机绝对路径,因MySQL 8.0所有数据(系统库、redo log、数据字典等)均写入该目录,不挂载则数据存于临时文件系统,容器删除后彻底丢失;挂载是唯一不可妥协的前提。

必须挂载 /var/lib/mysql 到宿主机绝对路径,否则容器一删数据全丢——这是唯一不可妥协的前提,其他所有配置都建立在此之上。

为什么 /var/lib/mysql 是唯一必须挂载的路径

MySQL 8.0 最新镜像把所有数据(系统库、表空间、redo log、数据字典)全写在 /var/lib/mysql 下。不挂载,就等于存在容器临时文件系统里,docker rm 后彻底消失。Dockerfile 中的 VOLUME /var/lib/mysql 只是声明,不自动绑定宿主机;必须显式用 -v 挂载才生效。

  1. 挂错路径(比如挂到 /etc/mysql 或空父目录 /data)会导致启动失败,日志里常见 Can't open the mysql.plugin table 或卡在 Initializing database
  2. 相对路径(如 ./mysql)会被 Docker 忽略或报错,必须用绝对路径
  3. 命名卷(mysql-data:/var/lib/mysql)虽安全,但无法直接 lsrsync 备份,生产环境多数人倾向可控性更强的宿主机目录

宿主机目录创建和权限怎么设才不踩坑

MySQL 8.0 容器内默认以 UID 999 用户(mysql)运行,不是 root,也不是你当前 shell 用户。宿主机目录若由 root 创建且未改属主,容器会因无写权限卡死。

  1. 先创建空目录:sudo mkdir -p /data/mysql8
  2. 立刻改属主:sudo chown -R 999:999 /data/mysql8(不能只 chmod 777,SELinux 或某些发行版会拒绝)
  3. 目录必须为空:已有旧数据(哪怕是残留的 ib_logfile0)会导致 MySQL 跳过初始化,MYSQL_ROOT_PASSWORD 等环境变量全部失效
  4. 不要挂载父级目录(如 /data),里面若有其他文件会干扰初始化逻辑

MYSQL_ROOT_PASSWORD 不生效?先看初始化状态

这个环境变量只在首次初始化数据库时起作用。如果挂载目录非空,MySQL 直接加载现有数据,完全忽略所有 MYSQL_* 变量。

  1. 典型表现:容器反复重启、连上去密码还是旧的、app_db 没自动建、日志出现 mysqld: Can't open the mysql.plugin table
  2. 验证方法:进容器执行 ls /var/lib/mysql,如果已存在 mysql/sys/ibdata1,说明不是首次初始化
  3. 解决办法只有两个:sudo rm -rf /data/mysql8 && sudo mkdir -p /data/mysql8 && sudo chown -R 999:999 /data/mysql8,或者换新路径重新来
  4. 其他有效环境变量仅限:MYSQL_DATABASE(建库)、MYSQL_USER+MYSQL_PASSWORD(建用户并授权),同样只对首次初始化生效

配置文件挂载到哪里才真正起作用

MySQL 8.0 启动时按顺序读取:/etc/mysql/my.cnf/etc/mysql/conf.d/*.cnf/etc/mysql/mysql.conf.d/*.cnf。挂错位置或内容不合规,配置就静默失效。

  1. 推荐做法:挂载整个 conf.d 目录,例如 -v /host/conf.d:/etc/mysql/conf.d,然后在宿主机放 /host/conf.d/01-charset.cnf,内容只含 [mysqld] 及其下几行关键参数
  2. 必须包含:default_authentication_plugin=mysql_native_password(否则 Navicat、旧 JDBC 连不上)、default-time_zone='+8:00'(避免日志时间错乱)
  3. 别用 MySQL 5.7 的参数(如 innodb_file_per_table=1),8.0 已默认开启,写了反而可能报错
  4. 文件后缀必须是 .cnf,内容必须有 [mysqld] 段,否则被跳过

最易被忽略的是「首次初始化」这个隐式开关:它不靠命令触发,而由挂载目录是否为空决定。哪怕只是多了一个隐藏文件、一个日志碎片,MySQL 就会跳过初始化流程,所有预设逻辑全部失效——这通常不是异常,是设计使然。

相关文章

精彩推荐