mysql读写分离

北慕城南 提交于 2020-03-18 18:34:51

环境介绍:

amoeba服务器:        192.168.3.99

master mysql 服务器:  192.168.3.100

slave1 mysql 服务器:  192.168.3.101

slave2 mysql 服务器:  192.168.3.102

客户端:              192.168.3.150

 

192.168.3.99amoeba)配置

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

./jdk-6u14-linux-x64.bin

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

vim /etc/profile.d/jdk.sh

#!/bin/bash

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile.d/jdk.sh

 

mkdir /usr/local/amoeba

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

chmod -R 755 /usr/local/amoeba/

 

查看启动脚本

[root@localhost profile.d]# /usr/local/amoeba/bin/amoeba

amoeba start|stop

 

配置读amoeba写分离

分别在3台数据库上(3.100  3.101  3.102)授权用户,使amoeba能够访问3台数据库

grant all on *.* to 'test'@'192.168.3.%' identified by '123.com';

flush privileges;

 

1.修改amoeba.xml,设置登陆amoeba的帐号密码。

cd /usr/local/amoeba/conf

vim amoeba.xml

#修改30 32行

<property name="user">amoeba</property>

<property name="password">123456</property>

 

114                 <property name="LRUMapSize">1500</property>

115                 <property name="defaultPool">master</property>          

118                 <property name="writePool">master</property>

119                 <property name="readPool">slaves</property>

注意:删除注释

3修改dbServers.xml,设置数据库、登陆MySQL的帐号和密码。

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

修改以下红色部分。注意启用29行的密码

 25                         <!-- mysql user -->

 26                         <property name="user">test</property>

 27

 28                         <!--  mysql password -->

 29                         <property name="password">123.com</property>

 

 

44         <dbServer name="master"  parent="abstractServer">

 45                 <factoryConfig>

 46                         <!-- mysql ip -->

 47                         <property name="ipAddress">192.168.3.100</property>

 48                 </factoryConfig>

 49         </dbServer>

            44-49行原文没有配置,此为我们手动添加的配置

 50        

 51         <dbServer name="slave1"  parent="abstractServer">

 52                 <factoryConfig>

 53                         <!-- mysql ip -->

 54                         <property name="ipAddress">192.168.3.101</property>

 55                 </factoryConfig>

 56         </dbServer>

 57

 58         <dbServer name="slave2"  parent="abstractServer">

 59                 <factoryConfig>

 60                         <!-- mysql ip -->

 61                         <property name="ipAddress">192.168.3.102</property>

 62                 </factoryConfig>

 63         </dbServer>

65         <dbServer name="slaves" virtual="true">

71          <property name="poolNames">slave1,slave2</property>

注意71的配置必须用逗号隔开。用句号会报错

 

4.启动amoeba

如图为启动成功

端口已经正常启动

 

5.测试

在客户端上连接amoeba

mysql -uamoeba -p123456 -h 192.168.3.99 -P8066

首先我们测试mysql的读的负载均衡功能。

关闭所有的mysql的防火墙

service iptables stop

 

我们在master上创建一个数据库,然后自动同步到从服务器上。然后在关闭从服务器的slaves功能。在插入区别语句

(1)在master mysql3.100上创建数据库。并且创建表

mysql> create database db_test;

Query OK, 1 row affected (0.00 sec)

mysql> use db_test;

Database changed

mysql> create table benet (id int(10),name varchar(10),address varchar(20));

Query OK, 0 rows affected (0.07 sec)

(2) 停掉两台从服务(3.101  3.102)

slave stop;

(3)然后在master (3.100)上插入内容。

    insert into benet values ('1','zhang','this_is_master');

(4)我们手动向两台从(3.101   3.102)服务器的benet表中插入内容

    192.168。3.101 操作以下命令

    use db_test;

    insert into benet values ('2','zhang','this_is_master');

    192.168.3.102 操作以下命令

    use db_test;

    insert into benet values ('3','zhang','this_is_master');

 

通过在客户端上查询,为两台从服务器的轮询效果

(5)测试写操作

在客户端上(3.150)插入一条数据

use db_test;

insert into benet values ('4','zhang','this_is_master');

 

但是在客户端查询不到,但是在master上查询到新数据,说明我们已经将数据写入到了master3.100)上

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!