mysql构建主从往往基于mysqldump进行备份主库再Copy到从库进行备份恢复之后启动主从,但是对于数据量大的场景就完全不适用,因为基于逻辑sql,所以导入时间久,速度很慢。
因此针对比较大的数据库建议使用innobackupex进行主库的备份,然后复制到从库构建主从
以下为我实际生产使用为案例(MYSQL 5.7):
数据库版本:5.7
数据库架构:主从同步
数据量:其中一个主库粗略统计40GB
IP:已经存在的主库:10.2.22.162 ,以下称为主库A
需要数据导入的主库:10.2.22.31,以下称为主库B
一、数据库搭建步骤略
二、在主库A、B安装innobackupex备份的客户端
1.安装依赖包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
2.安装
3.下载xbk源
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
4.下载xbk软件
yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
在步骤4可能遇到缺少libev依赖的报错:
解决:
安装:libev-4.15-1.el6.rf.x86_64.rpm
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
三、主库A物理备份
//数据库全备
innobackupex --defaults-file=/etc/my.cnf --user=root --password='xxxxx' --stream=tar /data/backup_rf/|gzip|ssh root@10.2.22.170 \ "cat - > /data/backup/im_prod/im_backup_`date +"%Y-%m-%d_%H:%M:%S"`.tar.gz"
--defaults-file:指定配置文件
--user=root:指定用户
--password='xxx' 指定密码
--stream=tar 压缩方式
ssh root@10.2.22.170 远程备份到其他数据
/data/backup_rf/im_backup_`date +"%Y-%m-%d_%H:%M:%S"`.tar.gz" 备份包名字
/data/backup_rf该路径需要提前存在
四、主库B恢复
1.解压备份
cd /tmp
tar -zxvf /tmp/im_backup_2022-11-09_00\:30\:01.tar.gz -C /tmp/restore/
2.准备阶段 recover
innobackupex --apply-log /tmp/restore
3.关闭数据库
/etc/init.d/mysqld stop
4.删除指定的目录
rm -fr /data/mysql/*
5.copy阶段
innobackupex --copy-back /tmp/restore/
6.改权限
chown -R mysql. /data/mysql
8.启动数据库
/etc/init.d/mysqld start
此时没有异常数据库应该已经启动,接下来就是构建主从
五、构建主从架构
主A和主B建立主主同步的用户:
grant replication slave on *.* to repl@'10.%.%.%' identified by '123456';
主A、B:
1.登录数据库B
mysql -uroot -p
2.purged gtid,如果报错,先reset master;
purge的信息来自于xtrabackup_binlog_info
set global gtid_purged='3618f301-78d0-11ea-aa7c-005056a6318a:1-586925444'
3.构建主从
reset slave;
reset master;
CHANGE MASTER TO
MASTER_HOST='10.2.22.162',
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.001763',
MASTER_LOG_POS= 353272893,
MASTER_CONNECT_RETRY=10;
注意:
其中MASTER_LOG_FILE和MASTER_LOG_POS来源于innobackupex备份log,
xtrabackup_binlog_info,该log记录了备份开始时主库A的binlog起点
4.启动主从
start slaves;
5,查看主从状态
show slave status\G
以上为基于物理备份构建主从的全过程。
以下为我实际生产使用为案例(MYSQL 8.0.26)
数据库版本:8.0.26
数据库架构:主从同步
数据量:其中一个主库粗略统计400GB
IP:已经存在的主库:10.2.100.36 ,以下称为主库A
需要数据导入的主库:10.1.86.184,以下称为主库B
mysql 8.0已经废弃了innobackupex,改为xtrabackup,以下介绍mysql 8.0版本如何备份并构建主从
1.安装xtrabackup
软件安装地址:
https://www.percona.com/downloads#percona-xtrabackup
rpm -ivh percona-xtrabackup-80-8.0.26-18.1.el7.x86_64.rpm
缺少libev、perl-DBD-mysql、perl-Digest-MD5安装
libev:
rpm -ivh ./libev-4.15-1.el6.rf.x86_64.rpm
perl-DBD-mysql:
yum -y install perl-DBD-mysql
perl-Digest-MD5:
yum -y install perl-Digest-MD5
2.备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password --host=127.0.0.1 --backup --target-dir=/data/backup_rf --compress --compress-threads=2 --no-server-version-check
注意:
1.--target-dir的目录必须为空
2. --compress:压缩方式
3.--compress-threads:多少线程进行压缩,依据CPU的核数设置
3.备份后打包成tar 包scp到从库
tar -cvf /data/backup.tar /data/backup_rf
scp /data/backup.tar 10.1.6.184:/tmp/
4.从库解压
tar -xvf /tmp/backup.tar -C /tmp/restore/
5.从库解压compress的数据
从库安装qpress
yum -y install qpress
解压备份
xtrabackup --decompress --parallel=4 --target-dir=/tmp/restore/data/backup
6.准备数据
删除qp相关的压缩文件,为了节省空间,不删除也可以
rm -fr /tmp/restore/data/backup/*.qp
rm -fr /tmp/restore/data/backup/etdb/*.qp
xtrabackup --prepare --target-dir=/tmp/restore/data/backup
7.从库停库删除原有数据,并复制备份数据
/etc/init.d/mysqld stop
rm -fr /data/mysql/*
mv /tmp/restore/data/backup/* /data/mysql/
chown -R mysql. /data/mysql/
/etc/init.d/mysqld start
8.构建主从
主库建立用于同步的用户:
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX';
grant replication slave on *.* to 'repl'@'%';
flush privileges;
从库:
1.登录数据库
mysql -uroot -p
2.purged gtid,如果报错,先reset master;
purge的信息来自于xtrabackup_binlog_info
set global gtid_purged='3618f301-78d0-11ea-aa7c-005056a6318a:1-586925444'
3.构建主从
reset slave;
reset master;
CHANGE MASTER TO
MASTER_HOST='10.2.100.36',
MASTER_USER='repl',
MASTER_PASSWORD='1qaz@WSX',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.001763',
MASTER_LOG_POS= 353272893,
MASTER_CONNECT_RETRY=10;
注意:
其中MASTER_LOG_FILE和MASTER_LOG_POS来源于innobackupex备份log,
xtrabackup_binlog_info,该log记录了备份开始时主库A的binlog起点
4.启动主从
start slaves;
5,查看主从状态
show slave status\G