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 配置来管理容器网络。
  • 实施定期备份策略,保障数据安全。

四、写在后面

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

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

相关推荐
luoluoal2 分钟前
基于python的自然语言处理技术的话题文本分类的研究(源码+文档)
python·mysql·django·毕业设计·源码
Cosolar12 分钟前
MySQL EXPLAIN 执行计划分析:能否查看 JOIN 关联顺序
数据库·后端·mysql
计算机小手13 分钟前
Kong + Konga 网关入门实践:Docker 部署、反向代理与插件使用指南
运维·经验分享·网络协议·docker·kong·开源软件
汪碧康1 小时前
【k8s-1.34.2安装部署】六.企业级部署cilium-1.18.4网络插件
网络·云原生·容器·kubernetes·k8s·cilium·xkube
回忆是昨天里的海1 小时前
k8s暴露服务NodePort
云原生·容器·kubernetes
特级业务专家1 小时前
这下发布不需要Jenkins了
linux·git·docker
回忆是昨天里的海1 小时前
docker自定义网络-简单总结
运维·docker·容器
.生产的驴1 小时前
DockerCompoe 部署注册中心Nacos 一键部署 单机+Mysql8
java·linux·运维·spring boot·缓存·docker·doc
FIT2CLOUD飞致云1 小时前
操作教程丨通过1Panel轻松安装和管理MySQL开源数据库
linux·运维·服务器·mysql·开源·1panel
白露与泡影2 小时前
详细描述一条 SQL 语句在 MySQL 中的执行过程。
数据库·sql·mysql