环境介绍
系统版本 | 内核版本 | 数据库版本 | 读写分离组建 | java 版本 |
---|---|---|---|---|
Red Hat Enterprise Linux 8.8 (Ootpa) | Linux 4.18.0-477.10.1.el8_8.x86_64 | mysql-8.4.3-linux-glibc2.28-x86_64 | Mycat-server-1.6 | java version "1.8.0_431" |
系统架构
实现主从
主从不在这叙述
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
错误过程
错误的原因:
- 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)