1、MySQL主从配置
主数据库:192.168.8.104 ,从数据库:192.168.8.105
参考 https://blog.csdn.net/u013792404/article/details/91591585
2、下载MyCat mycat-1.6.7 (使用mycat需要先安装JDK)
什么是MYCAT
- 一个彻底开源的,面向企业应用开发的大数据库集群
- 支持事务、ACID、可以替代MySQL的加强版数据库
- 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
- 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
- 一个新颖的数据库中间件产品
3、创建mycat用户
useradd mycat
chown mycat:mycat -R mycat-1.6.7
配置环境变量: vim /etc/profile
4、修改配置文件
1、修改 conf/schema.xml 配置数据库相关内容
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="BOOK" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="localhost1" database="book" />
<!--
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" /> -->
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="192.168.8.104" url="192.168.8.104:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="192.168.8.105" url="192.168.8.105:3306" user="root" password="root" />
</writeHost>
<!--
<writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" />-->
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>
2、修改 conf/server.xml 配置MyCat用户名和密码
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="useHandshakeV10">1</property>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
<property name="serverPort">3307</property>
。。。。。
。。。。。
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">BOOK</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="readonly">
<property name="password">123456</property>
<property name="schemas">BOOK</property>
<property name="readOnly">true</property>
</user>
</mycat:server>
3、启动MyCat
bin下面文件都加上执行权限
[mycat@CentOS-04 mycat-1.6.7]$ cd /usr/local/mycat-1.6.7/bin/
[mycat@CentOS-04 bin]$ chmod +x *
[mycat@CentOS-04 bin]$ ll
total 384
-rwxr-xr-x. 1 mycat mycat 3567 Jun 13 09:56 dataMigrate.sh
-rwxr-xr-x. 1 mycat mycat 1225 Jun 13 09:56 init_zk_data.sh
-rwxr-xr-x. 1 mycat mycat 15714 Jun 13 09:56 mycat
-rwxr-xr-x. 1 mycat mycat 2941 Jun 13 09:56 rehash.sh
-rwxr-xr-x. 1 mycat mycat 2496 Jun 13 09:56 startup_nowrap.sh
-rwxr-xr-x. 1 mycat mycat 140198 Jun 13 09:56 wrapper-linux-ppc-64
-rwxr-xr-x. 1 mycat mycat 99401 Jun 13 09:56 wrapper-linux-x86-32
-rwxr-xr-x. 1 mycat mycat 111027 Jun 13 09:56 wrapper-linux-x86-64
[mycat@CentOS-04 bin]$
启动
查看是否启动成功:
查看日志:
cd /usr/local/mycat-1.6.7/
没有logs目录自己创建
tail -100f ./wrapper.log
tail -100f ./logs/wrapper.log
tail -100f ./logs/mycat.log
4、连接测试
![]() | ![]() |
插入数据后,104和105数据库中都有数据。
![]() | ![]() |
用readonly用户登陆, 插入数据报错,(uer readonly)
在实际项目开发时,只需要将原本配置数据库的url/username/password 换成 mycat 即可。
6、相关配置
参考MyCat官方文档: MyCat权威指南 http://www.mycat.io/document/mycat-definitive-guide.pdf
dataHost 标签的相关属性
7.6.4 balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
均衡。
3. balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
4. balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
7.6.5 writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType 属
性
- -1 表示不自动切换。
- 1 默认值,自动切换。
- 2 基于 MySQL 主从同步的状态决定是否切换
7.6.8 switchType 属性
-1 表示不自动切换
1 默认值,自动切换
2 基于 MySQL 主从同步的状态决定是否切换
心跳语句为 show slave status
3 基于 MySQL galary cluster 的切换机制(适合集群)(1.4.1)
心跳语句为 show status like ‘wsrep%’
7.7.1 writeHost 标签、readHost 标签
这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指
定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。
78
在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,
那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测
到,并切换到备用的 writeHost 上去。
更多介绍参考官方文档