Docker 中 MySQL 迁移策略(单节点)

目录

    • [一、 简介](#一、 简介)
    • 二、操作流程
      • [2.1 进入mysql容器](#2.1 进入mysql容器)
      • [2.2 导出 MySQL 数据](#2.2 导出 MySQL 数据)
      • [2.3. 将导出的文件复制到宿主机](#2.3. 将导出的文件复制到宿主机)
      • [2.4 创建 Docker Compose 配置](#2.4 创建 Docker Compose 配置)
      • [2.5 启动新的 Docker 容器](#2.5 启动新的 Docker 容器)
      • [2.6 导入数据到新的容器](#2.6 导入数据到新的容器)
      • [2.7 验证数据](#2.7 验证数据)
      • [2.8 删除旧的容器(删除操作需慎重)](#2.8 删除旧的容器(删除操作需慎重))
    • 三、推荐配置
    • 四、写在后面

一、 简介

本人发现自己Docker中Mysql的时区不对,导致每次连接数据库都需要设置时区,所以考虑进行数据库迁移,重新搭建一个正确时间的数据库。

二、操作流程

2.1 进入mysql容器

要进入运行中的 MySQL 容器,可以使用以下命令:

bash 复制代码
docker exec -it mysql-old /bin/bash

这里的 mysql-old 是你原来容器的名

2.2 导出 MySQL 数据

在容器内部,使用 mysqldump 工具导出所有数据库:

bash 复制代码
mysqldump -u root -p --all-databases > /tmp/alldb.sql

2.3. 将导出的文件复制到宿主机

/tmp/alldb.sql 文件从容器复制到宿主机的指定路径:

复制代码
docker cp mysql-old:/tmp/alldb.sql Docker/mysql

2.4 创建 Docker Compose 配置

编写 docker-compose.yml 文件,配置新的 MySQL 服务:

yml 复制代码
services:
  mysql:
    image: mysql:8.4.0
    container_name: mysql-docker # 设置容器名字
    ports: # 添加端口映射
      - "3306:3306"
    volumes:
      - /Users/siyuan/Docker/mysql/data:/var/lib/mysql  # 数据卷
      - /Users/siyuan/Docker/mysql/conf:/etc/mysql/conf.d  # 配置卷
      - /Users/siyuan/Docker/mysql/logs:/var/log/mysql  # 日志卷
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai   # 设置时区,例如亚洲/上海
    restart: always
    deploy:
      resources:
        limits: # 设置合理的资源限制
          cpus: '0.5' # 限制容器使用半核 CPU 资源
          memory: 512M # 限制容器使用最多 512MB 内存

2.5 启动新的 Docker 容器

docker-compose.yml 所在路径下使用 docker-compose up -d 命令启动新的容器。

2.6 导入数据到新的容器

将宿主机上的 SQL 文件导入到新的 MySQL 容器:

bash 复制代码
docker cp Docker/mysql/alldb.sql mysql-docker:/tmp/
docker exec -i mysql-docker mysql -u root -p'root' < /tmp/alldb.sql

2.7 验证数据

登录到新的 MySQL 容器,检查数据是否成功导入:

复制代码
docker exec -it mysql-docker mysql -u root -p
SHOW DATABASES;

连接时如果出现:

bash 复制代码
❯ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

请在连接时使用:

复制代码
mysql -u root -p -h 127.0.0.1

2.8 删除旧的容器(删除操作需慎重)

复制代码
docker stop mysql-old
docker rm mysql-old

三、推荐配置

  • 使用具体版本号的 MySQL 镜像,避免使用 latest 标签。
  • 设置合理的资源限制,避免 MySQL 服务消耗过多宿主机资源。
  • 考虑使用 Docker secrets 或环境变量文件来管理密码。
  • 确保 MySQL 用户权限设置正确,允许从宿主机 IP 地址连接。
  • 使用 Docker Compose 的 networks 配置来管理容器网络。
  • 实施定期备份策略,保障数据安全。

四、写在后面

欢迎关注,会经常记录一些工作中遇到的问题。

欢迎随时留言讨论,与君共勉,知无不答!

相关推荐
Lucky GGBond11 分钟前
MySQL 报错解析:SQLSyntaxErrorException caused by extra comma before FROM
数据库·mysql
时迁24732 分钟前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
Java水解32 分钟前
Mysql之存储过程
后端·mysql
漫步向前39 分钟前
mysql主备延迟
mysql
GarfieldFine1 小时前
MySQL索引使用一定有效吗?如何排查索引效果?
数据库·mysql
cypking1 小时前
mysql 安装
数据库·mysql·adb
南客先生3 小时前
MySQL索引优化、SQL分析与运行原理 - Java架构师面试实战
mysql·mvc·锁机制·sql分析·事务隔离级别·索引优化
husterlichf3 小时前
MYSQL 常用字符串函数 和 时间函数详解
数据库·sql·mysql
诡异森林。4 小时前
Docker--Docker网络原理
网络·docker·容器
ALex_zry4 小时前
Docker Macvlan网络配置实战:解决“network already exists“错误
网络·docker·php