APP下载

MySQL集群主从复制的原理、实现与常见故障排除

2021-12-24冯冬艳

山西电子技术 2021年6期
关键词:主从配置文件二进制

冯冬艳

(山西职业技术学院,山西 太原 030006)

0 引言

MySQL是一款优秀的关系型数据库管理系统(RDBMS)应用软件,广泛应用于中小型企业的数据存储中。2009年4月Oracle公司以74亿美元收购Sun公司后,MySQL也随之归到Oracle旗下,目前主要有Enterprise和Community两种版本。社区版MySQL由于其开源、稳定、安全等特点,MySQL在Linux平台上具有广泛的应用。

在企业的实际应用过程中,随着MySQL中数据存储量的持续增大和企业、用户对存取响应速度和数据安全性要求的不断提高,单台MySQL数据库所提供的服务能力已经不能满足企业的实际需求。因此搭建一个能够同时实现高并发和负载均衡的MySQL集群服务器势在必行。在集群中为了提高数据的写入和读取效率,经常需要对数据进行读写分离。此外,为了确保数据的安全而进行热备也是一种经常性的需求。为实现以上相关功能,MySQL提供了一个称为“主从复制”的功能来实现多台服务器之间数据的自动复制备份。

本文主要探讨“一主多从”服务器架构中主从复制的基本原理、实现和常见故障排除。在“一主多从”服务器架构中,业务服务器对数据进行写操作或修改操作是在主服务器进行的,而进行读操作时是在从服务器进行的,不同服务器之间一般是通过异步的方式完成数据的更新。本文所使用的实验环境包括:操作系统为CentOS Linux release 7.3.1611(Core),数据库为MySQL8.0.25,主服务器IP为192.168.211.128,从服务器IP为192.168.211.129。

1 MySQL主从复制的基本原理

MySQL中的主从复制实际上采用的是异步方式实现的,但是由于其执行速度较快,因此经常感觉是实时完成的。我们一般将直接提供数据增加、修改、删除功能的服务器称为主服务器(Master),而将主要提供数据查询功能的一台或多台服务器称为从服务器(Slaves)。一般来说MySQL的主从复制遵循以下基本过程:

1) 主服务器在进行数据更新操作后会将相应的操作记录到它的二进制日志中,并且维护文件的一个索引用来跟踪日志循环,这个日志可以记录并发送到从服务器的更新中去。一般情况下服务器的二进制日志是关闭的,需要通过配置文件方式将其启用。

2) 从服务器会在一定时间间隔后对主服务器的二进制日志进行探测,看其内容是否有更新。如果有更新,从服务器就会启动一个I/O线程用于连接到主服务器并请求主服务器的二进制文件里面的更新内容到从服务器。同时从服务器会告知主服务器,从服务器上一次成功更新到的主服务器二进制日志文件的位置。

3) 当主服务器接收到从服务器的I/O请求后,会为每一个从服务器的I/O线程创建一个Binlog dump线程,该线程会将主服务器的二进制日志中更新的事件发送给从服务器。

4) 从服务器的I/O线程读取到主服务器Binlogdump线程发送的主服务器的二进制日志文件中更新的事件并将其保存到从服务器的中继日志中。

5) 从服务器会创建一个SQL线程,读取保存在中继日志中的主服务器二进制日志中的更新事件并且执行,相当于主服务器更新的SQL操作在从服务器再执行一遍,进而保证主从服务器的数据一致。

2 MySQL主从复制的实现

为了简单起见,本文将实现一主一从架构的主从复制,一主多从架构的原理与此基本相同,对于较复杂的其他架构本文暂不予讨论。一主一从架构的主从复制实现起来比较简单,首先需要对主服务器和从服务器的数据同步进行配置。

第一,对主服务器MySQL进行配置:

1) 创建用于从服务器连接主服务器的用户backup并授予其replicationslave权限。create user 'backup' identified by ' backup'; grant replication slave on *.* to ' backup' @' 192.168.211.129';

2) 打开主服务器MySQL的配置文件/etc/my.cnf,在[mysqld]下添加参数:server_id=1,log_bin=mysql-bin。两个参数分别用于指定服务器id和二进制日志的名字。

3) 配置完成后重启MySQL服务,进入MySQL,输入命令show master status;查看并记录表中file和postion的值。这两个参数值将被用于从服务器MySQL的参数配置。

图1 查看二进制日志中File和Position的值

第二,对从服务器MySQL进行配置:

1) 进入从服务器MySQL的配置文件/etc/my.cnf中在[mysqld]下添加参数:server_id= 2,这个id值不得与主服务器的相同。

2) 执行同步SQL语句,需要指定主服务器IP地址,登录用户名及密码,二进制日志名字与偏移。change master to master_host='192.168.211.128', master_user=' backup', master_password=' backup',master_log_file=' mysql-bin.000002', master_log_pos=156;其中master_host用于指定主服务器的IP地址,master_user用于指定从服务器登录主服务器进行同步时的用户名,master_password用于指定该用户的密码,master_log_file用于指定主服务器二进制文件的名字,master_log_pos用于指定二进制日志的偏移量。

3) 开启主从同步:start slave;该命令用于启动主从同步。

4) 查看同步状态:show slave statusG;在状态参数列表中Slave_IO_Running和Slave_SQL_Running的值均为Yes,则表示主从同步状态正常。

图2 查看Slave_IO_Running和Slave_SQL_Running的值

第三,对主从复制运行情况进行验证:

1) 在主服务器创建数据库student、表stu_info并插入一条测试数据:create database student;create table stu_info(stu_idint,stu_name varchar(12),phone varchar(11)); insert into stu_info values(1,’zhangsan’,13888888888’);

2) 在从服务器进行查看,验证主从复制运行是否正常:通过查询,可以看到在主服务器创建的数据库、表和插入的数据内容,主从复制正常运行。

图3 查看从服务器内容是否与主服务器一致

3 MySQL主从复制常见故障及排除

1) 报错Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids。此类错误在实验环境里经常会出现,因为在实验条件下往往是先搭建一个服务器环境,再复制出其它服务器环境。因此server_id可能会出现相同的情况,只需要在主、从服务器的MySQL配置文件[mysqld] 中将server_id设置为不同值即可。

2) change master之后,查看slave的状态,发现slave_IO_running 仍为NO。需要注意在进行完之前的相关配置操作后要对MySQL服务进行重启,重启后再进行查看slave_IO_running变为Yes。

3) 报错ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first。出现此错误的原因是在没有停止slave进程的情况下执行change master,因此需要先通过命令stop slave停止slave后再进行相关操作。

4 结语

在实际应用中,有大量的MySQL复制采用的是一主一从或一主多从架构,这类架构能够实现准实时的数据热备。对于一些数据实时性要求不是非常高的应用,企业仅仅通过扩展廉价的slave就可以解决解决数据库端读数据的瓶颈问题。但是这种架构复制数据的安全性和实时性还存在一定的不足,尤其在集群规模不断扩大的情况下,因此就出现了主动模式的Master-Master、主动-被动模式的Master-Master、级联复制Master-Slaves-Slaves、带从服务器的Master-Master等不同的集群架构来满足不同场景的需求。

猜你喜欢

主从配置文件二进制
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
用二进制解一道高中数学联赛数论题
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
Antarctica's pretty pink snow
互不干涉混用Chromium Edge
有趣的进度
基于ACS880变频器XD2D主从功能的采煤机牵引调速系统设计
二进制宽带毫米波合成器设计与分析
基于飞行试验数据的仿真模型主从一体化检验