MySQL

mycat 读写分离

2019-02-14  本文已影响97人  Miacis

部署环境

  1. 下载 jdk
shell> wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz

// --no-check-certificate 表示不校验SSL证书,因为中间的两个302会访问https,会涉及到证书的问题,不校验能快一点,影响不大.

  1. 解压文件
shell> tar -xf jdk-8u201-linux-x64.tar.gz -C /usr/local/
shell> ln -s /usr/local/jdk1.8.0_201/ /usr/local/java

  1. 配置环境变量
shell> vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

注意 CLASSPATH 中有个点 . 不要省略

  1. 使环境变量生效
shell> source /etc/profile

部署 MyCat

下载
shell> wget  http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

解压
shell> tar -xf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local/
shell> ls /usr/local/mycat/
bin  catlet  conf  lib  logs  version.txt

配置 server.xml

以下为代码片段
下面的用户和密码是应用程序连接到 MyCat 使用的,可以自定义配置
而其中的schemas 配置项所对应的值是逻辑数据库的名字,也可以自定义,但是这个名字需要和后面 schema.xml 文件中配置的一致。

shell> vim server.xml
<user name="mycatdb">
    <property name="password">123456</property>
    <property name="schemas">guvmao_db</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>
<!--下面是另一个用户,并且设置的访问 TESTED 逻辑数据库的权限是 只读
<user name="user">
        <property name="password">user</property>
        <property name="schemas">TESTDB</property>
        <property name="readOnly">true</property>
</user>
-->

== 上面的配置中,假如配置了用户访问的逻辑库,那么必须在 schema.xml 文件中也配置这个逻辑库,否则报错,启动 mycat 失败 ==

配置 schema.xml

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

  <schema name="guvmao_db" 
          checkSQLschema="false"
          sqlMaxLimit="100" 
          dataNode='dn1'>
    <!--这里定义的是分库分表的信息-->
  </schema>

  <!--下面是配置读写分离的信息-->
  <dataNode name="dn1"
            dataHost="localhost1" database="miacis">
  </dataNode>

  <dataHost name="localhost1"
            maxCon="1000" minCon="10"
            balance="3" writeType="0"
            dbType="mysql" dbDriver="native"
            switchType="1" slaveThreshold="100">
    
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="192.168.223.101:3306"
               user="mycatmaster" password="123">
      <!-- can have multi read hosts -->
      <readHost host="hostS2" url="192.168.223.201:3306"
                user="mycatslave" password="123" />
    </writeHost>
  </dataHost>
</mycat:schema>

配置 log4j2.xml

<!--设置日志级别为 debug , 默认是 info-->
<asyncRoot level="debug" includeLocation="true">

启动 mycat

shell> /usr/local/mycat/bin/mycat  start
 // 支持以下参数
start | restart |stop | status

在真实的 master 数据库上给用户授权

// master
mysql> grant all on miacis.* to mycatmaster@'%' identified by '123';
mysql> flush privileges;
// slave
mysql> grant all on miacis.* to mycatslave@'%' identified by '123';
mysql> flush privileges;

测试

在 mycat 的机器上测试用户权限有效性
测试是否能正常登录上 主服务器

shell> mysql -umycatmaster -p'123' -h192.168.223.101

继续测试是否能登录上从服务器

shell> mysql -umycatslave -p'123' -h192.168.223.201

通过客户端进行测试是否能登录到 mycat
注意端口号是 8066

shell> mysql -umycatdb -p123456 -P8066 -h192.168.223.202
mysql> show databases;
+-----------+
| DATABASE  |
+-----------+
| guvmao_db |
+-----------+
1 row in set (0.00 sec)

继续测试读写分离策略
使用 mysql 客户端工具使用 mycat 的账户和密码登录 mycat ,
之后执行 select 语句。
之后查询 mycat 主机上 mycat 安装目录下的 logs/mycat.log 日志。
在日志重搜索查询的语句或者查询 从库的 ip 地址,应该能搜索到

更详细点击链接:https://www.jianshu.com/p/51861107b04a

上一篇 下一篇

猜你喜欢

热点阅读