Mycat实现MySQL读写分离的配置例子
环境
MySQL版本:
mysql> select version();
+————+
| version() |
+————+
| 5.6.30-log |
+————+
1 row in set (0.05 sec)
确保主从已经同步
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
QQ20160627094913
安装mycat
在192.168.10.252上操作
cd /soft
wget https://github.com/MyCATApache/Mycat-download/raw/master/1.4.1-DEV/Mycat-server-1.4.2-20160613220038-linux.tar.gz
tar xf Mycat-server-1.4.2-20160613220038-linux.tar.gz
[root@db01 soft]# mkdir -p /application
[root@db01 soft]# mv mycat /application/
[root@db01 soft]# ll /application/mycat/
total 24
drwxr-xr-x. 2 root root 4096 Jun 7 13:53 bin
drwxrwxrwx. 2 root root 4096 Oct 20 2015 catlet
drwxrwxrwx. 2 root root 4096 Jun 7 13:53 conf
drwxr-xr-x. 2 root root 4096 Jun 7 13:53 lib
drwxrwxrwx. 2 root root 4096 Oct 20 2015 logs
-rwxrwxrwx. 1 root root 211 Jun 13 2016 version.txt
[root@db01 soft]# source /etc/profile
[root@db01 soft]# tail -1 /etc/profile
export PATH=/application/mycat/bin:$PATH
安装java环境
在192.168.10.252操作
下载JDK
wget http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.tar.gz
tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1.8.0_60 /application/jdk
设置java的环境变量
echo ‘export JAVA_HOME=/application/jdk’>>/etc/profile
echo ‘export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib’ >>/etc/profile
echo ‘export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin’ >>/etc/profile
. /etc/profile
[root@db01 soft]# java -version
java version “1.8.0_60”
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
提示:jdk至少要1.7的版本
创建管理用户
主库上对web用户授权如下:
grant insert,delete,update,select on web.* to web@’192.168.10.%’ identified by ‘123456’;
从库上对web用户授权如下:
提示:由于主库和从库是同步复制的,所以从库上的web用户会自动和主库的一致,即无法实现只读select的授权
revoke insert,update,delete on web.* from web@’192.168.10.%’;
配置mycat
修改server.xml,
Source code
注意:
1、这里配置的是可以连接主库的两个用户
用户:web 密码: 123456 给予此用户web数据库增删改查的权限。
用户:web_r 密码:123456 给予此用户web数据库读的权限。
2、这里的web,不一定是你数据库上的真实库名,可以任意指定,只要接下来和schema.xml的配置文件的库名统一即可
修改schemaxml
Source code
<table name="hotnews" primaryKey="ID" dataNode="dn1,dn2,dn3"
rule="mod-long" />
<table name="employee" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile">
<childTable name="orders" primaryKey="ID" joinKey="customer_id"
parentKey="id">
<childTable name="order_items" joinKey="order_id"
parentKey="id" />
<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
parentKey="id" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<writeHost host="hostM1" url="192.168.10.230:3306" user="web"
password="123456">
<readHost host="hostS1" url="192.168.10.229:3306" user="web"
password="123456" />
?xml:namespace>?xml>
需要配置的位置:
balance=”1″ writeType=”0″ switchType=”1″
balance
1、balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehostle .
2、balance=1 全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1àS1,M2àS2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。
3、balance=2 所有读操作都随机的在readhost和writehost上分发
writeType
负载均衡类型,目前的取值有3种:
1、writeType=”0″, 所有写操作发送到配置的第一个writeHost。
2、writeType=”1″,所有写操作都随机的发送到配置的writeHost。
3、writeType=”2″,不执行写操作。
switchType
1、switchType=-1 表示不自动切换
2、switchType=1 默认值,自动切换
3、switchType=2 基于MySQL 主从同步的状态决定是否切换
启动mycat
[root@wohong bin]# ./mycat console
Running Mycat-server…
wrapper |