MYSQL读写分离

Posted thomes

tags:

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

技术分享图片

在企业中,大量数据请求下,单台数据库将无法承担所有读写操作。解决方法:配置多台数据服务器以实现主从复制+读写分离

用的代理服务器是 Amoeba

特点是:1负载均衡,2高可用,3SQL过滤,4读写分离,5高并发请求多台数据库。

试验环境

amoeba:  192.168.100.123

mysql-master:  192.168.100.111

mysql-slave1:   192.168.100.222

mysql-slave2:   192.168.100.250

client:    192.168.100.22

首先实现主从复制  主 从 从,这里就不多说了,略

先配置amoeba:192.168.100.123

1:安装Amoeba上安装java环境(推荐安装jdk1.5/1.6,不建议安装1.7)

我用的是jdk-6u14-linux-x64.bin

chmod +x jdk-6u14-linux-x64.bin

bash jdk-6u14-linux-x64.bin    一路空格,输入yes,回城完成

mv  jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile  在最后添加

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin   添加到变量里  注意不要写错

. /etc/profile 执行

java -version 查看    注意如果有自带的openjava  删掉或者转移

2:安装配置Amoeba

mkdir /usr/local/amoeba

tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba    amoeba start |stop  //出现此行说明配置无误

3:配置amoeba实现mysql-slave1、slave2读负载均衡

在三台MYSQL服务器上对amoeba授权

mysql>grant all on *.* to ‘amoeba‘@‘192.168.100.%‘ identified by ‘123123‘;  //测试环境给的权限最大 生产环境根据需要

mysql>flush privileges;    //刷新一下

编辑amoeba.xml配置文件,设置读写分离(amoeba服务器)

cd /usr/local/amoeba/conf/

vim amoeba.xml    //修改任何文件时,养成习惯备份。  cp amoeba.xml amoeba.xml.$(date +%F)

11<property name="port">8066</property>   //默认端口8066,无需更改

30 <property name="user">amoeba</property>   //设置一个用户,后面客户端访问时使用,切勿打错,要不然后期测试会进去不mysql

32  <property name="password">123123</property>    //设置登录密码

115  <property name="defaultPool">master</property>     //默认的服务器池

117  <property name="writePool">master</property>  //写服务器池

118  <property name="readPool">slaves</property>  //读服务器池

有注释<--   -->删掉

编辑dbServer.xml配置文件,设置登录MYSQL服务器的用户及密码、MYSQL服务器节点的IP地址、负载均衡算法/usr/local/amoeba/conf/

vim dbServers.xml

20 <property name="port">3306</property>  //设置MYSQL连接端口,默认3306

26 <property name="user">amoeba</property>  //设置访问MYSQL服务器所用的用户名

27  <property name="password">123123</property>   //设置访问MYSQL服务器的密码

43  <dbServer name="master"  parent="abstractServer">    //设置MYSQL服务器的IP地址

46 <property name="ipAddress">192.168.100.111</property>   主的

50 <dbServer name="slave1"  parent="abstractServer">    从的IP

53 <property name="ipAddress">192.168.100.222</property>

56 <dbServer name="slave2"  parent="abstractServer">    从2的IP

59 <property name="ipAddress">192.168.100.250</property>

63 <dbServer name="slaves" virtual="true">  //在amoeba.xml文件中设置的readPool

69 <property name="poolNames">slave1,slave2</property>   //前面定义的服务器节点

4:启动amoeba

/usr/local/amoeba/bin/amoeba start &

jobs 可以查看后台

5:测试

在主MYSQL服务器上创建db_test及库下的test表

mysq>create database db_test;

mysq> use db_test;

mysq>create table test(id int(10),name varchar(20));

可以在slave1和slave2上查看

mysq>show databases;

在slave1和slave2服务上停止主从备份

mysq>stop slave;

在master上添加表内容

mysql>insert into test values(1,‘master‘);

此前在服务器上同步了表,所以在从服务器上可以直接手动插入其他内容

在slave1上

mysql>use db_test;

mysql>insert into test values(2,‘slave1‘);

在slave2上

mysql>use db_test;

mysql>insert into test values(3,‘slave2‘);

在客户机上进行读测试

client上

yum -y install mysql mysql-devel

进入mysql  

mysql -uamoeba -p123123 -h 192.168.100.123  -P8066  //注意 这是进入amoeba服务器的mysql。

读测试

mysql>select * from db_test.test;  //来两遍 会发现轮询

此时读取数据时,轮询的方式从slave1,slave2上读取

(2)写入测试

mysql>insert into db_test.test values(4,‘client‘);

mysq>select * from db_test.test;    //会多出一个

此时写入数据到数据库时,会写到主服务器,不会写到从服务器上,实现了读写分离。





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

MySQL主从复制与读写分离

mysql读写分离实现方式

主从复制和读写分离

主从复制和读写分离

主从复制和读写分离

Linux 使用Mycat实现读写分离(基于Mysql的读写分离)