XtraBackup2.4.4 with mysql5.7.17 主从同步

一、问题:

线上一个主库压力比较大,所以增加一个从库,但是不能重启或者停止主库的正常运行,不能锁库锁表影响业务的正常运行。所以这里想到了XtraBackup

二、XtraBackup介绍:

       Xtrabackup的优点:

1、备份完成快速、可靠

2、备份期间不间断的事务处理

3、节省磁盘空间和网络带宽

4、自动备份验证

5、提高正常运行时间由于更快的恢复时间

备份INNODB引擎的数据库不会锁库锁表,但是备份MyISAM的表还是会锁的,还支持增量备份。



三、环境说明

系统版本:CentOS Linux release 7.3.1611 (Core)

内核版本:3.10.0-514.16.1.el7.x86_64

​mysql版本:mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

xtrabackup版本:percona-xtrabackup-24-2.4.4-1.el7.x86_64 :注:较低版本的xtrabackup不支持                               centos7.3

四、xtrabackup软件安装:

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

wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

yum install -y percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm


注意:

my.cnf修改:

innodb_file_per_table = 1

binlog_format='row'

在线改:

set global innodb_file_per_table=1;

set global binlog_format='row';

错误故障:

rm -f /etc/my.cnf

否则全备时报如下错误:

InnoDB: Number of pools: 1

InnoDB: Error: log file ./ib_logfile0 is ofdifferent size 50331648 bytes

InnoDB: than specified in the .cnf file268435456 bytes!

f pools: 1


五、主库主从配置

1.主库配置/etc/my.cnf

增加server-id 和 bin-log

#vim /etc/my.cnfserver-id = 128

  log-bin = mysql-bin

2.主库配置授权账号

mysql>ALTERUSER'root'@'localhost'IDENTIFIEDBY'new_password';

mysql>alter user root@localhost identified by'Admin123!';

mysql>grant replication slave on *.* to'slave'@'10.130.21.53' identified by 'password';

mysql> flush privileges;

3.手动设置主库server-id和log-bin 参数

setglobalserver_id=128

因为这两个参数是动态参数,不用重启主库也可以生效

如果你的主库已经设置这两个参数,请忽略这一步操作

4.从库配置/etc/my.cnf

增加server-id 和 bin-log#vim /etc/my.cnfserver-id = 129

#如果需要在从库上做bin-log备份可以添加如下参数

log-bin = mysql-bin

log-slave-updates = 1

expire-logs-days=10


mysql -uroot -poldboy123 -S /data/3306/mysql.sock


六、备份主库数据

1.主库机器上创建备份目录

#mkdir -p /home/data/backup33061

2.执行全库备份

2.1.备份

innobackupex --defaults-file=/home/data/mysql33061/my.cnf --user=root  --password=admin123 --socket=/home/data/mysql33061/mysql.sock  /home/data/backup33061

>>> xtrabackup: Transaction log oflsn (549646200) to (549646758) was copied.

170724 15:19:39 completed OK!

PS:备份完成后,会在/home/data/backup33061目录下生成一个时间点的目录,这里是2017-07-24_15-19-04。你也可以加一个--no-timestamp参数不产生这个目录,直备份到/home/data/backup33061目录下

2.2.重放redo log

#下面preparing,undo撤销未提交的事务,重放redo log

innobackupex--defaults-file=/home/data/mysql33061/my.cnf--user=root--password=oldboy123--apply-log--socket=/home/data/mysql33061/mysql.sock/home/data/backup33061/2017-07-24_15-19-04

>>> InnoDB: Shutdown completed;log sequence number 549647400

170724 15:24:19 completed OK!

经过预处理或是redo log后的文件才能替换掉从库的数据目录

ps:1、ls -l/data/backup/full_data/2016-07-14_05-19-52/查看,你发现xtrabackup会把你数据库datadir下的所有数据 文件都复制过来还新增了5个xtrabackup_开头的文件,我们关心的是xtrabackup_binlog_info这个文件,因为这个文件里面记 录了你做从库需要change到主库的binlog的位置和pos点

      2、如果只想备份一个库,加“--include=navy”指定库名即可, “--databases=navy”不好使。

七、恢复数据到从库

1.停止从库

#/etc/init.d/mysqld stop

2.把主库备份文件拷贝到从库机器

#scp -rp /data/backup/full_data//2017-07-24_15-19-04  [email protected]:/mysql/data/

3.修改恢复文件权限

#chown -R mysql:mysql  /mysql/data

4.启动数据库

#/etc/init.d/mysqld start

5.确认数据是否恢复成功

登录从库,执行show databases;

6.确认同步的位置点

在从库上或者主库上都可以查看该信息,我们是在从库上查看

#cat /mysql/data/xtrabackup_binlog_info      mysql33061-bin.000001    476764

九、开始主从同步

1.配置从库 主从配置

#登录从库并执行

mysql > CHANGEMASTER TOMASTER_HOST='10.130.21.52',MASTER_USER='rep',MASTER_PASSWORD='oldboy123',MASTER_LOG_FILE='mysql33061-bin.000001', MASTER_LOG_POS=476764;

2.开始同步

mysql> start slave;

3.查看同步状态

mysql> show slave status\G

Slave_IO_Running: Yes    Slave_SQL_Running: Yes  Seconds_Behind_Master: 0



centos6.5 + mysql5.6


备份与主从同步:

注意:

若是mysql编译安装等,提示找不到socket路径,可以用--socket=/var/lib/mysql/mysql.sock参数执行socket路径

1 备份

在主库上运行备份命令,后面跟备份文件放在哪个目录下;

innobackupex --defaults-file="/etc/my.cnf" --user=root --passwor=123456 /opt/

2.scp到从库

经备份后的文件夹整体scp到从库的某个目录,如opt目录下

scp -rp 备份目录 远程用户@远程主机:/远程目录

3.预处理

内存较大的主机,可以适当加大use-memory,提高处理速度。

innobackupex --defaults-file="/etc/my.cnf" \

--user=root \

--apply-log \

--use-memory=4G /opt/2016-05-07_16-50-33/

4.关闭从库

/etc/init.d/mysqld stop

5.copy数据

注意:(拷贝前需要将之前的mysql数据目录清空)

innobackupex --defaults-file="/etc/my.cnf" \

--user=root \

--move-back /opt/2016-05-07_16-50-33/

6.查看master位置

[root@linux-node2 data]# cat xtrabackup_binlog_pos_innodb

mysql-bin.000008    3037723

7.修改权限

将mysql的数据目录授予mysql用户权限

chown -R mysql:mysql /data01/mysql/

8.启动从库

/etc/init.d/mysqld start

9.设置主从

mysql> change master to \

master_host='192.168.56.11', \

master_user='slave', \

master_password='123456', \

master_log_file='mysql-bin.000008', \

master_log_pos=3037723;

相关经验:

生产环境212G的数据:

备份时间约25分

内网scp时间:5分钟(千兆网卡)

预处理时间:5分种

拷贝(恢复)数据:21分钟

延迟复制:

1.误删除恢复。

2.延迟测试。

3.历史查询。

mysql> stop slave;

mysql> change master to master_delay = 600;

mysql> start slave;

半同步复制:

master:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;

mysql> stop slave io_thread;start slave io_thread;

高可用解决方案:   MHA

架构扩展方案:

1.基于复制的扩展

2.客户端分库分表

3.mysql cluster

4.Percona XtraDB Cluster

5.MySQL的Proxy中间件(mysql proxy,mycat)

MySQL  -> Percona Server  -> MariaDB

基于复制的扩展  -> 客户端分库分表 -> MySQL PXC -> mysql 中间件  -> mysql cluster

从库:一定要设置只读

MySQL Proxy部署   PXC部署(技术储备)

你可能感兴趣的:(XtraBackup2.4.4 with mysql5.7.17 主从同步)