MySQL数据迁移
参考性文档
目标主机上的数据库安装及配置不再展示,注意版本即可
原主机指的是需要迁移数据库所在主机
目标主机指的是数据库需要迁往的主机
由于数据量较大,在参考多种方式之后选择使用XtraBackup进行备份。主要步骤大概为:
- 在对应主机安装Percona XtraBackup
- 在原主机执行全量备份,并打包传输到目标主机
- 选择合适时间进行增量备份,并打包传输到目标主机
- 在目标主机整理并恢复数据
- 原主机停机,目标主机更换IP为原主机IP
安装Percona XtraBackup
官网提供了几种安装方式,建议使用源安装,好处是不用安装令人头疼的依赖问题。根据系统以及MySQL版本选择对应的软件版本。
请注意8.x版本对应MySQL8.x,2.x对应的为MySQL5.x,务必注意。
这里是CentOS7.6、MySQL5.7版本对应的安装指南:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html
sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum repolist && yum install -y percona-xtrabackup-24.x86_64
在原主机和目标主机分别安装,完成之后进行备份。
备份并打包传输到目标主机
全量备份
新版本已经不再使用innobackupex进行备份,全量备份可以参考官方文档:https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/full_backup.html
虽然xtrabackup是热备,但依然建议尽可能在使用人数少的情况下操作。
如果有大量事务操作,备份最后阶段可能会长时间阻塞,资源消耗也会飙升
xtrabackup --backup --target-dir=/mnt/bak/ --user=root --password=123456
--backup
表示备份
--target-dir
表示备份路径
--user
备份所使用的用户(MySQL的用户)
--password
对应的MySQL用户的密码
备份速度根据数据量和数据库活跃程度有较大差别,出现下面的信息就表示没问题了:
...
MySQL binlog position: filename 'mysql-bin.000042', position '50070078'
210322 19:10:12 [00] Writing /mnt/bak/backup-my.cnf
210322 19:10:12 [00] ...done
210322 19:10:12 [00] Writing /mnt/bak/xtrabackup_info
210322 19:10:12 [00] ...done
xtrabackup: Transaction log of lsn (353906050821) to (353912743968) was copied.
210322 19:10:12 completed OK!
之后的打包和传输就比较简单了。(免密登录和相关解析自行配置)
cd /mnt/
tar cvfz bak.tar.gz bak
scp bak.tar.gz root@nt:/mnt
增量备份
官网同样有对应示例:https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html
xtrabackup基于一个叫lsn的序列号记录位置,可以在备份目录下的xtrabackup_checkpoints中查看,比如:
[root@localhost mnt]# cat bak/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 353912743949
last_lsn = 353912743968
compact = 0
recover_binlog_info = 0
flushed_lsn = 353906061663
执行下面的命令基于第一次全量备份进行第一次增量备份:
xtrabackup --backup --user=root --password=123456 --target-dir=/mnt/bakinc1 --incremental-basedir=/mnt/bak
和全量备份类似,增加了一个--incremental-basedir
用来指定基于那个备份进行增量。出现下面的信息即表示成功:
...
210322 20:36:24 All tables unlocked
210322 20:36:24 [00] Copying ib_buffer_pool to /mnt/bakinc1/ib_buffer_pool
210322 20:36:24 [00] ...done
210322 20:36:24 Backup created in directory '/mnt/bakinc1/'
MySQL binlog position: filename 'mysql-bin.000042', position '57104262'
210322 20:36:24 [00] Writing /mnt/bakinc1/backup-my.cnf
210322 20:36:24 [00] ...done
210322 20:36:24 [00] Writing /mnt/bakinc1/xtrabackup_info
210322 20:36:24 [00] ...done
xtrabackup: Transaction log of lsn (353917484598) to (353917505331) was copied.
210322 20:36:24 completed OK!
然后,同样的,打包传输:
cd /mnt/
tar cvfz bakinc1.tar.gz bakinc1
scp bakinc1.tar.gz root@nt:/mnt
根据实际情况判断是否需要更多增量备份,如果不需要,即可以关闭数据库开始恢复工作,关闭数据库的原因在于降低新数据的写入可能,以尽量减少数据不一致的情况发生。如果需要更快速的切换时间,可以在恢复数据库之后做主从。通过主从切换机制来降低切换时间。
整理并还原数据
整理备份数据
登录到目标主机,将传输过来的数据解压:
cd /mnt
tar -ixvf bak.tar.gz
tar -ixvf bakinc1.tar.gz
然后预恢复全量备份
xtrabackup --prepare --apply-log-only --target-dir=/mnt/bak
--prepare
:表示还原,即恢复
--apply-log-only
:表示不回滚事务,因为后面有基于全备的增量备份,所以不需要回滚,如果没有则去掉该参数
下面的显示则表示预恢复成功
...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 353912748002
InnoDB: Number of pools: 1
210322 20:26:04 completed OK!
将第一次增备加载至全备中
xtrabackup --prepare --apply-log-only --target-dir=/mnt/bak --incremental-dir=/mnt/bakinc1
成功之后同样会输出completed OK!
(如果这是恢复前最后一次备份,请去掉--apply-log-only
选项。)
恢复数据
首先在目标主机停掉MySQL进程
然后执行下面的命令恢复:
xtrabackup --copy-back --target-dir=/mnt/bak --datadir=/var/lib/mysql
chown -R mysql.mysql /var/lib/mysql
systemctl start mysqld
--datadir
指的是数据库目录,可以在/etc/my.cnf
或其他配置文件中查看
--target-dir
表示备份数据所在目录,指定为全备目录
启动成功之后就可以确认数据是否一致。
额外操作:
由于需要将原主机IP地址更换到目标主机上,所以还需要将原主机下线,然后在目标主机网卡配置中配置静态地址,路径一般为/etc/sysconfig/network-script/ifcfg-ensxx
,具体配置参考:
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens192"
UUID="99ffdec6-0313-404b-9937-2d9cd3976f2e"
DEVICE="ens192"
ONBOOT="yes"
## 需要添加的静态配置信息
IPADDR=192.168.4.103
PREFIX=23
GATEWAY=192.168.5.254
DNS1=192.168.5.254
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!