mysql AB复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql AB复制相关的知识,希望对你有一定的参考价值。

AB复制又称主从复制,实现的是数据同步。如果要做mysql AB复制,数据库版本尽量保持一致。如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制。MySQL AB复制有什么好处呢?有两点,第一是解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据;第二点是减轻数据库服务器压力,这点很容易想到,多台服务器的性能一般比单台要好。但是MySQL AB复制不适用于大数据量,如果是大数据环境,推荐使用集群。

然后我们来看看MySQL复制的 3 个主要步骤:

1)主服务器把数据更改记录到二进制日志中,这个操作叫做二进制日志事件;

2)从服务器把主服务器的二进制日志事件拷贝到自己的中继日志(relay log)中;

3)从服务器执行中继日志中的事件,把更改应用到自己的数据上。

主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。 从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的

更新之间的冲突。

先用老版的mysql进行实验。

server3(主机)

#yum install mysql-server -y   //rhel6.5系统自带的时5.1.71的老版本

#service mysqld start  //mysql初始化

#vim /etc/my.cnf    //编辑mysql配置文件

  在最后添加

server-id=1           //添加server-id,主从必须不同,如果设置多个从服务器,每个从服务器必须有一个唯一的 server-id ,必须与主服务器的以及其它从服务器的不相同。可以认为 server-id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集中的每个服务器实例。

log-bin=mysql-bin     //开启日志二进制文件mysql-bin

#service mysql restart  

#mysql_secure_installation

添加root密码redhat

#cd /var/lib/mysql     

#mysqlbinlog msql-bin.000001   //查看日志信息

技术分享 

 

#mysql -predhat

  grant replication slave on *.* to [email protected] identified by ‘redhat’;

  show master status;

 技术分享

 

server4(从机)

#yum install -y mysql-server

#service mysql start

#vim /etc/my.cnf

  添加server-id=2

#mysql_secure_installation

  添加root密码为redhat

#change master to master_host=’172.25.0.2’;master_user=’AB’;master_password=’redhat’;master_log_file=’mysql-bin.000001’;mysql_log_pos=’254’;

start slave

show slave status\G;

 

出现2YES则连接成功。

技术分享 

 

 

server3上,创建库:create database redhat,能实时同步到server3

              添加表:use redhat;

                      create table usertb(username varchar(25) not null;password varchar(25) not null);

                      insert into usertb value (‘user1’,’123’);

技术分享

 

          server4上也能看到。

技术分享

 

 

下面实现A-->B-->C复制

技术分享 

 

增加从机server5

server4my.cnf中,添加log-bin=mysql-bin

                           log-slave-updates,

   然后执行上面的操作,只是将server4作为主机,server5作为从机。

AB复制只能实时复制,不能将之前的复制过去,为了将server3的之前数据复制到server5上,可以将server3mysql-bin.000001复制到server5中,在server5上,执行

#mysqlbinlog mysql-bin.000001

查看起始pos id与结束pos id

#mysqlbinlog mysql-bin.000001 --start-position=起始id --stop-position=结束id  //恢复这两id之间的数据

在对server3mysql进行操作,在server5上能实时看到变化,

 

由于mysql5.1的老版本,主机向从机发送数据时,从机是单线程接受的,速度很慢。新版本5.7能多线程接收,效率能提升80%。它不再通过二进制日志文件来匹配,而是通过gtid

首先,移除所有老版本mysql

#service mysqld stop

#rm -fr /var/lib/mysql/*

#rpm -e mysql

#yum remove mysql

直到#rpm -qa | grep mysql 下再无信息出现。

安装

 技术分享

 

#service mysqld start

#less /var/log/mysqld.log

查看临时root密码

#mysql -p临时密码

  修改密码

server3

#vim /etc/my.cnf

   在最后添加

   gtid-mod=on

   enforce-gtid-consistency=on  //开启gtid,并强制持续开启。

#service mysqld restart

mysql中,grant replication slave on *.* to [email protected] identified by ‘redhat’;

server4中,

进入mysql

  change master to master host=’172.25.0.3’,master_user=’AB’,master_password=’redhat’;,master_auto_position=1;

server3中,创建表usertb,添加值user1、123

技术分享 

server4

 技术分享

 

AB复制成功。

 

下面对新版本mysql的并行多线程进行实验。

server4上的my.cnf中,添加

slave-parallel-type=LOGICAL CLOCK    //从机并行方式为逻辑时钟

slave-parallel-worker=16    //并行进程为16 


进入mysql,mysqlshow slave\G可看到master uuid

技术分享

 

 

为使实验明显,创建触发器add.sql实现大的数据库。代码为

 技术分享

server3

#mysql -p密码 redhat < add.sql

#mysql -p密码

  use redhat;

  call test1

server4上,因为一个表对应一个sql进程,由于采用并发多线程,进入mysql,mysqlshow slave\G可看到gtid增加很快,second_behind_master(延时)很小。

 技术分享

 

mysqlpump多线程备份:

mysqlpump相对于之前的逻辑备份工具mysqldump来说,优势如下:

  • 支持基于表的并行导出功能(参数–default-parallelism,默认为2,参数–parallel-schemas,控制并行导出的库)

  • 导出的时候带有进度条(参数–watch-progress,默认开启)

  • 支持直接压缩导出导入(参数–compress-output,支持ZLIB和LZ4)

mysqlpump的并行导出功能的架构为:队列+线程,允许有多个队列,每个队列下有多个线程,而一个队列可以绑定1个或者多个数据库。但是,对于每张表的导出只能是单个线程的, 这和mydumper工具是不一样的 ,因为mydumper支持一张表多个线程以chunk的方式批量导出,这在主键是随机的情况下,导出速度还能有提升。

#time mysqlpump -p密码 redhat > redhat.sql

几秒内很快备份完成

#time mysqlpump -p密码 --default-parallelism=2 --compress-out=lz4 redhat > redhat

默认双线程且压缩为lz4的格式


以上是关于mysql AB复制的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的ab复制

MySQL数据库在线热备(主从复制之AB复制)

MySQL数据库在线热备(主从复制之AB复制)

mysql AB复制 MS复制

MySQL数据库在线热备(主从复制之基于GTIDs的AB复制)

MySQL数据库在线热备(主从复制之基于GTIDs的AB复制)