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 min@‘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_Running:yes的值都必须为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
再开一台虚拟机C:VM3
本次操作相当于把B机当作MASTER,C机当作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 minmin@‘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 root@172.25.45.16:
#将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 *.* tomin@‘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进行,产生一千万条数据。然后在将数据进行备份,比较传统的mysqldump和mysqlpump备份速度的差异。
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
原文地址:http://linuxmin0712.blog.51cto.com/11702588/1793459