002 mycat使用统一管理 mysql 主从复制 一主一从 多主多从 读写分离环境

1. 一主一从 启动

1.1 下载配置

凡是学习新技术,借鉴博主的文章可以快速入门,但是,最新最全的文档总是在官方文档

首先,从官网下载 https://github.com/MyCATApache/Mycat-download

下载解压好文件后,可以放在/usr/local/路径下,我这边习惯放在自己新建文件夹/app/路径下

1.2 逻辑库配置:

配置server.xml

可以理解成mycat 就是一个巨型数据库 , 默认提供了下面的两个用户,root , user

 
  	<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="user">
                <property name="password">user</property>
				<!-- 数据库 -->
                <property name="schemas">TESTDB</property>
				<!-- 只读 -->
                <property name="readOnly">true</property>
        </user>

在使用之前需要搭建好MySQL 主从复制环境 ,可以看 MySQL 主从复制环境 docker 快速搭建教程

修改scheme.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
		<!--  设置逻辑库   , schema name 属性就是mycat 的逻辑库  指定dataNode -->
        <schema name="TESTDB" dataNode="dn1" checkSQLschema="false" sqlMaxLimit="100">
        </schema>
        <!--  设置数据节点 ,  指定dataHost 在下面配置的  database 就是具体数据库中指向的库-->
        <dataNode name="dn1" dataHost="host1" database="TESTDB" />
        <!--  设置数据访问 ,  指定连接 数 与负载均衡-->
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <!--  设置心跳监测 ,-->
                <heartbeat>select user()</heartbeat>
            <!--  设置写库 相关的访问参数-->
                <writeHost host="hostM1" url="localhost:3306" user="root"
                                   password="chennewtoo_">
                        <!-- can have multi read hosts -->
            <!--  设置读库 相关的访问参数  这里初步是一主一从 所以配置一个即可-->
                        <readHost host="hostS2" url="localhost:3307" user="root" password="chennewtoo_" />
                </writeHost>
        </dataHost>
</mycat:schema>


其中关键一点 , 负载均衡,一般都是 设置为 balance=1 , balance = 3
在这里插入图片描述

1.3 启动

然后在bin/mycat console 启动 看到打印successful 就成功,其他错误,如数据库不存在,连接不存在,检查具体的数据库中是否存在库与连接参数是否正确

1.4 验证连接

mycat 使用Java 写的,在启动完成后会暴露端口,与mysql相同的连接方式,其端口有两个:

2. 双主双从 启动

单主单从,虽然能够分担读操作的压力,但是不能排除单点故障,因此还是要做双主的主备自动切换

2.1 配置参数

首先,需要把数据库配置成为双主双从环境,可以看 MySQL 主从复制搭建 双主双从 主从切换 环境搭建

修改scheme.xml


<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" dataNode="dn1" checkSQLschema="false" sqlMaxLimit="100">
        </schema>
        <dataNode name="dn1" dataHost="host1" database="TESTDB" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="localhost:3306" user="root"
                                   password="chennewtoo_">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS1" url="localhost:3307" user="root" password="chennewtoo_" />
                </writeHost>
                <!--  新增一个写节点 与对应的读节点 -->
                <writeHost host="hostM2" url="localhost:33060" user="root"
                                   password="chennewtoo_">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="localhost:33070" user="root" password="chennewtoo_" />
                </writeHost>

        </dataHost>

</mycat:schema>


同时这里也讲述以下这两个参数 :

  • writeType=“0”
  • switchType=“1”

在这里插入图片描述

看到这里应该清楚,mycat 的配置逻辑其实很简单,增加对应的节点与数据库对应上即可

2.2 启动验证

启动mycat
同样使用bin/mycat console 启动后,连接8066端口mycat
插入数据后,登录其他库,查看数据同步情况,

验证主备切换
将3306端口关闭后,插入,查询数据钧正常
可以使用 insert into table values(@@hostname) 知道当前的写库是哪个 , 然后 , 将 3306 服务启动 , 可以看到3306 数据也同步回来 , 但是已经成了备库 , 而不是主库

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木秀林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值