要想实现读写分离,一定要是基于主从复制而实现的
- 系统环境
系统环境:centos7.0
mycat的版本:1.6
MySQL主机:192.168.126.143(mycat也使用这台主机)
MySQL从机:192.168.126.148
mycat的下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
- 安装mycat
#查询有没有安装mycat
find / -name mycat
#因为mycat是基于java语言编写的,所以一定要配置jdk的环境
#解压jdk
tar -zxvf jdk-8u221-linux-x64.tar.gz
#配置环境变量
[root@localhost home]# ls
ange jdk1.8.0_221 jdk-8u221-linux-x64.tar.gz
[root@localhost home]# mv jdk1.8.0_221/ jdk8
[root@localhost home]# mv jdk8 /usr/
[root@localhost home]# ls
ange jdk-8u221-linux-x64.tar.gz
[root@localhost home]# cd /usr/
[root@localhost usr]# ls
bin etc games include jdk8 lib lib64 libexec local sbin share src tmp
[root@localhost usr]# vi /etc/profile
#加到最末尾
JAVA_HOME=/usr/jdk8
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
[root@localhost usr]# source /etc/profile
[root@localhost usr]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
[root@localhost usr]#
#安装mycat
#报错
[root@localhost usr]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz-bash: wget: 未找到命令
#安装wget
yum install wget
#继续执行下载命令
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#加压下载好的压缩文件
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
#mycat的目录结构
-lib jar包存放的目录
-conf
-schema.xml
-server.xml
-rule.xml
-log4j2.xml
-logs
-mycat.log
-wrapper.log
-bin
-mycat.sh
配置mycat
- 先配置server.xml
<!-- 有读写权限的用户(最高权限的用户) -->
<user name="root">
<property name="password">123456</property>
<!-- 对应schema.xml的逻辑数据库名称 -->
<property name="schemas">TESTDB</property>
</user>
<!-- 只有只读权限 -->
<user name="user">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
-
schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!-- 里面的tables是实现分库分表的 --> </schema> <dataNode name="dn1" dataHost="localhost1" database="youruike" /> <!-- 1. balance="0",所有读操作都发送到当前可用的writeHost上。 2. balance="1",所有读操作都随机的发送到readHost。 3. balance="2",所有读操作都随机的在writeHost、readhost上分发。 4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3没有 1. writeType="0", 所有写操作都发送到可用的writeHost上。 2. writeType="1",所有写操作都随机的发送到readHost。 3. writeType="2",所有写操作都随机的在writeHost、readhost分上发 --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!-- 心跳检测,检测主机和从机是否正常 --> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="123456"> <readHost host="hostS2" url="192.168.126.148:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
-
启动mycat
[root@localhost bin]# ./mycat start console Starting Mycat-server... [root@localhost bin]# ./mycat status console Mycat-server is running (11067). [root@localhost bin]# netstat -ntlp -bash: netstat: 未找到命令 [root@localhost bin]# yum -y install net-tools [root@localhost bin]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 11069/java tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1030/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1188/master tcp6 0 0 :::1984 :::* LISTEN 11069/java tcp6 0 0 :::8066 :::* LISTEN 11069/java tcp6 0 0 :::9066 :::* LISTEN 11069/java tcp6 0 0 :::3306 :::* LISTEN 1742/mysqld tcp6 0 0 :::39666 :::* LISTEN 11069/java tcp6 0 0 :::22 :::* LISTEN 1030/sshd tcp6 0 0 :::41304 :::* LISTEN 11069/java tcp6 0 0 ::1:25 :::* LISTEN 1188/master
-
登录mycat查看配置内容
#登录mycat的管理端口 mysql -uroot -p123456 -h127.0.0.1 -P9066 #查看帮助手册 show @@help; #查看读写分离情况 show @@datasource; #查看心跳检测 show @@heartbeat; RS_CODE 状态: OK_STATUS = 1;正常状态 ERROR_STATUS = -1; 连接出错 TIMEOUT_STATUS = -2; 连接超时 INIT_STATUS = 0; 初始化状态 #连接数据端口(登录mycat的主机,mycat在192.168.126.161) mysql -uroot -p123456 -h127.0.0.1 -P8066
-
测试读写分离情况
#修改日志打印情况 <Loggers> <!--<AsyncLogger name="io.mycat" level="info" includeLocation="true" additivity="false">--> <!--<AppenderRef ref="Console"/>--> <!--<AppenderRef ref="RollingFile"/>--> <!--</AsyncLogger>--> <asyncRoot level="debug" includeLocation="true"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile"/> </asyncRoot> </Loggers> #查看日志情况 tail -f wrapper.log