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

相关推荐
Liang_GaRy1 小时前
心路历程-三个了解敲开linux的大门
linux·运维·服务器
星霜笔记2 小时前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
数据知道5 小时前
容器化部署:用Docker封装机器翻译模型与服务详解
docker·容器·机器翻译
一只栖枝5 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
poemyang6 小时前
十年大厂员工终明白:MySQL性能优化的尽头,是对B+树的极致理解
mysql·pagecache·顺序i/o·局部性原理·b tree·b+ tree
wuicer7 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
天宇_任8 小时前
Mysql数据库迁移到GaussDB注意事项
数据库·mysql·gaussdb
cui__OaO9 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
小狗爱吃黄桃罐头9 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
小晶晶京京9 小时前
day34-LNMP详解
linux·运维·服务器