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

Mysql主从构建---基于innobackupex备份,亲测可以完成_mysql

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