条件:
master(虚拟机centos7,NAT模式,固定ip):192.168.131.129
slave(win10,路由器局域网,DHCP协议):192.168.31.27
建议安装centos7
[强调]:我们可能会遇到今天配置好了,明天就出错了,因为我们用的ip都是DHCP都是动态分配的,它是有过期时间的,过期以后这个ip就会重新分配。像我们这边演示用的centos7是NET模式下写的固定的ip,这个ip是不会变的,但是win10的ip直接连的是局域网的路由器,它是DHCP这个ip是会变的。所以我们如果遇到这种之前是通的,现在不通的问题,可以检查下ip是否变了,然后去改ip就可以了。
读写分离基于主从复制,查看主从复制状态

MyCat的运行需要java环境,需要JDK1.7版本以上,执行java -version检查JDK环境

客户端的请求都是通过代理MyCat最终发送到远端的MySQL上,一般MySQL和MyCat都是不在一台机器上的,这里就涉及到了数据库的远程访问连接。
我们可以拿root进行连接,也可以创建新的用户进行连接。root用户默认是localhost,只能本地连接,不支持远程连接

所以需要root远程连接的权限打开。%表示允许任意地址连接,如果缩小权限,写成MyCat所在机器的ip地址就可以,用root连接MySQL服务器,grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;打开远程权限后再重启服务service mysqld restart
通过ip地址远程连接mysql使用命令mysql -h 192.168.131.129 -u root -p123456
安装lrzsz,用于windows和Linux传输文件(xftp也行)

用rz命令将MyCat包传输到Linux


同样地,要把Linux上的文件下载到Window上sz+文件路径
解压MyCat包放到合适的目录下,可以放到/usr/local/mycat下,tar -zxvf

解压以后就可以看到解压的目录里面有mycat

mycat/bin:放的是可执行文件;mycat/conf:放的MyCat的配置文件;mycat/logs:放的MyCat的日志文件

wrapper.log:记录启动过程中遇到的错误mycat.log:记录运行过程中遇到的错误由于我们是直接解压的,没有安装,为了不用手动指定mycat的路径,我们 在/usr/bin下建立软连接,连接用户目录下的mycat和我们解压路径下的mycat

这样就不用指定路径,直接使用mycat

mycat/conf:放的MyCat的配置文件
server.xml配置登录MyCat的账号信息,功能很强大,还可以配置白名单黑名单,限制客户的连接等


schema.xml配置逻辑库与数据源、读写分离、分库分表等
schema.xml配置以下三点:


如果slave有问题,master是正常,就会在master上做读和写操作
如果master有问题,slave是正常,此时slave是没法单独使用的,它会在多主多从的配置中找下一套主从配置来使用
如果主从都正常,master做写操作,slave做读操作
查看配置文件mycat/conf/schema.xml

启动MyCat

查看服务是否正常

mycat/schema.xml中备份的主库没有结束标签

配置好后重启MyCat程序

如果配置上有问题,启动服务看不出来,应该查看mycat/logs/warpper.log,记录了mycat启动过程中的错误,vim + logs/warpper.log

mycat/schema.xml中读库的端口出错

配置好后重启MyCat程序

同样地,配置上有问题,启动服务看不出来,查看mycat/logs/warpper.log,记录了mycat启动过程中的错误

我们看到心跳不成功了,就应该判断是网络原因,或者是ip:port配置原因,于是我们看到了3309端口,就知道是配置的端口错误
开启mycat后台服务

在Linux Shell下登录mycat的9066端口(使用mycat/conf/server.xml中配置的登录用户名和密码登录)
登录mycat后也是进入了一个MySQL Shell,monitor表示状态监控

show @@help可以显示MyCat的管理端支持的命令

show @@database查看逻辑库

show @@datanode查看逻辑节点和真实库之间的映射关系
show @@datasource查看数据源

在Linux Shell下登录mycat的8066端口(使用mycat/conf/server.xml中配置的登录用户名和密码登录)
OpenCloundDB表示我们看到的是一个云状数据库,云后面是如何提供的库表的服务能力,我们是不知道的。mycat就是云DB,把后端所有的细节给客户端隐藏了,客户端只需要去处理代理服务器上的DB就可以了。可以看作一个反向代理服务器

查看数据库

这个逻辑库USERDB对应的就是真实库mytest

我们作为客户端在代码上操作数据库的时候,操作的都是8066,操作的数据库是USERDB,而不是后台真实的数据库。
按照上面的操作我们读写分离就正常配置好了

上面这个操作是在从库(Win10下的MySQL)上运行的,如果做update操作或者insert操作是在主库(Linux下的MySQL)上进行操作的,我们应该如何去验证呢?
查询日志是可以把所有操作都记录下来的
打开windows从库上的general_log


在Linux也打开主库的general_log

我们现在登录MyCat 8066数据端口,作为客户端代码操作也是8066端口逻辑库下面的user表

在Linux下的master服务器查看general_log,我们只看见了mycat发送的心跳包,并没有看见查询user表的SQL

在windows下的slave服务器中查看general_log,看到了mycat发送的查询user表的SQL

没有问题,现在读操作是正确发送给了slave
我们现在登录MyCat 8066数据端口,给user表insert一条数据

在Linux下的master服务器查看general_log,我们看见了insert数据的SQL,所以写是在主库写

在windows下的slave服务器中查看general_log,没有发现insert数据的SQL

没有问题,写操作正确发送给了master
这样我们就验证了我们主从复制是确实没有问题,是生效的,我们所有的写都是在master上进行的,读都是在slave上进行的,这就是读写分离,比我们单个主机即做写操作又做读操作肯定能提升它的能力。
我们在mycat/conf/schema.xml中配置的是多住多从,M1挂了,读写操作会全部转发到M2
在我们当前环境中,就是Linux上的MySQL Server挂了,所有的读写操作都会转发给Windows上的MySQL Server

关闭linux上的mysqld服务,相当于关闭了master

我们现在登录MyCat 8066数据端口,对user表分别读写操作

查看我们多主多从中备用系统的general_log,即Windows上的MySQL Server的general_log

可以看见,由于master挂了,读写操作都被转发到了备用的Windows上的MySQL Server,证明容灾没有问题