背景:
主机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两个文件删除;
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服务:
服务可以启动,看似一切正常,后面发现重启的时候有报错,但是服务能起来,貌似表都可以用,有待观察。。。。。