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 小时前
软件测试接口测试从入门到精通:curl命令行工具
linux·软件测试·接口测试·命令行·curl
毒爪的小新8 小时前
Linux 环境极速部署 vLLM:从零搭建生产级大模型推理服务
linux·人工智能·ai·语言模型·vllm
鹤落晴春8 小时前
RH124问答3:从命令行管理文件
linux·运维·服务器
凡人叶枫9 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
遇见火星9 小时前
Docker Compose 完全入门:一键启动所有容器
运维·docker·容器·docker compose
Net_Walke9 小时前
【Linux系统】静态链接库与动态链接库
linux·嵌入式硬件
syc789012310 小时前
中文语境下AI编码工具实战对比:从迭代体验看日常开发选择
linux·人工智能·ubuntu
凡人叶枫10 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
vsropy12 小时前
Ubuntu网络图标消失问题/有网络问号
linux·运维·ubuntu
coderwu12 小时前
Ubuntu 24.04 终端输入 openclaw config 提示未找到命令解决办法
linux·运维·ubuntu