前置环境
事先准备3台虚拟机,其配置如下
- 主数据库(master)ip:192.168.126.151,装有Percona5.6.51
- 从数据库(slave)ip:192.168.126.152,装有Percona5.6.51
- mycat服务(mycat):192.168.126.153,装有 mycat
另外,以上3台服务器均需配置jdk(1.8)
?
配置主从
master
master服务器上,使用vim /etc/my.cnf 打开mysql配置文件,加入
server-id=1
log-bin=mysql-bin
重启mysql后查看binlog名字
service mysql restart
show master status
可以看到
slave
与master一样,使用vim /etc/my.cnf 并添加
server-id=2
log-bin=mysql-bin
然后在mysql中执行如下语句
CHANGE MASTER TO MASTER_HOST="192.168.126.151",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000002",
MASTER_LOG_POS=120
其中file和pos的值要与上面show master status 得到的一样。
执行start slave 开启服务,并使用show master status 查看,如出现下图,则成功完成主从配置 这时我们修改master,则slave也会出现相应更改。
注意:如果主从是由同一台虚拟机克隆而来的话,server-uuid会一样,这时需要删除其中一台虚拟器的/var/lib/mysql/auto.cnf 文件,并进行重启,这样mysql会重新生成server_uuid
?
读写分离
读写分离即读和写操作在不同数据库上完成。通过将read和write分开,可以有效减低获取锁冲突的几率。
但是Dao层不会关心数据库操作具体会由哪个库执行,因此,我们需要一个MySQL Proxy来完成具体数据库的分派。
而mycat就是这个MySQL Proxy。
图片来源:码农翻身
配置mycat
进入mycat安装目录./mycat/conf ,会有schema.xml和server.xml。
在server.xml 加入
<user name="root">
<property name="password"></property>
<property name="schemas">mycat</property>
</user>
修改schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100">
<table name="test1" dataNode="dn1" />
</schema>
<dataNode name="dn1" dataHost="master" database="test" />
<dataHost name="master" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
>
<writeHost host="hostM1" url="192.168.126.151:3306" user="root" password="dj123456">
<readHost host="hostM2" url="192.168.126.152:3306" user="root" password="dj123456"/>
</writeHost>
</dataHost>
</mycat:schema>
其中shema配置文件有些概念需要理清,可参考下图
测试
启动mycat服务
mycat start
mycat status
如果启动不成功,可以在./mycat/logs/wrapper.log 中查看启动日志
连接上接mycat插入数据
主库已出现数据 而从库配置为readhost,不会出现数据
|