前言:
最近由于项目运维要求,需要对原有的MySQL数据库进行主从双备配置,之前项目的数据库一直都是单机架构,截止目前占用的存储容量也已经有1.5TB之多,所以怎么实现在不停机的前提下无缝迁移重建就成了难题。 从网上搜索了许多资料,早期习惯使用mysqldump来实现数据表的迁移重建,但当数据量来到百G规模以上时,mysqldump的备份恢复性能就十分堪忧了,动辄都是需要几十小时的时间才能完成整个流程,所以又调转方向开始寻找百G以上数据量的迁移工具,最终找到了xtrabackup。
有关Xtrabackup的简介这里就不多废话了,这里直入主题,记录一次完整的迁移重建流程,希望对各位有所帮助。
先明确一下现在的部署需求:
将原来的数据库迁移到另一台服务器,并为新数据库配置主从同步,配置为旧数据库为主库,新数据库为从库,以下表格为配置信息,如环境不同,替换命令中的变量值即可。
| 数据库信息 | 旧数据库 | 新数据库 |
|---|---|---|
| IP | 192.168.1.157 | 192.168.1.156 |
| 核心数 | 12 | 12 |
| 端口 | 3306 | 3306 |
| mysql数据路径 | /public/mysql/data | /public/mysql/data |
| mysql用户名 | root | root |
| mysql密码 | 密码 | 密码 |
| 备份(恢复)路径 | /public/mysql/dump | /mysqlslave/dump |
| 备份(恢复)日志路径 | /public/mysql/dump/logs | /mysqlslave/dump/logs |
- 两台服务器均需要安装xtrabackup,安装步骤此处略过
- 挂载mysql存储路径,用于xtrabackup记录bin_log
ln -s /public/mysql/data /var/lib/mysql
- 将存储空间更大的服务器存储通过NFS挂载到空间小的主机上,因为备份完毕恢复的时候要确保主机有足够空间存储数据库数据,在本例中将157服务器的/public/mysql/dump挂载到了156服务器的/mysqlslave/dump路径
- 备份数据,--parallel参数指定线程数,最好设置和主机的核心数一致
xtrabackup --backup --slave-info -u root -H 127.0.0.1 -P3306 -p密码 --parallel=12 --compress --socket=/public/mysql/data/mysql.sock --datadir=/public/mysql/data --target-dir /public/mysql/dump 2> /public/mysql/dump/logs/xtrabackup_backup.log &
- 解压数据,当备份时使用了--compress参数压缩数据时需要解压,可使用存储备份文件的主机就近解压,此处使用157服务器进行解压
xtrabackup --decompress --remove-original --parallel=12 --target-dir=/public/mysql/dump 2> /public/mysql/dump/logs/xtrabackup_decompress.log &
- 恢复数据需要先--prepare,此处使用156服务器进行数据操作
xtrabackup --parallel=12 --prepare --target-dir=/mysqlslave/dump 2> /mysqlslave/dump/logs/xtrabackup_restore_prepare.log &
- 这步将使用备份数据对156服务器的数据库进行构建,如156服务器之前安装过mysql数据库,则需要删除数据库中的数据再执行以下操作,此处使用156服务器进行数据操作
xtrabackup --parallel=12 --copy-back --datadir=/public/mysql/data --target-dir=/mysqlslave/dump 2> /mysqlslave/dump/logs/xtrabackup_restore.log &
- 构建完成后启动156服务器上的mysql数据库,并检查是否恢复成功,如存在异常请检查恢复日志。
- 检查无误后配置从库同步,需要先在157的主库上配置同步账号
GRANT REPLICATION SLAVE ON *.* TO 'slavecopyuser'@'192.168.1.156' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;
- 然后在156的从库上配置同步连接信息
STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO
MASTER_HOST='192.168.1.157',
MASTER_USER='slavecopyuser',
MASTER_PASSWORD='密码',
MASTER_PORT=3306;
START SLAVE;
- 配置完成后,查看从库同步状态
SHOW SLAVE STATUS;