读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。
目前较为常见的MySQL读写分离方式有:
第一种就是客户端内部实现自定义的基于TCP的数据协议,简称MySQL协议,但读写操作特别多,耗时大,如果在客户端直接由代码直接控制,那么就和这个主从环境强相关了,某个库挂掉了,也不好监测,所以直接用代码实现不太合适。
所以本次使用Mycat。数据端口:8066,管理端口:9066
如图中的代理服务器,就是中间件Mycat,同样需要遵循MySQL通信协议,配置Mycat可以:一主一从、一主多从、多主多从。
如图中的写操作就是主库,下面的读操作是两个从库,那么他们之间的同步就是需要主从复制,在上篇文章中有讲到。
Mycat功能强大,如果配置的一主多从,该主库挂掉,那么会将一个从库设置成供读操作的主库。
多主多从:Mycat后面多挂几套环境就行。
如果某个主库挂掉,则其相应的从库也就不能用,那么Mycat会自动切换到第二套环境,所以说读写分离有高可用,容灾能力,这一切都归功于Mycat。
首先要强调的是,读写分离的前提是有主从复制。
主从复制的配置:【点此查看】
先查看主从复制是否正常
条件:
master(centos7):192.168.131.129
slave(win10):192.168.31.27
1、JDK1.7版本以上(java -version检查jdk环境),因为Mycat是Java写的
检查环境
2、MySQL的root账户有远程访问权限
设置支持ip远程连接
mysql默认只能通过localhost访问,不能通过ip远程访问,主要考虑安全的问题。如果在集群分布式环境中单独部署mysql,就需要设置通过ip远程访问了
上面显示可以看到,mysql默认只支持localhost访问。
通过ip地址远程连接mysql如下:
mysql -h 172.20.10.3 -u root -p123456
安装Mycat:
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz(工具上传到linux,tar -zxvf解压)
解压放到/usr/local/mycat目录下
./mycat start启动服务,默认在8066和9066端口
配置Mycat账号信息:
USERDB是逻辑库,Mycat操作的就是这个逻辑库,逻辑库映射到具体的后端的库,有多个逻辑库的话用逗号隔开
vi mycat/conf/schema.xml
配置逻辑库和数据源、续写分离、分库分表信息等
balance:
“0”:不开启读写分离
“1”:全部的readHost和stand by writeHost参与select语句的负载
“2”:所有读操作随机在readHost和writeHost上分发
“3”:所有读请求随机分发到writeHost对应的readHost上执行
writeType=“0”:所有写操作发送到配置的第一个writeHost,第一个挂掉切换到还生存的第二个
writeHost
switchType:
“-1”:不自动切换
“1”:自动切换,根据心跳select user()
“2”:基于MySQL的主从同步状态决定是否进行切换 show slave status
9066端口登录示例:
8066端口示例
如图,这个之前说过是逻辑库,映射对应的主库