目录
-
- [一、 简介](#一、 简介)
- 二、操作流程
-
- [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
配置来管理容器网络。 - 实施定期备份策略,保障数据安全。
四、写在后面
欢迎关注,会经常记录一些工作中遇到的问题。
欢迎随时留言讨论,与君共勉,知无不答!