在更换 MySQL 镜像之前,备份数据是非常重要的步骤。以下是详细的备份和恢复流程,确保数据安全迁移。
备份 MySQL 数据
1. 备份 MySQL 数据库
方法 1:使用 mysqldump
备份
mysqldump
是 MySQL 官方提供的备份工具,可以将数据库导出为 SQL 文件。
bash
# 进入 MySQL 容器
docker exec -it mysql_container bash
# 使用 mysqldump 备份所有数据库
mysqldump -u root -p --all-databases > /var/lib/mysql/backup_all_databases.sql
# 或者备份单个数据库
mysqldump -u root -p your_database_name > /var/lib/mysql/backup_your_database.sql
-u root
:指定用户为root
。-p
:提示输入密码。--all-databases
:备份所有数据库。> /var/lib/mysql/backup_all_databases.sql
:将备份数据保存到容器内的/var/lib/mysql/
目录。
方法 2:直接备份 MySQL 数据目录
如果 MySQL 数据存储在 Docker 卷中,可以直接备份卷数据。
bash
# 备份 MySQL 数据卷
docker run --rm -v mysql_data:/var/lib/mysql -v $(pwd):/backup busybox tar cvf /backup/mysql_data_backup.tar /var/lib/mysql
mysql_data
:MySQL 数据卷名称。tar cvf /backup/mysql_data_backup.tar /var/lib/mysql
:将数据卷打包为mysql_data_backup.tar
。
2. 将备份文件从容器中复制到宿主机
如果使用 mysqldump
备份,需要将备份文件从容器中复制到宿主机。
bash
# 将备份文件从容器复制到宿主机
docker cp mysql_container:/var/lib/mysql/backup_all_databases.sql ./backup_all_databases.sql
更换 MySQL 镜像
1. 停止并删除旧的 MySQL 容器
bash
# 停止 MySQL 容器
docker stop mysql_container
# 删除 MySQL 容器
docker rm mysql_container
2. 更新 docker-compose.yml
文件
将 MySQL 镜像替换为新的镜像,例如:
yaml
version: '3.8'
services:
mysql:
restart: always
image: mysql:8.0 # 替换为新的 MySQL 镜像
container_name: mysql_container
env_file:
- ./config/mysql.env
environment:
- TZ=Asia/Shanghai # 设置时区
ports:
- "33306:3306"
volumes:
- mysql_data:/var/lib/mysql
networks:
- backend
volumes:
mysql_data:
networks:
backend:
3. 启动新的 MySQL 容器
bash
# 启动新的 MySQL 容器
docker-compose up -d
恢复 MySQL 数据
方法 1:使用 mysqldump
备份文件恢复
如果使用 mysqldump
备份,可以通过以下命令恢复数据:
bash
# 进入新的 MySQL 容器
docker exec -it mysql_container bash
# 恢复数据
mysql -u root -p < /var/lib/mysql/backup_all_databases.sql
mysql -u root -p
:登录 MySQL。< /var/lib/mysql/backup_all_databases.sql
:从备份文件恢复数据。
方法 2:恢复 MySQL 数据卷
如果直接备份了数据卷,可以通过以下步骤恢复:
-
解压备份文件:
bashtar xvf mysql_data_backup.tar
-
将解压后的数据复制到新的 MySQL 容器:
bashdocker run --rm -v mysql_data:/var/lib/mysql -v $(pwd):/backup busybox sh -c "rm -rf /var/lib/mysql/* && tar xf /backup/mysql_data_backup.tar -C /var/lib/mysql --strip-components=1"
验证数据
启动新的 MySQL 容器后,验证数据是否恢复成功:
bash
# 进入 MySQL 容器
docker exec -it mysql_container mysql -u root -p
# 查看数据库列表
SHOW DATABASES;
# 选择数据库
USE your_database_name;
# 查看表
SHOW TABLES;
总结
-
备份数据:
- 使用
mysqldump
或直接备份数据卷。 - 将备份文件从容器复制到宿主机。
- 使用
-
更换镜像:
- 停止并删除旧容器。
- 更新
docker-compose.yml
文件。 - 启动新的 MySQL 容器。
-
恢复数据:
- 使用
mysqldump
备份文件恢复。 - 或恢复数据卷。
- 使用
-
验证数据:
- 登录 MySQL,检查数据库和表是否恢复成功。
通过以上步骤,可以安全地更换 MySQL 镜像并确保数据完整性。