Docker 更换 MySQL 镜像:备份、迁移与恢复数据的详细流程

在更换 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 数据卷

如果直接备份了数据卷,可以通过以下步骤恢复:

  1. 解压备份文件

    bash 复制代码
    tar xvf mysql_data_backup.tar
  2. 将解压后的数据复制到新的 MySQL 容器

    bash 复制代码
    docker 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;

总结

  1. 备份数据

    • 使用 mysqldump 或直接备份数据卷。
    • 将备份文件从容器复制到宿主机。
  2. 更换镜像

    • 停止并删除旧容器。
    • 更新 docker-compose.yml 文件。
    • 启动新的 MySQL 容器。
  3. 恢复数据

    • 使用 mysqldump 备份文件恢复。
    • 或恢复数据卷。
  4. 验证数据

    • 登录 MySQL,检查数据库和表是否恢复成功。

通过以上步骤,可以安全地更换 MySQL 镜像并确保数据完整性。

相关推荐
俺不要写代码1 分钟前
数据库:约束
数据库·mysql
JesseDev9 分钟前
Docker lnmp环境快速搭建开箱即用
运维·docker·容器
zhangrelay17 分钟前
Ubuntu 18.04 经典 / 有趣 / 实用 APT 软件清单
linux·笔记·学习·ubuntu
不做无法实现的梦~26 分钟前
linux怎么使用正点原子无线dap烧录器
linux·运维·postgresql
coward9132 分钟前
Linux 内核 KGDB 以及内核驱动单串口调试笔记:telnet + agent-proxy + gdb-multiarch 实践
linux·单片机·嵌入式硬件
vortex543 分钟前
Kali Linux 磁盘扩容后内部分配完整教程
linux·运维
刻BITTER1 小时前
VirtualBox 安装Armbian x86 虚拟机
linux·嵌入式硬件
WL_Aurora1 小时前
MySQL 5 卸载到 MySQL 8 安装完整指南(不踩坑版)
数据库·mysql
灰阳阳1 小时前
MySQL的基本架构
数据库·mysql·架构
想唱rap1 小时前
应用层协议与序列化
linux·运维·服务器·网络·数据结构·c++·算法