相关信息
本文内容包含AI生成
备份 Docker 中的 MySQL 数据库可以通过多种方式实现,下面是几种常见方法,取决于你是要备份数据库数据文件,还是通过 mysqldump
导出 SQL 文件。
mysqldump
从容器中导出 SQL 文件(推荐)适合逻辑备份,备份成 .sql
文件,便于迁移、恢复。
假设容器名为 mysql_container
,MySQL 用户为 root
,密码为 password
,数据库为 mydb
。
bashdocker exec mysql_container \
mysqldump -u root -p'mypassword' mydb > mydb_backup.sql
注意:
-p
与密码之间 不能有空格,否则会报错。
bashdocker exec mysql_container \
mysqldump -u root -p'mypassword' --all-databases > all_backup.sql
docker exec
结合宿主机的 mysqldump
(也可直接在宿主机执行)如果 MySQL 暴露了端口,也可以用宿主机的 mysqldump
命令:
bashmysqldump -h 127.0.0.1 -P 3306 -u root -p mydb > mydb_backup.sql
前提是你的容器已经通过端口映射暴露出 MySQL 的端口(如 -p 3306:3306
)。
如果你使用 volume 挂载了 MySQL 数据目录,也可以直接备份数据文件。
bash# 查看容器挂载的卷
docker inspect mysql_container | grep Mounts -A 20
# 进入卷路径,例如:
cp -r /var/lib/docker/volumes/mysql_data/_data /backup/mysql_data_backup
⚠️ 注意:这种方式是物理备份,MySQL 必须停止写入,否则数据可能不一致。
如果你将数据保存在 Volume 中,可以用 docker cp
或创建临时容器备份:
bashdocker run --rm \
-v mysql_data:/volume \
-v $(pwd):/backup \
alpine \
tar czf /backup/mysql_data.tar.gz -C /volume .
可以放入 cron
定时任务,例如每日凌晨备份:
bash#!/bin/bash
DATE=$(date +"%Y-%m-%d")
docker exec mysql_container \
mysqldump -u root -p'mypassword' mydb > /path/to/backup/mydb_$DATE.sql
添加到 crontab:
bash0 2 * * * /path/to/script/backup_mysql.sh
本文作者:zion
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!