mycat 读写分离

admin
2024-12-17 / 0 评论 / 73 阅读 / 正在检测是否收录...

环境介绍

系统版本内核版本数据库版本读写分离组建java 版本
Red Hat Enterprise Linux 8.8 (Ootpa)Linux 4.18.0-477.10.1.el8_8.x86_64mysql-8.4.3-linux-glibc2.28-x86_64Mycat-server-1.6java version "1.8.0_431"

系统架构

m4sfscas.png

实现主从

主从不在这叙述

mysql> show replica status \G;
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event #复制IO的状态
                  Source_Host: 192.168.137.69   #源主机地址
                  Source_User: repl5   #连接源主机数据库的用户
                  Source_Port: 3306    
                Connect_Retry: 60  #连接重试时间 60
              Source_Log_File: 3306bin.000007  #源日志文件名称
          Read_Source_Log_Pos: 1955     #读取源日志的起始位置(偏移量)
               Relay_Log_File: mysql-slave-relay-bin.000002  #中继日志文件
                Relay_Log_Pos: 786  #中继日志的位置(偏移量)
        Relay_Source_Log_File: 3306bin.000007   #从master同步中继日志文件的名称
           Replica_IO_Running: Yes   #复制节点的IO线程的状态:YES 表示成功;connection:正在连接 NO:连接不成功
          Replica_SQL_Running: Yes   #复制节点的SQL线程的状态
          ======================
              Replicate_Do_DB:     #库复制
          Replicate_Ignore_DB:
          ======================
          ======================
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:     #表复制状态信息
  Replicate_Wild_Ignore_Table: 
           ======================
                   Last_Errno: 0   #最新/上一次的错误信息
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 1955   #执行源日志的偏移量
              Relay_Log_Space: 1003   #中继日志的空间
              Until_Condition: None   #直到条件
               Until_Log_File:
                Until_Log_Pos: 0
       
           =====================     
           Source_SSL_Allowed: No 描述SSL验证
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
           ======================
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 19 #源server的ID
                  Source_UUID: f7b42b90-b769-11ef-8b2f-525400d39ac1  #源UUID
             Source_Info_File: mysql.slave_master_info   #源数据库文件描述信息
                    SQL_Delay: 0   #SQL线程的延迟时间
          SQL_Remaining_Delay: NULL  #SQL 剩余延迟时间
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates #SQL线程的状态
           Source_Retry_Count: 10   #重试次数10
                  Source_Bind:
      Last_IO_Error_Timestamp:  #最新/上一次IO错误的时间戳
     Last_SQL_Error_Timestamp:  #最新/上一次SQL错误的时间戳
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set: f7b42b90-b769-11ef-8b2f-525400d39ac1:8-9  #已获取全局事务标识符集合
            Executed_Gtid_Set: f7b42b90-b769-11ef-8b2f-525400d39ac1:1-9  #已执行全局事务标识符集合
                Auto_Position: 1  #自动定位
         Replicate_Rewrite_DB:
                 Channel_Name:
           Source_TLS_Version:
       Source_public_key_path:
        Get_Source_public_key: 0
            Network_Namespace:

部署mycat节点

一、获取软件包及解压

wget  https://github.com/MyCATApache/Mycat-download/blob/master/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  -C /usr/local/

二、修改配置文件

server.xml(保持原文件不动)

schema.xml

[root@mycat-server ~]# cat  /usr/local/mycat/conf/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">
        <!-- auto sharding by id (long) -->
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        <!-- global table is auto cloned to all defined data nodes ,so can join
            with any table whose sharding node is in the same data node -->
        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
        <!-- random sharding using mod sharind rule -->
        <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
               rule="mod-long" />
        <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
            needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
            rule="mod-long" /> -->
        <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
               rule="sharding-by-intfile" />
        <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
               rule="sharding-by-intfile">
            <childTable name="orders" primaryKey="ID" joinKey="customer_id"
                        parentKey="id">
                <childTable name="order_items" joinKey="order_id"
                            parentKey="id" />
            </childTable>
            <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
                        parentKey="id" />
        </table>
        <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
            /> -->
    </schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
        /> -->
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <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="1" dbType="mysql"
        dbDriver="jdbc">
        <heartbeat>select user()</heartbeat>
        <writeHost host="192.168.137.69" url="jdbc:mysql://192.168.137.69:3306" user="mycat1" password="mycat@123">
        <readHost host="192.168.137.61" url="jdbc:mysql://192.168.137.61:3306" user="mycat1" password="mycat@123" />
         </writeHost>
        </dataHost>
</mycat:schema>

三、启动Mycat

[root@mycat-server mycat]# bin/mycat start

错误过程

m4sgc48j.png

错误的原因:

  • JDBC 驱动未正确配置
    Mycat 在执行 JDBC 操作时找不到合适的驱动程序。MySQL的JDBC驱动通常是com.mysql.cj.jdbc.Driver,但是 Mycat 可能没有正确加载该驱动。

解决方法:

1. 确保 JDBC 驱动在 Mycat 中正确配置:

检查Mycat 配置文件 conf/mysql.properties 或其他相关的配置文件,确保 mysql.driver 参数正确指定为 MySQL 驱动:

mysql.driver=com.mysql.cj.jdbc.Driver

2. 确保 MySQL JDBC 驱动存在:
确保 Mycat的lib/目录中包含 MySQL JDBC 驱动 mysql-connector-java-x.x.x.jar。如果没有,可以手动下载并将其放置到 lib/ 目录中。你可以从 MySQL 官方下载页面 下载适合的 JDBC 驱动,并将其放入 lib 目录。

[root@mycat-server ~]# wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.4.0-1.el8.src.rpm
[root@mycat-server ~]# rpm -ivh  mysql-connector-j-8.4.0-1.el8.src.rpm
[root@mycat-server ~]# cd rpmbuild/SOURCES/
[root@mycat-server SOURCES]# tar xf mysql-connector-j-8.4.0.tar.gz

[root@mycat-server SOURCES]# cd mysql-connector-j-8.4.0
[root@mycat-server mysql-connector-j-8.4.0]# cp mysql-connector-j-8.4.0.jar   /usr/local/mycat/lib/

3.重新启动mycat

[root@mycat-server mycat]# bin/mycat start

切记一定:要观察日志

0

评论 (0)

取消