MySQL主从复制:实现数据高可用和负载均衡

一、引语

MySQL主从复制是一种常用的数据库复制技术,可以实现数据的高可用性和负载均衡。通过主从复制,我们可以将数据从一个MySQL主服务器复制到一个或多个从服务器,从而实现数据的冗余备份和读写分离。本文将介绍MySQL主从复制的原理、配置步骤以及常见问题的解决方法。

二、主从复制的原理

  • 主服务器(Master)负责接收和处理所有的写操作,并将写操作记录到二进制日志(Binary Log)中。
  • 从服务器(Slave)连接到主服务器,并通过读取主服务器的二进制日志来复制主服务器上的数据变更操作。
  • 从服务器将接收到的数据变更操作应用到自己的数据库中,从而保持与主服务器数据的一致性。

三、主从复制的基本步骤

传统主从复制的基本过程如下: 
1)、Mysql Slave端的IO进程连接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 
2)、Master接收到来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。 
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master"我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我"; 
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。


简单来说就是:
主:I/O进程

从:I/O进程 从服务器通过I/O进程跟主服务器的I/O进程通信将主服务器的BINLOG日志同步过来,并且根据BINLOG日志的内容通过SQL进程往从库写数据

四、实验过程

1、准备环境

准备两台干净的虚拟机(CentOS 7),不建议使用克隆,并且要在同一网段。每台虚拟机都要安装MySQL 5.7版本的数据库。

再实验之前关闭防火墙和SELinnx

systemctl stop firewalld       #关闭防火墙
setenforce  0                  #关闭selinux

给两台分别改名为master和slave

hostnamectl set-hostname master
hostnamectl set-hostname slave

 对两台机器做映射处理,进行ip解析方便两台连接,但是这一步不是一定要做,没有强制要求。

vim到/etc/hostd文件下,再尾行添加上
master的ip地址       master
slave的ip地址        slave
#两台机器都要分别添加上

 做到这里我们的环境就算准备完成,接下来我们就可以进行配置了

2、master配置

修改配置文件

在/etc/my.conf目录下添加
log-bin=/var/lib/mysql/master
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1 

添加完成后我们要重启一下mysql服务

systemctl restart mysqld

mysql数据库重启完成后我们要登录mysql中创建一个用户并授权

grant replication slave,super,reload on *.* to slave@'%' identified by '创建用户的密码';

完成上述操作,master的配置就结束,接下来我们就可以配置slave了

3、配置slave

修改配置文件

在/etc/my.conf目录下添加
log-bin=/var/lib/mysql/master
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1 

完成配置我们同样要重启mysql数据库

systemctl restart mysqld

和配置master一样,我们同样要登录mysql,但不是创建用户,而是与master中的mysql用户进行连接

change master to master_host='slave',master_user='slave',master_password='密码',master_auto_position=1;

 开启slave

start slave

 开启后我们可以使用show命令查看是否成功

show slave status \G

看到下面的yes就表示成功了

我们现在就可以再master主机上写,就可以同步到slave主机上了,可以实现读写分离和备份.

五、主从复制实验中的问题

主从复制实验的过程我们可能遇到很多问题,我下面来说一下常见的问题

1、新版本mysql 做gtid方式出现错误

先在master上查看现在的gtid号

mysql> show master status\G
....
Executed_Gtid_Set: 130fc529-a688-11ec-9793-000c2922001e:1-2,f5d2ff8f-a688-11ec-981d-000c29a7f0ed:1-2
....

在slave上操作 

# mysql -u root -p'密码'
mysql> set @@global.GTID_PURGED='130fc529-a688-11ec-9793-000c2922001e:1-2,f5d2ff8f-a688-11ec-981d-000c29a7f0ed:1-2';

如果master上拿到的是一个gtid,那么按照上面的语法,重复两次就可以,比如:
mysql> set @@global.GTID_PURGED='f24c3ee0-7a88-11ed-a20e-000c29988ddf:1-3,f24c3ee0-7a88-11ed-a20e-000c29988ddf:1-3';

2、mysql server uuid重复问题,因为克隆 导致记录uuid的文件内容没有发生任何变化

解决:
1.全新机器 
或者
2.直接修改文件/var/lib/mysql/auto.cnf 内的uuid 
使用命令 # uuidgen  生成全新uuid直接替换文件内的旧uuid即可


 六、结语

MySQL主从复制是一种强大的数据库复制技术,可以提供数据的高可用性、冗余备份和负载均衡。通过正确配置和管理主从复制,我们可以确保数据的一致性和可靠性,提高系统的性能和可用性。希望本文对你理解和实施MySQL主从复制有所帮助,并能在你的项目中发挥作用。

如果你对MySQL主从复制还有其他问题或需要更深入的学习,建议你继续探索MySQL的官方文档和相关资源,以获得更多的指导和实践经验。祝你在使用MySQL主从复制的过程中取得成功!

  • 25
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL主从复制是一种常见的数据复制技术,可以将一个MySQL数据库的更改同步到其他MySQL数据库。负载均衡是一种技术,可以将流量分发到多个服务器上,以实现负载分担和提系统的可用性和性能。在结合主从复制负载均衡时,可以实现MySQL数据库的负载均衡。 以下是一种常见的方法,用于实现MySQL主从复制负载均衡: 1. 配置主从复制:首先,设置一个MySQL数据库作为主数据库(Master),将所有的写操作都发送到该数据库。然后,配置一个或多个MySQL数据库(Slave),通过复制数据库的更改来实现数据同步。 2. 配置负载均衡器:使用负载均衡器来将流量分发到多个MySQL数据库上。常见的负载均衡器有HAProxy、Nginx、LVS等。配置负载均衡器时,需要指定各个MySQL数据库的地址和端口,并设置合适的负载均衡策略,如轮询、加权轮询、最小连接数等。 3. 监控和管理:确保主从复制负载均衡的正常运行。监控主数据库和从数据库的状态,及时检测并处理潜在的问题。同时,监控负载均衡器的性能和流量分发情况,确保负载均衡的效果。 需要注意的是,MySQL主从复制负载均衡并不是完全自动化的,需要进行适当的配置和管理。此外,负载均衡并不能解决所有性能问题,还需要注意数据库的设计和优化,以及合理的硬件资源配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五言六舌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值