Mysql 主从复制(AB复制)

Posted

tags:

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

mysql 主从复制(AB复制)

 

  Mysql的主从复制又叫做AB复制,主要作用就是将主服务器上的数据及时复制到从服务器上,来实现数据的同步,这样做的好处有,在进行数据备份时,可以减轻主服务器的运行压力,另外即使主服务器宕机了,也能从从服务器上取得主服务器的数据,从而保证数据不会丢失。这对于一个企业来说是至关重要的。一般在实际生产环境中,由单台mysql作为独立的数据库是完全不能满足实际需要的,无论在安全性,高可用性以及高并发等方面,一般是通过主从复制(Master-Slave)的方式来同步数据,再通过keepalived组件或者pacemaker来解决单点故障,实现高可用性,最后通过读写分离(Mysql-Proxy)来提升数据库的并发负载能力。

技术分享

  

  今天我们就来实现主从复制,并且是采用两种版本的数据库,第一个主从复制实验采用的是mysql-5.1.71-1.el6 ,第二个主从复制实验采用的是mysql-5.7.11-1.el6版本。好了,话不多说,直接上步骤。

注意:一般作主从复制时一定要使得从机的mysql版本要和主服务器mysql版本一直,甚至高于主服务器才行。如果主服务器的mysql之前里面有数据因该进行数据备份,再将数据拷贝到从数据库中,保证数据库初态一致。

要求:新开两台虚拟机,一台主服务器,一台从服务器。均安装上数据库mysql

实验一:低版本的主从复制,直接通过yum源进行安装。

MASRER VM1        IP=172.25.45.15  hostname=mysql1

#yum  install  -y  mysql-server

#/etc/init.d/mysqld  start   #启动数据库

#mysql_secure_installation       #数据库安全初始化,设置密码等。

#mysql -pwestos         #登陆数据库

#vim   /etc/my.cnf     

7server-id=1     #数据库id号,为1时,表示为master,每个同步的服务器都必须设定一个唯一的编号,否则同步就不能正常运行。

          8log-bin=mysql-bin      #启用二进制日志

#/etc/init.d/mysqld    restart

#mysql -pwestos    :进入数据库,进行sql语句操作

>showmaster status;    

>grantreplication slave on *.* to [email protected]‘172.25.45.16‘ identified by ‘westos‘;         #授权给从mysql数据库服务器172.25.45.16

技术分享

此时需要在从数据库服务器上验证以下授权的用户及密码能否远程登陆到主服务器上。(#mysql -h 172.25.45.15  -umin  -pwestos

创建库和表,在备份机进行验证。

等操作。

 

 

SLAVE VM2   IP=172.25.45.16     hostname=mysql2

#yum install -y mysql-server

#vim /etc/my.cnf

7server-id=2     #添加数据库id号。

#/etc/init.d/mysqld   start

#mysql_secure_installation     #和上面类似,

#mysql -pwestos     #进入数据库,sql语句操作,配置SLAVE机:

>show  slave status;        #显示从数据库状态。

>change masterto master_host=‘172.25.10.30‘,master_user=‘liumin‘,master_password=‘westos‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=106;       #执行同步SQL语句,启动slave同步进程

>start slave;          #启动slave

>show slavestatus\G;    #显示从数据库状态,检查主从同步。

 

其中Slave_IO_running:yes Slave_SQL_Runningyes的值都必须为yes才表示状态正常。其中Slave_IO_running线程主要负责到Master上复制二进制日志文件的,而Slave_SQL_Running线程主要是将复制的文件在slave上执行一遍。

技术分享

技术分享

验证主从复制的效果:

MASTER上登陆数据库,创建数据库和表,并插入相关的值,再在SLAVE机上的数据库中进行验证。

MASTER 

#Mysql -pwestos

>create databasewestos;

>use westos;

>create  table  usertb (

          -> username  varchar(50)  not null,

        -> password  varchar(50)  not null);

>desc  usertb;

>insert  into  usertb value  (‘user1‘,‘westos‘);

>select  *  fromusertb;

>delete  from  usertb where  username=‘user1‘;

>select  *  from  usertb;

 

SLAVE机:

#mysql -p

>showdatabases;

检测slave是否已经达到数据库的AB主从复制。

 

注:使用 mysqlbinlog 命令查看MASTER的二进制文件mysql-bin.000001 以及SLAVE的中继日志:mysqld-relay-bin.000001内容。

 

补充:ABC复制:A---> B ---> C

再开一台虚拟机CVM3

本次操作相当于把B机当作MASTERC机当作SLAVE,不过B机的配置文件要进行相应的修改。必须额外添加一行:log-slave-updates.

B机配置且进行授权:

#vim  /etc/my.cnf

server-id=2

Log-bin=mysql-bin

log-slave-updates

#/etc/init.d/mysqld restart

#mysql-pwestos

#grant replicationslave on *.* to [email protected]‘172.25.45.17‘ identified by ‘westos‘;       #授权给从mysql数据库服务器172.25.45.17

 

 

C机:VM3  IP=172.25.45.17  Hostname=mysql3

#yum  install  -y  mysql-server

#vim   /etc/my.cnf

 server-id=4

#/etc/init.d/mysqld  start

#mysql_secure_installation 

#mysql -pwestos

>change master to    master_host=‘172.25.45.17‘,master_user=‘minmin‘, master_password=‘westos‘, mastr_log_file=‘mysql-bin.000001‘,master_log_pos=106;    #执行同步SQL语句,启动slave同步进程。

#start  slave

#show slave  status\G;  #查看slave状态。验证同上。

此时A创建的数据库及表都会同步到B并且也会同时同步到C上。这就是ABC主从复制。

 

 

 

 

实验二:使用高版本的数据库mysql-5.1.71-1.el6,作主从复制。

得先把之前的低版本mysql卸载干净。

#/etc/init.d/mysqld   stop

#cd   /var/log/mysql  ---> # rm   -fr  *

# cd /root   ---> #rm -fr   *

# rpm-qa | grep mysql      查询mysql软件,然后进行卸载。

#rpm -e`rpm -qa | grep mysql`  --nodeps

lftp -->  mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar

   #获得mysql-5.1.71-1.el6软件,可以从官网下载。

#tar -xf  mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar   :解压tar包。

#yum  install  -y  mysql-community-common-5.7.11-1.el6.x86_64.rpmmysql-community-libs-5.7.11-1.el6.x86_64.rpm mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm

#安装这四个rpm包。

#scp mysql-community-common-5.7.11-1.el6.x86_64.rpmmysql-community-libs-5.7.11-1.el6.x86_64.rpmmysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm  [email protected]:

#MASTER上的rpm包传送到SLAVE机上。

B机上也要把mysql卸载干净。#rpm -qa | grep mysql

#rpm -e`rpm -qa | grep mysql`  --nodeps

# rpm-qa | grep mysql

然后在进行安装nysql数据库。

 

MASTER VM1 IP=172.25.45.15    HOSTNAME=mysql1

#/etc/init.d/mysqld   start

#less   /var/log/mysqld.log        #查找原始密码;

#mysql_secure_installation-->输入原始密码,进行初始化并进行改密。

此密码要求8位以上,并且要求大小写字母以及包含特殊字符,和数字。

接下来做数据库的A --- B热备份,和上午的做法完全一致。但是下午采用的mysql-5.7的版本,所以可以采用多线程并行复制,同时采用GTID可以保证数据一致性。这是mysql5.7版本以后才具备的功能。GTID;主要用于保持数据的一致性。

#vim   /etc/my.cnf    #主备份机都要在最后添加这两行;

Server-id=1

log-bin=mysql-bin

gtid-mode=on

enforce-gtid-consistency=on

#/etc/init.d/mysqld   restart    #进行mysql服务重起,

#mysql  -p   #登陆mysql进行授权;

>grant replication slave on *.* [email protected]‘172.25.45.16‘ identified by ‘westos‘;

> show master status;

 

SLAVE:   VM2  IP=172.25.45.16   hostname=mysql2

#vim   /etc/my.cnf

server-id=2

gtid-mode=on

enforce-gtid-consistency=on

#/etc/init.d/mysqld   restart    #进行mysql服务重起

#mysql -p   

>stop  slave;          #首先停止slave

>change master to    master_host=‘172.25.10.30‘,master_user=‘minmin‘,master_password=‘HELLOmin+1234‘,master_auto_position=1;

#执行同步SQL语句,采用GTID方式实现多线程并行复制

>start slave;

>show slave status\G;     查看slave状态。

技术分享

技术分享

 

 

SLAVE上的mysql主配置文件中添加并行模式:数据备份延迟时间能减少到最小,因为是多线程进行操作,性能能够提升80%左右。

编辑备机mysql主配置文件,添加并行模块;

#vim  /etc/my.cnf

server-id=2

gtid-mode=on

enforce-gtid-consistency=on

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16    

master_info_repository=TABLE

relay_log_info_repository=TABLE   

#/etc/init.d/mysqld   restart;

#mysql -p

  >show processlist;   查看数据库线程数;

技术分享

 

最后进行验证主从复制:再MASTER上进行数据库的创建以及相应的表的创建。这在前面都有所阐述,具体参看前面的内容。

 

 

测试使用程序add.sql进行,产生一千万条数据。然后在将数据进行备份,比较传统的mysqldumpmysqlpump备份速度的差异。

Maseter:

#mysql  -pHELLO+1234 westos  <  add.sql

> call test1; 正在产生一千万条数据。

同时也可以在备份机上查看主从备份数据的延时情况,比较单进程和多线程复制数据的速度。将刚才产生的一千万条数据使用以下三种方法进行备份,同时比较备份最短的时间。从中可以看出mysqldump的优势。

在主机master上:

# time  mysqldump -pHELLO+1234  westos  > westos.sql

#time  mysqlpump -pHELLO+1234  westos   > westos.sql

#time  mysqldumper -pHELLO+1234  westos  > westos.sql

 

 

Mysqldump,mysqlpump,mysqldumper比较这三者之间备份数据的速度.

 

 

Lock HA切换数据一致性)   半同步(给回执才给用户发session   数据库(延迟时间0 log-bin=mysql-bin

server-id=1  pos号数据一致性)   

原子操作:保证数据一直操作结束,不中断。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


本文出自 “Foreverlinux” 博客,请务必保留此出处http://linuxmin0712.blog.51cto.com/11702588/1793459

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

Mysql 主从复制(AB复制)

MySQL主从复制架构实现

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

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

Mysql数据库AB复制简单实现

04 . Mysql主从复制