MySQL读写分离的概述
读写分离工作原理
为什么要读写分离
实现读写分离的方式
常见的中间件程序


什么是MyCAT
MyCAT官方地址


MyCat服务安装与配置
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
total 17152
-rw-------. 1 root root 1742 Jun 12 16:54 anaconda-ks.cfg
-rw-r--r-- 1 root root 17558357 Feb 22 16:20 Mycat-server-1.6.7.1-release-20190213150257-linux.tar.gz
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
[root@ShuaiGuo local]
bin etc games include lib lib64 libexec mycat sbin share src
[root@ShuaiGuo local]
[root@ShuaiGuo local]
bin catlet conf lib version.txt
[root@ShuaiGuo local]
[root@ShuaiGuo local]
Changing password for user mycat.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@ShuaiGuo local]
[root@ShuaiGuo local]
[root@ShuaiGuo local]
total 12
drwxr-xr-x 2 mycat mycat 190 Jun 15 18:53 bin
drwxrwxrwx 2 mycat mycat 6 Feb 13 14:46 catlet
drwxrwxrwx 4 mycat mycat 4096 Jun 15 18:53 conf
drwxr-xr-x 2 mycat mycat 4096 Jun 15 18:53 lib
-rwxrwxrwx 1 mycat mycat 185 Feb 13 15:02 version.txt
[root@ShuaiGuo local]
[root@ShuaiGuo ~]
[root@ShuaiGuo bin]
total 384
-rwxr-xr-x 1 mycat mycat 3567 Feb 13 14:46 dataMigrate.sh
-rwxr-xr-x 1 mycat mycat 1225 Feb 13 14:46 init_zk_data.sh
-rwxr-xr-x 1 mycat mycat 15714 Feb 13 15:03 mycat
-rwxr-xr-x 1 mycat mycat 2941 Feb 13 14:46 rehash.sh
-rwxr-xr-x 1 mycat mycat 2496 Feb 13 14:46 startup_nowrap.sh
-rwxr-xr-x 1 mycat mycat 140198 Feb 13 15:03 wrapper-linux-ppc-64
-rwxr-xr-x 1 mycat mycat 99401 Feb 13 15:03 wrapper-linux-x86-32
-rwxr-xr-x 1 mycat mycat 111027 Feb 13 15:03 wrapper-linux-x86-64
[root@ShuaiGuo bin]
[root@ShuaiGuo ~]
[root@ShuaiGuo mycat]
[root@ShuaiGuo mycat]
[root@ShuaiGuo mycat]
[root@ShuaiGuo mycat]
[root@ShuaiGuo bin]
Running Mycat-server...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
wrapper | JVM exited while loading the application.
jvm 1 | wrapper | Unable to start JVM: No such file or directory (2)
wrapper | Launching a JVM...
wrapper | JVM exited while loading the application.
jvm 2 | wrapper | Unable to start JVM: No such file or directory (2)
^Cwrapper | INT trapped. Shutting down.
wrapper | <-- Wrapper Stopped
[root@ShuaiGuo bin]

Mycat 需要安装JDK 1.7 或者以上版:

[root@ShuaiGuo ~]
第二步:新建/usr/java文件夹,将/jdk-8u20-linux-x64.tar.gz解压到该目录中
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
total 157108
-rw-------. 1 root root 1742 Jun 12 16:54 anaconda-ks.cfg
-rw-r--r-- 1 root root 160872342 Jun 27 2015 jdk-8u20-linux-x64.tar.gz
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
JAVA_HOME=/usr/java/jdk1.8.0_20
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
/etc/profile.d/java.sh
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
[root@ShuaiGuo ~]

MyCat服务启动与启动设置
MyCAT在Linux中部署启动时,首先需要在Linux系统的环境变量中配置MYCAT_HOME,操作方式如下:
[root@ShuaiGuo ~]
MYCAT_HOME=/usr/local/mycat
PATH=$MYCAT_HOME/bin:$PATH
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
Usage: /usr/local/mycat/bin/mycat { console | start | stop | restart | status | dump }
[root@ShuaiGuo ~]
如果是在多台Linux系统中组建的MyCAT集群,那需要在MyCAT Server所在的服务器上配置对其他IP和主机名的映射,配置方式如下:
mycat的用户账号和授权信息是在conf/server.xml文件中配置
[root@ShuaiGuo ~]# cd /usr/local/mycat/conf/
[root@ShuaiGuo conf]# vim server.xml
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
</system>
<user name="zhoushuai">
<property name="password">123456</property>
<property name="schemas">test</property>
</user>
<user name="shuaishuai">
<property name="password">123456</property>
<property name="schemas">test</property>
<property name="readOnly">true</property>
</user>

编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息如下:
[root@ShuaiGuo conf]# cp schema.xml schema.xml.bak #备份原文件。
[root@ShuaiGuo conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
</schema>
<dataNode name="dn1" dataHost="dbHost" database="test" />
<dataHost name="dbHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="ShuaiJhou" url="192.168.31.62:3306" user="mycat"
password="123456">
</writeHost>
<writeHost host="ZhouShuai" url="192.168.31.63:3306" user="mycat"
password="123456" />
</dataHost>
</mycat:schema>

经过以上两个步骤的配置,就可以到/usr/local/mycat/bin 目录下执行 ./mycat start,即可启动mycat服务!
[root@ShuaiGuo conf]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
Mycat-server is already running.
[root@ShuaiGuo conf]# /usr/local/mycat/bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@ShuaiGuo conf]# cat /usr/local/mycat/logs/wrapper.log


在主从数据库上:授权给mycat登陆数据库使用的帐号
[root@ShuaiZhou ~]# mysql -uroot -p123456
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "123456";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
启动服务Mycat服务:
[root@ShuaiGuo ~]
Starting Mycat-server...
Mycat-server is already running.
[root@ShuaiGuo ~]
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[root@ShuaiGuo ~]
INFO | jvm 1 | 2019/06/15 22:51:57 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO | jvm 1 | 2019/06/15 22:51:57 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
INFO | jvm 1 | 2019/06/15 22:51:57 |
INFO | jvm 1 | 2019/06/15 22:51:58 | log4j 2019-06-15 22:51:58 [./conf/log4j.xml] load completed.
INFO | jvm 1 | 2019/06/15 22:51:58 | MyCAT Server startup successfully. see logs in logs/mycat.log
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
tcp6 0 0 :::8066 :::* LISTEN
tcp6 0 0 192.168.31.65:8066 192.168.31.14:58150 ESTABLISHED
tcp6 0 0 192.168.31.65:8066 192.168.31.14:58154 ESTABLISHED
tcp6 0 0 192.168.31.65:8066 192.168.31.14:58156 ESTABLISHED
[root@ShuaiGuo ~]
[root@ShuaiGuo ~]
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.8-mycat-1.5-RELEASE-20160301083012 MyCat Server (OpenCloundDB)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>


测试读写分离

