容器中MySQL数据持久化需挂载/var/lib/mysql目录,推荐用Docker Volume(如mysql-data卷),开发可用Bind Mount但需手动赋权,还需挂载配置文件和初始化脚本,并补充备份与高可用策略。
在容器环境中运行 MySQL 时,数据默认随容器销毁而丢失。要实现可靠的数据持久化,核心是将 MySQL 的数据目录(/var/lib/mysql)从容器内部映射到宿主机或外部存储,同时确保权限、初始化逻辑和备份机制到位。
Docker Volume 是最推荐的持久化方式,由 Docker 管理,具备跨容器复用、备份迁移和权限隔离优势。
docker volume create mysql-data
docker run -d --name mysql-db -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0
docker volume inspect mysql-data 查看实际存储路径(通常在 /var/lib/docker/volumes/...)将宿主机指定目录直接映射进容器,便于快速查看、编辑或共享配置文件,但需注意权限与路径一致性。
docker run -d --name mysql-dev -v /home/user/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 mysql:8.0
mkdir -p /home/user/mysql-data && chown -R 999:999 /home/user/mysql-data(MySQL 容器内默认以用户 ID 999 运行)仅挂载数据目
录不够,还需确保 MySQL 配置(如字符集、日志策略)和初始数据库结构可复现。
-v /path/to/my.cnf:/etc/mysql/conf.d/custom.cnf 挂载自定义配置.sql 或 .sh 文件放入 /docker-entrypoint-initdb.d/ 目录(通过卷或构建镜像),容器首次启动且检测到空数据目录时自动执行mysqldump),再重建卷+导入,避免配置与数据状态错配持久化解决的是“不丢”,但不等于“高可用”或“可恢复”。真实场景中需叠加其他手段:
mysqldump 或 mysqlpump 导出,并上传至对象存储(如 S3、MinIO)或远程服务器PersistentVolume + PersistentVolumeClaim,并配置 storageClassName 对接 NFS、Ceph 或云盘