目錄
- 一、 簡介
- 二、操作流程
- 2.1 進入mysql容器
- 2.2 導出 MySQL 數據
- 2.3. 將導出的文件復制到宿主機
- 2.4 創建 Docker Compose 配置
- 2.5 啟動新的 Docker 容器
- 2.6 導入數據到新的容器
- 2.7 驗證數據
- 2.8 刪除舊的容器(刪除操作需慎重)
- 三、推薦配置
- 四、寫在后面
一、 簡介
本人發現自己Docker中Mysql的時區不對,導致每次連接數據庫都需要設置時區,所以考慮進行數據庫遷移,重新搭建一個正確時間的數據庫。
二、操作流程
2.1 進入mysql容器
要進入運行中的 MySQL 容器,可以使用以下命令:
docker exec -it mysql-old /bin/bash
這里的 mysql-old 是你原來容器的名
2.2 導出 MySQL 數據
在容器內部,使用 mysqldump
工具導出所有數據庫:
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 服務:
services:mysql:image: mysql:8.4.0container_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: rootTZ: Asia/Shanghai # 設置時區,例如亞洲/上海restart: alwaysdeploy:resources:limits: # 設置合理的資源限制cpus: '0.5' # 限制容器使用半核 CPU 資源memory: 512M # 限制容器使用最多 512MB 內存
2.5 啟動新的 Docker 容器
在 docker-compose.yml
所在路徑下使用 docker-compose up -d
命令啟動新的容器。
2.6 導入數據到新的容器
將宿主機上的 SQL 文件導入到新的 MySQL 容器:
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;
連接時如果出現:
? 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
配置來管理容器網絡。 - 實施定期備份策略,保障數據安全。
四、寫在后面
歡迎關注,會經常記錄一些工作中遇到的問題。
歡迎隨時留言討論,與君共勉,知無不答!