MySQL主从复制与读写分离

Posted

tags:

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

mysql主从复制与读写分离

MySQL读写分离原理

  • 读写分离就是只在主服务器上写,只在从服务器上读。基于原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从服务器。
  • Amoeba(变形虫)软件致力于MySQL的分布代理层式数据库前端,他主要为应用层访问MySQL时充当SQL路由,并具有负载均衡、高可用性、SQL过滤、读写分离、可路由相关到目标数据库,可并发请求多台数据库。通过Amoeba能够完成多数据源的高可用、负载均衡、数据切片的功能。

实验拓补图

技术分享图片

实验环境

主机 IP地址 主要软件
主服务器 192.168.27.128 mysql5.7.17
从服务器1 192.168.27.139 mysql5.7.17
从服务器2 192.168.27.142 mysql5.7.17
Amoeba 192.168.27.145 amoeba-mysql-binary-2.2.0.tar.gz;jdk-6u14-linux-x64.bin
客服端 192.168.27.143

搭建MySQL主从复制

  • 之前搭建过MySQL主从复制,本次实验就不多做介绍,详细配置过程可以到上一篇文章中查看;
  • 在三台MySQL服务器中开放权限给Amoeba访问:

mysql -u root -p #进入MySQL

grant on . to [email protected]‘192.168.27.%‘ identified by ‘123.com‘;

搭建MySQL读写分离

1、在Amoeba主机上安装Java环境

mkdir /opt/abc

mount.cifs //129.168.27.1/mysql /opt/abc #挂载

cp /opt/abc/jdk-6u14-linux-x64.bin /usr/local

cd /use/local

chmod +x jdk-6u14-linux-x64.bin #执行脚本提权

./jdk-6u14-linux-x64.bin #执行安装脚本

mv jdk1.6.0_14 jdk1.6 #重命名

vim /etc/profile #编辑环境变量

export JAVA_HOME=/usr/local/jdk1.6        #JAVA家目录
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib   #指定运行库
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin  #识别JAVA命令
export AMOEBA_HOME=/usr/local/amoeba        #Amoeba家目录
export PATH=$PATH:$AMOEBA_HOME/bin          #识别Amoeba命令

source /etc/profire #刷新环境变量

2、安装并配置Amoeba软件

mkdir /usr/local/amoeba

cd /opt/abc

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz /usr/local/amoeba #解压缩

chmod - 755 /usr/local/amoeba

/usr/local/amoeba/bin/amoeba

amoeba start|stop           #显示此内容说明Amoeba安装成功

vim /usr/local/amoeba/cnf/amoeba.xml

#--30行--
<property name="user">amoeba</property>

#--32行--
<property name="password">123456</property>

#--115行--
<property name="defaultPool">master</property>

#--117行去掉注释--
<property name="writePool">master</property>
<property name="readPool">slaves</property>

技术分享图片技术分享图片

vim /usr/local/amoeba/cnf/dbServers.xml

#--23行注释掉--(默认进入test库,以防MySQL中没有test库时会报错)
<!-- <property name="schema">test</property> -->

#--26-29--去掉注释--
<prope77rty name="user">test</property>
<property name="password">123.com</property>

#--42-主服务器地址---
<dbServer name="master"  parent="abstractServer">
<property name="ipAddress">192.168.27.128</property>

#--52-从服务器1-
<dbServer name="slave1"  parent="abstractServer">
<property name="ipAddress">192.168.27.139</property>

#--59-从服务器2-
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.27.142</property>

#--66行--
<dbServer name="slaves" virtual="true">

#--72行--
<property name="poolNames">slave1,slave2</property>

/usr/local/amoeba/bin/amoeba start #开启Amoeba

技术分享图片技术分享图片

3、客户机

yum install mqsql -y

mysql -u amoeba -p123456 -h 192.168.27.145 -P8066 #远程登录

4、测试
  • 1)、测试读操作,当在从服务器上关掉同步,并在两台从服务器上写入数据,使用客户机登录查询,多次查询时会分别出现两台从服务器中的写入数据。
  • 2)、测试写操作,当在从服务器上关掉同步,在客户机上写入数据,客户机上不会查询到写入数据,只会在主服务器上查询到写入数据。

以上是关于MySQL主从复制与读写分离的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从复制与读写分离配置及实操

MySQL主从复制及读写分离实际部署与验证

MySQL主从复制及读写分离实际部署与验证

MySQL主从复制与读写分离

MySQL 主从复制与读写分离 部署

MySQL主从复制与读写分离