mysql5.7迁移数据库记录

主机A库太多了影响访问速度了,所以想迁移一部分库到新主机B,环境都是Centos7 都是mysql5.7

背景:
主机A库太多了影响访问速度了,所以想迁移一部分库到新主机B,环境都是Centos7 都是mysql5.7,简单记录下几个需要注意的点,怕以后忘了;
要迁移的数据库量比较大,十几个库总计约226GB容量,使用navicat客户端倒的话大概需要二十几个小时,并且不能批量倒;使用mysqldump和在navicat客户端原理一样时间久但是可以不停服务;使用innobackupex导出再还原好于前两者,但是恢复时要求datadir为空;
在网上找了找方法,最快的是直接拷贝数据库目录文件和ibdata1文件,这方法要停服务或者锁表,不然你拷贝时有数据写入会导致数据不一致;由于业务对连续性要求不高可以停一会所以选择这个方法(需要注意的是目标主机一定和源主机系统、mysql版本一定要一致);

开始:
1、A主机停服务,直接拷贝需要迁移的库到目标主机B的datadir下:

[root@c7151 mysql]# systemctl stop mysqld
[root@c7151 mysql]# scp -r xxx_716 10.10.10.153:/data/emr/mysql/

2、目标主机B也需要停服务并且需要把datadir中ib_logfile0、ib_logfile1两个文件删除;

mysql5.7迁移数据库记录

3、拷贝ibdata1文件至主机B

[root@c7151 mysql]# scp ibdata1 10.10.10.153:/data/emr/mysql/

4、B主机修改拷贝过来的库和ibdata1文件的所有者

[root@c7153 mysql]# chown -R mysql.mysql /data/emr/mysql/

5、启动服务,发现没启成功,日志中也没有报错;感觉是ibdata1文件的问题;

[root@c7153 mysql]# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

6、于是使用innobackupex备份一个库得到ibdata1文件(innobackupex备份会完整拷贝ibdata1文件);

[root@c7151 2021-06-13_16-55-10]# innobackupex --user=root --password=*** --databases='xxx_7' /data/backup/
[root@c7151 2021-06-13_16-55-10]# ls
backup-my.cnf  xxx_7  ib_buffer_pool  ibdata1  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile
[root@c7151 2021-06-13_16-55-10]# ll -h ibdata1 
-rw-r----- 1 root root 10G 6月  13 17:01 ibdata1

7、将innobackupex备份所得ibdata1文件拷贝的B主机datadir目录下覆盖原文件;

[root@c7151 2021-06-13_16-55-10]# scp ibdata1 10.10.10.153:/data/emr/mysql/

8、主机B上启动mysql服务:

mysql5.7迁移数据库记录

服务可以启动,看似一切正常,后面发现重启的时候有报错,但是服务能起来,貌似表都可以用,有待观察。。。。。

Intoep小程序

微信扫一扫,打开小程序浏览更便捷

转载作品,原作者:,文章来源:https://blog.csdn.net/weixin_41718485/article/details/117882079

发表回复

登录后才能评论