mysql读写分离原理及步骤

数据库每天都要承担的网站的数据更新,所以大量的读写任务都在一个机器上压力非常大。使用读写分离可以有效的缓解数据库压力。

读写分离要建立在主从复制的基础上,关于主从复制的搭建方法这里不再叙述,大家可以看博主其他文章。微笑

这里使用amoeba来实现mysql读写分离。

大概的一个原理图如下。都是centos6.5的系统 5台服务器。



这里使用两个从服务器承担读的任务,主服务器承担写的任务。
主服务器写入数据,两个从服务器复制,然后客户端读的时候在从服务器上进行。
两个从服务器还能起一个负载均衡的作用。

这里是准备好的了主从关系。


下面开始。

amoeba上的配置:

amoeba是给予jdk1.5开发的,建议使用1.5或者1.6的环境,不要太高。

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html 

这个是java环境包下载的网站。

系统自带的有点高,要把java的环境重新部署一下。


下面是安装jdk环境的步骤



 mv jdk-6u45-linux-x64.bin /usr/local/

 cd /usr/local/

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

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

mv jdk1.6.0_45 jdk1.6


vim /etc/profile

末尾添加

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

java -version

可以看到版本号已经成了1.6的了。



---------------------------------------------------------------------------

在主mysql上面建一个授权用户稍后给amoeba使用。

grant all on *.* to aaa@'192.168.43.%' identified by '123456';

-


----------------------------------------------------------------------

配置amoeba

amoeba的包大家可以去网上下载。

 mkdir /usr/local/amoeba

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

cd /usr/local/amoeba/

----------------------------------------------------------------------------------

vim conf/dbServers.xml 

26行左右


----------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------

43行


-------------------------------------------------------------------------------------------------

63行



保存。


-------------------------------------------------------------------------------------------

vim conf/amoeba.xml 


-----------------------------------------------------------------------------------------------------------

在115行左右







             这里调用了上一个文件里的定义的服务器名


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


如果遇到这个报错

The stack size specified is too small, Specify at least 160k

Could not create the Java virtual machine.


解决方法:

vim/usr/local/amoeba/bin/amoeba

58行最后一个数字改大 这改成了160



保存然后启动。

------------------------------------------------------------------------------------

好了测试效果。

打开一个服务器作客户端

 yum install -y mysql  

mysql -uamoeba -p123456 -h 192.168.43.60 -P 8066  

使用的用户是刚才在配置文件指定的用户和密码  amoeba端口是8066


主mysql上创建个数据库和表

 create database aa;

 use aa;

create table aa (id int(10),name varchar(10));

关掉个从mysql的IO线程不然会复制数据看不出来效果

第一个从服务器上:

mysql> stop slave;

mysql> insert into aa values ('1','zhang');   
Query OK, 1 row affected (0.01 sec)


--------------------------------

第二个从服务器上:

mysql> stop slave;

mysql> insert into aa values ('2','wang');   
Query OK, 1 row affected (0.01 sec)

客户端上查看效果

use aa;  #切换数据库然后查看表内容发现里面一次是slave1的内容一次是slave2的内容。负载均衡的作用



--------------------------------------------

在客户端写入一下

mysql> insert into aa values ('3','master');
Query OK, 1 row affected (0.02 sec)


然后去服务器上查表内容可以发现主服务上有写入的内容 其他服务器上没 证明写的操作是在主服务器上的。

如果从服务器开着主从复制那么就会同步数据。

读写分离,完毕。









发布了61 篇原创文章 · 获赞 38 · 访问量 22万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览