在docker环境中部署mysql服务时,数据备份是运维工作中不可或缺的部分,合理选择备份方式可以在不影响业务运行的前提下保障数据安全。本文会介绍两种常用的docker环境mysql容器备份方法,覆盖不同使用场景的需求。

方法一:使用mysqldump工具备份
这种方式是最常用的逻辑备份方式,通过mysql自带的mysqldump工具导出数据库的结构和数据,操作灵活且兼容性较好。
操作步骤
- 首先查看当前运行的mysql容器名称或ID,执行命令
docker ps找到对应的mysql容器。 - 执行备份命令,将导出的sql文件保存到宿主机指定目录,命令格式如下:
# 备份单个数据库,将容器内的mysql数据导出到宿主机的/backup目录 docker exec -it 容器名称或ID mysqldump -u用户名 -p密码 数据库名 > /宿主机路径/备份文件名.sql # 示例:备份名为mysql_container的容器中test_db数据库,导出到宿主机/root/backup目录 docker exec -it mysql_container mysqldump -uroot -p123456 test_db > /root/backup/test_db_$(date +%Y%m%d).sql
如果容器没有设置密码,可以省略-p密码参数,直接执行-u用户名即可。导出的sql文件可以直接用于后续的数据恢复,恢复时执行docker exec -i 容器名称或ID mysql -u用户名 -p密码 数据库名 < 备份文件.sql即可。
注意事项
- 执行备份命令时,如果mysql容器设置了密码,
-p和密码之间不要有空格,否则会报错。 - 建议给备份文件添加日期标识,方便后续区分不同时间的备份版本。
- 导出大数据库时可能会耗时较长,建议选择业务低峰期执行,避免影响数据库性能。
方法二:备份数据卷文件
如果启动mysql容器时挂载了数据卷,将mysql的数据目录持久化到了宿主机,那么可以直接备份宿主机上的数据卷文件,这种方式属于物理备份,速度更快。
操作步骤
- 首先查看mysql容器的挂载信息,执行命令
docker inspect 容器名称或ID | grep Mounts -A 10,找到宿主机上对应的挂载目录。 - 停止mysql容器,避免备份过程中数据写入导致文件不一致,执行
docker stop 容器名称或ID。 - 将宿主机上的挂载目录打包备份,命令如下:
# 打包数据卷目录,保存到/backup目录 tar -czvf /root/backup/mysql_data_$(date +%Y%m%d).tar.gz /宿主机数据卷路径
- 备份完成后重新启动mysql容器,执行
docker start 容器名称或ID。
注意事项
- 物理备份必须停止容器后再操作,否则可能导致备份的文件损坏,无法恢复。
- 恢复时直接将备份的tar包解压到对应的数据卷目录,再启动容器即可,恢复前建议先备份当前数据卷,避免操作失误丢失数据。
- 这种方式只适用于挂载了数据卷的mysql容器,如果没有挂载数据卷,容器删除后数据会直接丢失,也无法使用该方法备份。
两种备份方式对比
| 备份方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| mysqldump逻辑备份 | 小中型数据库,需要跨版本恢复数据 | 兼容性好,导出文件体积小,可选择性备份单个数据库 | 备份大数据库速度慢,恢复时也需要逐行执行sql,耗时较长 |
| 数据卷物理备份 | 大型数据库,同版本mysql恢复 | 备份和恢复速度都很快,操作简单 | 需要停止容器,兼容性差,只能恢复到同版本的mysql环境 |
实际使用中可以根据自身业务场景选择合适的备份方式,建议同时保留两种备份方式的备份文件,进一步提升数据安全性。如果业务对数据安全性要求较高,还可以设置定时任务,每天自动执行备份操作,避免人工遗漏。