mycat-3、使用mycat将mysql实现主从复制,读写分离

1、准备条件

mysql5.7版本
mycat1.6.7.5
java版本1.8
两台服务器
192.168.0.82(主)
192.168.0.19(从)

ps:mysql版本为8.0目前没有搭建成功,有的人说是mycat的lib文件夹中的mysql驱动问题,我换了之后还是没能搭建成功,只能回归版本5.7,如有搭建成功,欢迎指教。

2、mysql配置主从复制

192.168.0.82主服务器

1、修改my.ini文件,追加以下配置

# 主从复制
server-id=1 #设置server-id
log-bin=mysql-bin #开启二进制文件 
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
binlog_do_db=testdb 
#不同步数据库,除此之外都同步
#binlog-ignore-db = information_schema 
#binlog-ignore-db = mysql

2、重启mysql服务
3、创建同步账号

CREATE USER 'MySlave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'MySlave'@'%';
FLUSH PRIVILEGES;

4、查看集群状态

show master status;

在这里插入图片描述
记录file和position这两个字段,从服务器配置需要用到

192.168.0.19从服务器

1、配置my.ini文件

server_id=2
read_only=1
master_info_repository=TABLE
relay_log_info_repository=TABLE

#relay_log_recovery=1 #从机禁止写

#super_read_only=1 #从机禁止写

2、重启mysql服务
3、在mysql中执行以下命令

CHANGE MASTER TO MASTER_HOST='192.168.1.11',MASTER_PORT=3306,MASTER_USER='MySlave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=2090;

4、启动slave

start slave;

5、查看slave

show slave status

在这里插入图片描述
配置好之后在主库中操作表,验证从库中是否有改变即可

3、配置读写分离

mycat下载地址

修改mycat配置文件

service.xml

<?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">8066</property>
        </system>
        <user name="root">
                <property name="password">123456</property>
                <property name="schemas">testdb</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">testdb</property>
                <property name="readOnly">true</property>
        </user>
 
</mycat:server>

修改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"></schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="localhost1" database="testdb" />
        <!--
        <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="3"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="192.168.0.82" url="jdbc:mysql://192.168.0.82:3306?useSSL=false&amp;serverTimezone=UTC" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="192.168.0.19" url="jdbc:mysql://192.168.0.19:3306?useSSL=false&amp;serverTimezone=UTC" user="root" password="123456" />
                </writeHost>
                <!--
                <writeHost host="hostS1" url="localhost:3316" user="root"
                                   password="123456" />-->
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>
      
 
       
</mycat:schema>

启动

在这里插入图片描述
在此处管理员执行该命令,下列即为启动成功
在这里插入图片描述
高版本的Navicat可以直接连接mycat
在这里插入图片描述

4、验证

将两个服务器中时间调整为不同,在mycat中查询当前时间,来确认查询语句是在哪个服务器上面执行。
或者通过mysql的sql执行记录日志来验证。

附录:

参考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 上去。
多个readHost 可以配置权重,0-9字符,越大命中率越高

更多介绍参考官方文档

参考原文地址:
https://blog.csdn.net/u013792404/article/details/94167965

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值