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 镜像并确保数据完整性。

相关推荐
leegong231118 分钟前
(RHCE)工程师学习考证
linux
~时泪~13 分钟前
流编辑器sed(stream editor)
linux·运维·服务器
未来并未来39 分钟前
深入解析MySQL事务隔离级别与锁机制在银行账户业务中的应用
数据库·mysql
小白—人工智能1 小时前
Linux —— 管理文件
linux·运维·服务器
YUNBEE_chen1 小时前
【云贝教育Linux技术文章】CentOS停止维护后如何获取redhat 8.0 yum源?详细操作指南!
linux·运维·centos
热爱生活的五柒2 小时前
vscode中插件ofExtensions的debug模式也无法查看U、p等openfoam中foam类型的变量
linux·运维·服务器
Super丶病毒2 小时前
Docker 中使用 PHP 通过 Canal 同步 Mysql 数据到 ElasticSearch
mysql·elasticsearch·docker·canal·php
sun_qqq2 小时前
Java从入门到工作4 - MySQL
java·开发语言·mysql
是阿花y3 小时前
Centos7和9安装mysql5.7和mysql8.0详细教程(超详细)
linux·运维·mysql·云计算