0
点赞
收藏
分享

微信扫一扫

Docker迁移Mysql

香小蕉 2021-12-29 阅读 70

这几天遇到一个数据迁移的需求,要把老服务器的数据迁移到新的服务器上去,因为Mysql是放在Docker里面的,所以只需要迁移配置文件和数据卷即可,但是这过程中并不是一帆风顺的,特此记录一下。

从旧的服务器上查看Mysql容器的信息。

首先使用docker ps来查看正在运行的容器,如果你的容器尚未运行,那么执行这条命令docker ps -a

使用docker inspect ContainName查看Mysql容器的信息



Mounts里面有数据卷的信息,它存放着这个容器的数据,所以我们前往这些路径,把文件发送到新的服务器即可。
发送文件可以用scp local_file remote_username@remote_ip:remote_folder进行发送,以下是示例:

 scp ibdata1 root@ip:/data/mysql-data

将配置文件和数据迁移过来后,还需要迁移一个关键的文件,就是mysql安装目录data里的 ibdata1
ibdata用来储存文件的数据,而库名的文件夹里面的那些表文件只是结构而已,由于新版的mysql默认为innodb,所以ibdata1文件默认就存在了,少了这个文件有的数据表就会出错。
准备完毕后,我们在新的服务器把mysql拉取下来.

docker pull mysql:5.7

将旧服务器的文件放到对应的位置,然后执行以下指令进行映射端口,数据卷。

docker run -p 3306:3306 --name mysql -v $PWD/config:/etc/mysql/conf.d -v $PWD/logs:/logs -v /data/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

举例说明,-v /data/mysql-data:/var/lib/mysql的意思是,容器里的mysql目录的var/lib/mysql将使用宿主机的 /data/mysql-data ;-e则设定了数据库的连接密码;-d 表示该容器将在后台运行
执行了上面的操作后,我们还需要开启mysql的远程访问,让外部程序可以连接mysql进行操作。

  • sudo docker exec -it mysql bash
  • mysql -uroot -p123
  • grant all privileges on . to root@'%' identified by "password";

CHECK TABLE失败如何处理

Insert Buffer是一颗B+树。它是全局唯一的(4.1版本后),负责对所有的表的辅助索引进行Insert Buffer。它存在共享表空间中,默认在ibdata1中。因此,试图通过独立表空间ibd文件恢复表中数据时,往往会导致CHECK TABLE失败。这是因为表的辅助索引中的数据可能还在Insert Buffer中,也就是共享表空间中,所以通过ibd文件进行恢复后,还需要进行REPAIR TABLE操作来重建表上所有的辅助索引。

举报

相关推荐

0 条评论