Skip to content

使用 docker 迁移 mysql 数据库

2023-8-17

背景

不知道怎么回事,服务器上的mysql数据库突然挂了,怎么都起不来,重新安装mysql也起不来。mysql挂了还把gogs也带死了。正好最近在学docker,早就准备把服务器上的mysql删掉,改用docker部署,不如趁着这次机会直接把这事搞了。

目标

目前的状态是,systemctl start mysqld 启动失败,看日志什么的看不出结果,也不想继续这个路子弄了。/var/lib/mysql 路径下的数据文件还完好。准备把服务器上的 mysql5.6 直接删掉,使用docker重新部署一个mysql的服务,再把旧的数据文件导进去。这样mysql服务就复活了,还不会影响其它线上服务。

实施

  1. 安装dockerdocker-compose 略,上网搜的结果。

  2. 在服务器上创建目录 /data/www/mysql-docker,创建 docker-compose.yml 文件。

sh
# cd /data/www
# mkdir mysql-docker
# touch docker-compose.yml
  1. 写入 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"
  1. 创建数据目录
sh
# mkdir data
  1. 把原来的 mysql 数据文件复制过来。

实际上是可以直接把原来的数据目录直接挂到 docker 上的,但是我问 chatgpt,chatgpt 说宿主机内的文件会被覆盖。

1

但是实际操作下来发现并不会,这个不得而知,总之把数据文件复制一份出来总归是稳妥的。

sh
# cd data
# cp -r /var/lib/mysql/* ./
  1. 修改数据文件权限 由于之前的数据文件权限是给 mysql 用户的,现在需要 docker 来访问。懒得研究应该怎么改,所以直接 777。
sh
# cd ..
# chmod -R 777 ./data
  1. 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。有机会的话回头把踩的坑也记下来。

© thebestxt.cc
辽ICP备16009524号-8
本站所有文章版权所有,转载请注明出处