读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。
目前较为常见的MySQL读写分离方式有:
程序代码内部实现
引入中间代理层方法:
我们这里也就是实验通过Mycat
代理进行数据库读写,实现读写分离在不同的服务其上。
master(ubuntu): 192.168.200.152
slave(win10):192.168.200.1
1、安装Mycat
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz(tar -zxvf解压)
建立链接,使得能够直接在任何路径下使用 mycat指令
root@ubuntu:/home/jyhlinux/mycat# ln -s /home/jyhlinux/mycat/bin/mycat /usr/bin/mycat
在 /home/jyhlinux/mycat/conf/schema.xml 文件中配置读写分离、分库分表等内容
2、配置文件设置
mycat 账号密码存储在**/home/jyhlinux/mycat/conf/server.xml** 中为:
账号:root
密码:123456
USERDB表示是逻辑库
<user name="root">
<property name="password">123456property>
<property name="schemas">USERDBproperty>
user>
<user name="user">
<property name="password">userproperty>
<property name="schemas">USERDBproperty>
<property name="readOnly">trueproperty>
user>
/home/jyhlinux/mycat/conf/schema.xml:配置逻辑库和数据源、读写分离、分库分表信息等,主要配置的内容是逻辑库和逻辑表,数据节点以及物理数据库信息
DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"
dataNode="dn1">schema>
<dataNode name="dn1" dataHost="node1" database="mytest" />
<dataHost name="node1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
<heartbeat>select user()heartbeat>
<writeHost host="192.168.200.152" url="192.168.200.152:3306"
user="root"
password="123456">
<readHost host="192.168.200.152" url="192.168.200.152:3306"
user="root" password="123456" />
writeHost>
<writeHost host="192.168.200.152" url="192.168.200.152:3306"
user="root"
password="123456" />
dataHost>
mycat:schema>
这里的配置是一个多主的配置
注意主库和从库都要设置能够被远程连接,这里实验时候从库忘记设置了:
参数解读
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
3、端口
8066:数据端口
9066:管理端口
注意:主从库都要是mysql5.7,若不是,则mycat无法连接上去
./mycat start
启动服务,默认在8066和9066端口
logs/wrapper.log 是启动日志
logs/mycat.log 是运行日志
下图表示主从库连接成功
show @@help; 查看帮助,有哪些变量
查看mycat 的数据端口8066
查看逻辑数据库:
验证主库写,从库读的方法:采用通用日志,具体方法如下:
从库设置通用日志开启:set global general_log=on;
日志文件在目录:C:\ProgramData\MySQL\MySQL Server 5.7\Data 下
主库设置通用日志开启
日志文件在: /var/lib/mysql/ubuntu.log
然后在mycat:8066 (数据端口)中进行sql的读操作
在主库中查看日志发现没有查询记录
在从库查看日志,发现了查询的记录
此时测试插入(写)数据的sql:
在主库日志查看到插入的记录
主库停止服务,来查看是否切换到备用主库(win):
sudo systemctl stop mysql
观察可以发现读写都走备用主库(win:192.168.200.1)了