mycat配置主从复制读写分离

mycat配置主从复制读写分离

本篇是基于docker部署mysql的(一主一从),从而配置mycat.



一、准备工作

先把下载好的mycat进行解压,然后使用docker启动mysql,我这篇是用的5.7版本的,用8.0的会有一些个问题.下面是docker启动命令

docker run -p 3306:3306 --name mysql_test -e MYSQL_ROOT_PASSWORD=root  -d mysql:5.7

二、配置mycat

1.进入conf目录下修改server.xml

约莫80行出修改:

  <!--name="mycat" 可以理解成数据库账号
  <property name="schemas">TESTDB</property> 对应着 schema.xml里的<schema>标签 -->
  <user name="mycat">
                <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>


2.进入conf目录下修改schema.xml

代码如下(示例):

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

        <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100"  dataNode="dn1" >
        </schema>
        <!--database="testdb" 对应的数据库.mysql先不要创建这个数据库,因为主库的position会变-->
        <dataNode name="dn1" dataHost="host1" database="testdb" />
        <!--balance="2" 开启读写分离机制-->
        <dataHost name="host1" maxCon="1000" minCon="10" balance="2"
				 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
			 <!--心跳sql-->
             <heartbeat>select user()</heartbeat>
             <writeHost host="hostM1" url="你的主库ip:3306" user="root" password="root">                      
                   <readHost host="hostS2" url="你的从库ip:3306" user="root" password="root" />
             </writeHost>
        </dataHost>
</mycat:schema>

Mycat负载均衡类型,目前的取值有3种:

    1. balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
    1. balance=“1”,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
    1. balance=“2”,所有读操作都随机的在writeHost、readhost上分发。
    1. balance=“3”,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

3.启动mycat

进去mycat下的bin目录执行下面的语句,出现 MyCAT Server startup successfully. see logs in logs/mycat.log就算成功啦
./mycat console


三、 配置Mysql

1.配置主库

  • 配置主库的my.cnf

先进入mysql容器内, 再编辑 /etc/mysql/my.cnf.在docker里面是无法用vim,得先更新apt-get update 然后安装vim 下面是示例代码

  • 进入mysql容器内:
    docker exec -it 你的mysql容器名 /bin/bash
  • 在mysql容器中更新apt-get update 期间会有点慢
    apt-get update
    apt-get install vim
  • 安装完vim之后,编辑 vim /etc/mysql/my.cnf 内容如下:
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    [mysqld]
    #要求唯一
    server-id=1
    #读取binlog日志
    log-bin=mysql-bin
    #不需要的数据库
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    #需要读取的数据库
    binlog-do-db=testdb
    #STATEMENT(sql语句复制),ROW(行复制),MIXED(混合模式)
    binlog_format=ROW
  • 需要重启mysql服务使配置生效。在mysql容器中使用service mysql restart完成重启,重启完成之后会自动退出去mysql容器.然后重启mysql容器
  • 使用navicat在主库中给从库分配一个账号
#如果上述不报错,就启动成功啦,使用navicat给从库配置一个账号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

#显示主库的状态并记录(File字段和Position字段)
SHOW MASTER STATUS;

2.配置从库

  • 和主库的配置差不多,就是my.cnf中的内容不一样

[mysqld]
server-id=2
#开启中继日志
relay-log=mysql-relay

  • 用navicat连上从库进行如下操作:
#复制主机的命令(填写主库的File字段和Position字段)
CHANGE MASTER TO MASTER_HOST='你的主服务器的ip',MASTER_USER='slave'
,MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=436;
#开启从服务器的功能
start slave;
#查看从服务器的状态
show slave STATUS;



# 如果之前搭过主从复制,先stop slave;然后在 reset master;然后再执行复制主机的命令,最后再开启start slave;

  • 验证是否搭建成功.当slave_io_running 和slave_sql_running都为yes时就是搭建成功啦.如果有no的话,可以查看下面框住的内容里面有错误信息
    在这里插入图片描述

四、搭建完成开始测试

用navicat连接好主、从、mycat(8066端口 账号是mycat,密码是123456).用主数据库的创建刚才在my.cnf配置的testdb数据库选择好utf-8的字符集,然后创建表.主数据库创建完成后,去从数据库就可以看到效果啦~ 最后用mycat的那个也可以看到效果.在mycat的那个号也可以进行增删改查,对应的主从数据库也会跟着变化啦~

*注意事项

  • 配置完my.cnf以后必须在mysql容器内进行service mysql restart完成重启,假如重启之后,mysql容器挂啦,肯定是my.cnf配置不对可以使用docker cp 命令.把改正确的my.cnf复制到mysql容器中,然后再重新启动mysql容器. docker cp示例: docker cp ./my.cnf 容器名:/etc/mysql/
  • 在配置期间全程不要创建数据库,因为那样File字段和Position字段会变
  • 我上面的balance配置的是 balance=“2”,所有读操作都随机的在writeHost、readhost上分发。为的就是可以看到主从轮询的效果.你可以输入一条错误的查询语句,然后去mycat.log中查看效果
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值