mysql 主从复制 读写分离_MySQL主从复制与读写分离

MySQL主从复制原理:MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离

MySQL支持的复制类型:

1 基于语句的复制。在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高

2 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍

3 混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

MySQL读写分离原理:读写分离就是只在主服务器上写,只在从服务器上读,基本原理是让主数据库处理事务性查询,而从数据库执行select查询。数据库复制被用来把事务性查询导致的变更同步群集中的从服务器

481af8dbde6c59d0812ce15cc3352f56.png

该服务一般基于中间代理层实现,代理一般位于客户端和服务器之间,代理服务器接到客户端请求通过判断后转发到后端数据库。

Amoeba(变形虫)项目是一个开源框架,于2008年开始发布一款 Amoeba for Mysql软件;

这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发;位于 Client、DB Server(s)之间,对客户端透明;

下面我基于上面的拓扑图来做一下MySQL的主从复制和读写分离

实验环境:Master    CentOS 7     IP:192.168.159.129

Slave1     CentOS 7     IP:192.168.159.130

Slave2     CentOS 7     IP:192.168.159.131

Amoeba  CentOS 7     IP:192.168.159.128

客户端      CentOS 7     IP:192.168.159.132                        #5台服务器的MySQL均为5.5版本

一、实现主从同步

00fe3927d3f6a3f59f274bc084b24135.png

e72690a5c4c695da36ff027b400c0f16.png

6c737a8bb9ad39d6e4aefe13a112ee86.png

b0c6fa215d81d3d0d389cb19b01e1fe4.png

a0eee5d7f997302d1dec2b381eb406eb.png

1 想要执行主从复制首先要能保证主和从的服务器时间能保持一致,虽然不会完全一致,但也要保证差别不大

1)在主从服务器上安装NTP包

2)在主服务器配置NTP的主配置文件,将本地设为时间源,时间层级设为8,完成之后便开启NTP服务,最后关闭防火墙

3)在两台节点服务器上安装ntpdate进行时间同步,同步对象为主服务器,接着开启NTP服务,最后同样要关闭防火墙

9e29f02acd943dd8c528e0878f0fc58e.png

9bdfa0bb586ce6431489d2ec4a8043c0.png

9003afe2fcf6056fddea814b302125ba.png

2 接着对主服务器的MySQL主配置文件进行配置

1)定义主服务器的二进制文件名,允许从服务器进行同步更新

2)定义主服务器的ID值,这里的ID值具有唯一性,所以每台服务器的ID值不能相同

3)重启数据库

4)登录MySQL,授权给从服务器

5)查看主服务器状态

877378923360723719fd74fc6fcb6ee9.png

d79c7403ae8eb79207570a1941130a69.png

4b541fbf95afd917e81f3a16e107e641.png

6290d9da8afc5d2525a9da13fd5f4c52.png

3 对两台节点服务器的MySQL主配置文件进行配置

1)定义第一台从服务器的ID值和中继日志

2)配置与主服务器的同步功能,并且开启该功能

3)在第二台从服务器上执行相同的配置

14727aef24c5e1345caac6c67010f2e4.png

ca92a88e60738ed6443e9d47b4858845.png

d733ebbe5929c326732ac3cca330ee44.png

4 对主从复制服务进行测试

1)在主服务器上建立一个库

2)在从服务器上查看是否有该数据库,如果有说明服务成功

二、执行读写分离(在Amoeba服务器上进行操作)

c4b2e3e0d3a6264531a0954451415db1.png

662deb576d4141ab1015a80a9d6ba8c0.png

9cb159ab4d9bf0185c88d120240d06df.png

2ce06b65a180f3f223287fc9764c0156.png

83ba297fd536efe729c89484281d1f25.png

26d9a86cb180b51ce0c63bf0fdc8ad91.png

1 在安装Amoeba软件之前需要先安装java环境,不然Amoeba无法运行

1)挂载软件包

2)将java软件包放到/usr/local目录下

3)执行该文件,按回车和yes即可执行完成

4)在etc/profile目录下配置所需要的环境变量,具体操作已在图中写出

5)最后执行source命令使环境变量立即生效

bf2a5adbdc39e5f68bc361e46464f848.png

f629341364ffb1b84551adc2194dd497.png

9560d5d65dd20b9f57613932a5b4b8ee.png

be67186ae647f373e05065f33d9d273e.png

f1b49f112d0773df0ce0e0108b48b22d.png

2 安装Amoeba,将MySQL群集开放给Amoeba访问权限

1)在/usr/local目录下创建amoeba工作目录,并且将软件包安装在此目录下

2)amoeba安装完成后便赋予其执行权限,接着执行图中命令检测是否安装成功

3)在三台MySQL服务器上开放给Amoeba访问权限

77ed3fae0efd8c2b7fe60329d7a5d2e3.png

dd807134126d01e5ebbe5c628e01b7b0.png

abe2be5aa20bf2f7e903be15ba125795.png

3 对amoeba.xml进行配置

1)指定客户机访问时所用的用户名和密码

2)分配给主服务器的默认权限和写入权限

3)分配给从服务器的读取权限

d0aa2e0a16c57250723d97fa0e226f4b.png

4ca0a5426fc7aa101db4862810b25005.png

40fb67a55c7c1712d8037b014cd20c3c.png

c0a75776ff5fdae86e73acefa798e719.png

a4c3e1a23166cb8f2d238c7d0e8d9006.png

4 对dbServers.xml文件进行配置

1)指定Amoeba访问MySQL服务器时所用的用户名和密码

2)指定主服务器的名称和地址

3)指定从服务器的名称和地址

4)指定从服务器池和池下的从服务器

5)配置完成后开启服务

0c4f944e8da211cf30ebf5cd49bca19a.png

3e1a2895b0baad1e2685c980cce80dee.png

707a44e023bce5650606c64610fabc4d.png

31b5e9aef31b0df1e7789ef11332e1b0.png

0926aca7fbcd197b2d69f08efeec0347.png

3b43ad889926e232ba49753a12cfa325.png

b23e3049dd9b0f6331cf6c40f9fc4d8f.png

efc85d2495c995cd433e9de24a128405.png

5 最后便是测试了,先测试从服务器的只读功能

1)用客户端远程登录Amoeba服务器

2)在主服务器的school数据库中创建class表,此时两台从服务器也会有class表

3)这里为了显示测试效果需要先关闭两台从服务器的同步功能

4)在主从三台服务器上分别插入三条不同的数据,在用客户端进行访问,可以看到在客户机上只能看到两台从服务器的信息而看不到主服务器的信息,说明主服务器不具备读的功能

deb4e762c8ec06a5ed6a1fa56957a039.png

d27f1645b58acd838d03273c812a4d66.png

488c066638ff9dc5523df2fdcc4752b8.png

c7f1e9698d12bc9f455b6f6eebe47ab3.png

6 接着测试主服务器的写入功能

1)用客户端在class表中插入一条信息

2)分别查看主从服务器的class表信息,可以看到新插入的这条信息只出现在了主服务器上,而两台节点服务器并没有,由此可以指明两台从服务器并不具备写入功能,只有读取的功能,至此可以看到主服务器只具备写入功能,从服务器只具有读取功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值