Mysql的读写分离
缺点 并没有实现mycat的百分百可用
mycat的下载地址:http://dl.mycat.org.cn/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
1.安装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
1.配置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>
2.启动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的端口 ps -ef | grep mycat
2.登录mycat
#登录mycat的管理端口 -h 端口 必须填写本机端口
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; 初始化状态
如果是-1 使用window测试 2.查看防火墙 3.授权
#连接数据端口(登录mycat的主机,mycat在192.168.126.161)
mysql -uroot -p123456 -h127.0.0.1 -P8066
**3.测试读写分离情况**
```xml
#修改日志打印情况
cd …/conf/
#查看日志情况
tail -f wrapper.log
#可以复制一个会话
show databases;
use TESTDB;
show tables;
如果日志没打印 刷新服务
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020071221263254.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2NDQxNTIw,size_16,color_FFFFFF,t_70)