0%
使用 docker 迁移 mysql 数据库
2023-8-17
背景
不知道怎么回事,服务器上的mysql数据库突然挂了,怎么都起不来,重新安装mysql也起不来。mysql挂了还把gogs也带死了。正好最近在学docker,早就准备把服务器上的mysql删掉,改用docker部署,不如趁着这次机会直接把这事搞了。
目标
目前的状态是,systemctl start mysqld
启动失败,看日志什么的看不出结果,也不想继续这个路子弄了。/var/lib/mysql
路径下的数据文件还完好。准备把服务器上的 mysql5.6 直接删掉,使用docker重新部署一个mysql的服务,再把旧的数据文件导进去。这样mysql服务就复活了,还不会影响其它线上服务。
实施
安装
docker
和docker-compose
略,上网搜的结果。在服务器上创建目录
/data/www/mysql-docker
,创建docker-compose.yml
文件。
sh
# cd /data/www
# mkdir mysql-docker
# touch docker-compose.yml
- 写入 docker-compose 配置
sh
# vim docker-compose.yml
i
yml
version: '3'
services:
mysql:
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- /data/www/mysql-docker/data/:/var/lib/mysql
ports:
- "3306:3306"
- 创建数据目录
sh
# mkdir data
- 把原来的 mysql 数据文件复制过来。
实际上是可以直接把原来的数据目录直接挂到 docker 上的,但是我问 chatgpt,chatgpt 说宿主机内的文件会被覆盖。
但是实际操作下来发现并不会,这个不得而知,总之把数据文件复制一份出来总归是稳妥的。
sh
# cd data
# cp -r /var/lib/mysql/* ./
- 修改数据文件权限 由于之前的数据文件权限是给 mysql 用户的,现在需要 docker 来访问。懒得研究应该怎么改,所以直接 777。
sh
# cd ..
# chmod -R 777 ./data
- mysql,启动!
sh
# docker-compose up -d
[+] Running 2/2
✔ Network mysql-docker_default Created 0.0s
✔ Container mysql-docker-mysql-1 Started
查看容器列表,发现已经启动。
sh
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc404dca2897 mysql:5.6 "docker-entrypoint..." 41 minutes ago Up 41 minutes 0.0.0.0:3306->3306/tcp mysql-docker-mysql-1
使用 navicat 连接,连接成功。查看数据表,数据都在。完活。
写起来如此顺畅,实际这一套鼓捣下来,用了昨天一宿加今天半宿。昨天天亮才睡 TAT。有机会的话回头把踩的坑也记下来。