docker-mysql迁移到新的挂载目录

时间:2024-05-22 16:12:52

  背景:docker运行的mysql所在的磁盘分区只有100G不到, 不太够用了,基于lvm拿新硬盘做了一个新的挂在目录大概有500G的/data1中,打算把mysql的数据迁移到新的目录下;

docker-mysql迁移到新的挂载目录

由 于是docker启动的mysql并且没有做文件映射,所以在docker外看起来几十个G的mysql数据全都放在docker lib的overlay里面,这也算使用docker不熟留下的坑;

docker-mysql迁移到新的挂载目录

下面看能否迁移到更大的空间成功,如果成功,再基于lvm,以后就可以完成此mysql服务的动态扩容了。

先看下overlay的最后修改时间:

docker-mysql迁移到新的挂载目录

还是先停止包含mysql的容器:

docker-mysql迁移到新的挂载目录

为了确定,再瞄下最后修改时间,还是上面那个时间没变。接下来复制overlay2的数据到/data1:

docker-mysql迁移到新的挂载目录

38G的数据大概复制了十几分钟;接下来更改原overlay2的名字,失败的话还能切回来:

docker-mysql迁移到新的挂载目录

然后设置软链到新的目录下:ln -s /data1/overlay2 .

docker-mysql迁移到新的挂载目录

尝试重启docker-mysql:

docker-mysql迁移到新的挂载目录

docker start essbuck1.5 发现有路径问题,这可能需要把整个docker 目录进行迁移:

docker-mysql迁移到新的挂载目录

于是复制docker目录下剩下的文件,-n跳过最大的overlay文件夹:  cp -n ./* /data1/ -r

docker-mysql迁移到新的挂载目录

剩下的文件都很下,很快就完成了;

停止dockerd 服务,因为我是直接dockerd的,所以使用kill命令

重启dockerd之后,容器重启ok,但是容器内mysql出现权限问题,找了很久之后发现是cp复制的时候没有保留之前的权限;导致容器内mysql启动失败,

于是重新cp -p 保留权限复制,然后这回打算采用mount -bound 挂载回原来目录的方法:

cp -p /var/lib/docker /data1/ -r

mount --bind /data1/docker /var/lib/docker/

dockerd &

docker ps -a

docker-mysql迁移到新的挂载目录

docker-mysql迁移到新的挂载目录

之后mysql自动启动ok,可以访问,至此就完成了无损mysql数据迁移,且根据之前的那篇linux 硬盘分区和使用lvm管理,就可以实现mysql的动态扩容了,至于其他数据库原理就一样啦。