MyCat配置MySQL读写分离--入门

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)

http://www.mycat.io/

什么是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 上去。

 

更多介绍参考官方文档

 

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值