From 3df6cfc0078b12ba7243f91540286212b94bb55b Mon Sep 17 00:00:00 2001
From: wxin <15253413025@163.com>
Date: Fri, 14 Mar 2025 10:11:27 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E8=AF=BB=E5=86=99?=
=?UTF-8?q?=E5=88=86=E7=A6=BB.md?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
读写分离.md | 874 ++++++++++++++++++++++++++--------------------------
1 file changed, 437 insertions(+), 437 deletions(-)
diff --git a/读写分离.md b/读写分离.md
index 098424e..77ae678 100644
--- a/读写分离.md
+++ b/读写分离.md
@@ -1,437 +1,437 @@
-
读写分离
-
-------
-
-## 一:读写分离部署
-
-### 1. 环境介绍
-
-
-
-### 2. 读写分离集群部署
-
-#### 数据库集群部署
-
- 单主单从;多主多从等均可(参考主从复制)
-
-#### Mycat部署
-
- 新机器,不需要安装mysql
-
-安装jdk环境:
-
-```bash
-[root@mycat ~]# tar xvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
-[root@mycat ~]# mv /usr/local/jdk1.8.0_211 /usr/local/jdk8
-```
-
-设置环境变量:
-
-```bash
-[root@mycat ~]# vim /etc/profile
-JAVE_HOME=/usr/local/jdk8
-PATH=$JAVA_HOME/bin:$PATH
-export JAVA_HOME PATH
-[root@mycat ~]# source /etc/profile
-[root@mycat ~]# java -version
-openjdk version "1.8.0_262"
-OpenJDK Runtime Environment (build 1.8.0_262-b10)
-OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
-```
-
-安装mycat:
-
-```bash
-[root@mycat ~]# tar xvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/
-```
-
-设置环境变量:
-
-```bash
-[root@mycat ~]# vim ~/.bash_profile
-PATH=$PATH:$HOME/bin:/usr/local/mycat/bin
-[root@mycat ~]# source ~/.bash_profile
-```
-
-#### 数据库部署
-
-Mysql中添加数据库和账户:
-
-```SQL
-[root@master ~]# mysql -uroot -p'Wxin@123456'
-mysql> create database shop;
-Query OK, 1 row affected (0.00 sec)
-
-mysql> create database bbs;
-Query OK, 1 row affected (0.01 sec)
-
-mysql> create database blog;
-Query OK, 1 row affected (0.00 sec)
-
-mysql> grant all on shop.* to shop@'%' identified by 'Mycat@123456';
-Query OK, 0 rows affected, 1 warning (0.00 sec)
-
-mysql> grant all on bbs.* to bbs@'%' identified by 'Mycat@123456';
-Query OK, 0 rows affected, 1 warning (0.01 sec)
-
-mysql> grant all on blog.* to blog@'%' identified by 'Mycat@123456';
-Query OK, 0 rows affected, 1 warning (0.00 sec)
-```
-
-注意:
-
-- 创建的库跟mycat关联,原则上一个库对应一个项目,根据实际情况创建
-- 创建的库需要单独授权用户进行管理,用户名和库名根据实际情况决定
-
-#### Mycat配置
-
-server.xml:Mycat的配置文件,设置账号、参数等
-
-```shell
-[root@mycat ~]# cd /usr/local/mycat/conf/
-[root@mycat conf]# vim server.xml
-
- 123456
- TESTDB
-
-
-
-
-
-
- Mycat@123456
- shop
-
-
- Mycat@123456
- bbs
-
-
- Mycat@123456
- blog
-
-```
-
-注意:
-
-```shell
-user 用户配置节点
-–name 登录的用户名,也就是连接Mycat的用户名
-–password 登录的密码,也就是连接Mycat的密码
-–schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,db2
-```
-
-schema.xml:Mycat对应的物理数据库和数据库表的配置
-
-```bash
-[root@mycat conf]# vim schema.xml
-
-
-
-
-
-
-
-
-
-
-
- show status like 'wsrep%'
-
-
-
-
-
-
-
-
- show status like 'wsrep%'
-
-
-
-
-
-
-
- show status like 'wsrep%'
-
-
-
-
-
-```
-
-注意:
-
-```shell
-balance=1 开启读写分离机制,所有读操作都发送到当前备用的 writeHost 上。
-wirteType=0 所有写操作发送到第一个writeHost,第一个挂了切换到第二个
-switchType=3 基于MySQL Galera cluster的切换机制,心跳语句为show status like 'wsrep%'
-```
-
-#### 启动服务
-
-```bash
-[root@mycat conf]# mycat start
-```
-
-查看端口:
-
-```bash
-[root@mycat conf]# ss -antpl
-State Recv-Q Send-Q Local Address:Port Peer Address:Port
-LISTEN 0 128 *:111 *:* users:(("rpcbind",pid=745,fd=8))
-LISTEN 0 5 192.168.122.1:53 *:* users:(("dnsmasq",pid=1510,fd=6))
-LISTEN 0 128 *:22 *:* users:(("sshd",pid=1139,fd=3))
-LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",pid=1138,fd=11))
-LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1395,fd=13))
-LISTEN 0 80 [::]:3306 [::]:* users:(("mysqld",pid=1562,fd=28))
-LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=745,fd=11))
-LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1139,fd=4))
-LISTEN 0 128 [::1]:631 [::]:* users:(("cupsd",pid=1138,fd=10))
-LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1395,fd=14))
-```
-
-#### 客户端测试
-
-mycat连接测试:
-
-```SQL
-[root@master ~]# mysql -ushop -pMycat@123456 -P 3306 -h 192.168.159.132
-mysql> show databases;
-+--------------------+
-| Database |
-+--------------------+
-| information_schema |
-| shop |
-+--------------------+
-2 rows in set (0.00 sec)
-
-mysql> use shop
-Database changed
-
-mysql> show tables;
-+----------------+
-| Tables_in_shop |
-+----------------+
-| t1 |
-+----------------+
-1 row in set (0.00 sec)
-
-mysql> insert into t1 values(1);
-Query OK, 1 row affected (0.02 sec)
-
-mysql> insert into t1 values(2);
-Query OK, 1 row affected (0.00 sec)
-```
-
-从服务数据验证:
-
-```SQL
-[root@slave ~]# mysql -uroot -p'Wxin@123456'
-mysql> show databases;
-+--------------------+
-| Database |
-+--------------------+
-| information_schema |
-| bbs |
-| blog |
-| mysql |
-| performance_schema |
-| shop |
-| sys |
-+--------------------+
-7 rows in set (0.01 sec)
-
-mysql> use shop
-Reading table information for completion of table and column names
-You can turn off this feature to get a quicker startup with -A
-
-Database changed
-mysql> show tables;
-+----------------+
-| Tables_in_shop |
-+----------------+
-| t1 |
-+----------------+
-1 row in set (0.00 sec)
-
-mysql> select * from t1;
-+------+
-| id |
-+------+
-| 1 |
-| 2 |
-+------+
-2 rows in set (0.00 sec)
-```
-
-### 3. Mycat 配置文件
-
-server.xml
-
-```shell
-一:server.xml 配置文件
-1.privileges标签
-对用户的 schema以及表进行精细化的DML(数据操纵语言)权限控制
- --check 表示是否开启DML权限检查。默认是关闭。
---dml 顺序说明:insert,update,select,delete
-
-
-
-db1的权限是update,select。
-tb01的权限是啥都不能干。
-tb02的权限是insert,update,select,delete。
-其他表默认是udpate,select。
-
-2.system标签
-这个标签内嵌套的所有 property 标签都与系统配置有关。
-utf8
-字符集
-1
-处理线程数量,默认是cpu数量。
-4096
-每次读取留的数量,默认4096。
-409600
-创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。
-0
-默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。
-100
-二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
-100
-全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
-1
-是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
-4
-指定 Mysql 协议中的报文头长度。默认 4。
-16M
-指定 Mysql 协议可以携带的数据最大长度。默认 16M。
-1800000
-指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
-3
-前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
-READ_UNCOMMITTED = 1;
-READ_COMMITTED = 2;
-REPEATED_READ = 3;
-SERIALIZABLE = 4;
-300
-SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
-1000
-清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
-位毫秒。
-300000
-对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
-10000
-对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。
-0.0.0.0
-mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
-8066
-定义 mycat 的使用端口,默认值为 8066。
-9066
-定义 mycat 的管理端口,默认值为 9066。
-5.6
-mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。
-0
-是否开启实时统计。1为开启;0为关闭 。
-0
-是否开启全局表一致性检测。1为开启;0为关闭 。
-0
-分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。
-65535
-默认是65535。 64K 用于sql解析时最大文本长度
-以上举例的属性仅仅是一部分,可以配置的变量很多。
-System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。
-
-3. Firewall标签
-防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
-
-
-
-
-
-
-
-
-```
-
-schema.xml
-
-```shell
-一:schema.xml
-–schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
-–dataNode 分片信息,也就是分库相关配置
-–dataHost 物理数据库,真正存储数据的数据库
-
-1、schema 标签
-
-schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库,如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。
-–name 逻辑数据库名,与server.xml中的schema对应
-–checkSQLschema 数据库前缀相关设置,当该值为true时,例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company 去掉TESTDB。
-–sqlMaxLimit 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。需要自己sql语句加limit。
-
-2、dataNode标签
-
-datanode标签定义了mycat中的数据节点,也就是数据分片。一个datanode标签就是一个独立的数据分片。
-localhost1数据库实例上的db1物理数据库,这就组成一个数据分片,最后我们用dn1来标示这个分片。
-–name 定义数据节点的名字,这个名字需要唯一。我们在table标签上用这个名字来建立表与分片对应的关系
-–dataHost 用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应
-–database 用于定义该分片属于数据库实例上 的具体库。
-
-3、dataHost标签
-这个标签直接定义了具体数据库实例,读写分离配置和心跳语句。
-
-select user()
-
-
-
-
-
-–name 唯一标示dataHost标签,供上层使用
-–maxCon 指定每个读写实例连接池的最大连接。
-–minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小
-–balance 负载均称类型
-balance=“0”:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
-balance=“1”:全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
-balance=“2”:所有读操作都随机的在writeHost、readHost上分发
-balance=“3”:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。
-–writeType 负载均衡类型。
-writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
-writeType=“1”,所有写操作都随机的发送到配置的 writeHost。1.5以后版本废弃不推荐。
-–switchType -1不自动切换
-1 默认值 自动切换
-2 基于MySql主从同步的状态决定是否切换心跳语句为 show slave status
-3 基于mysql galary cluster 的切换机制(适合集群) 心跳语句为 show status like ‘wsrep%’
-–dbType 指定后端链接的数据库类型目前支持二进制的mysql协议,还有其他使用jdbc链接的数据库,例如:mongodb,oracle,spark等
-–dbDriver 指定连接后段数据库使用的driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。
-如果使用JDBC的话需要符合JDBC4标准的驱动jar 放到mycat\lib目录下,并检查驱动jar包中包括如下目录结构文件 META-INF\services\java.sql.Driver。 在这个文件写上具体的driver类名,例如com.mysql.jdbc.Driver
-writeHost readHost指定后端数据库的相关配置给mycat,用于实例化后端连接池。
-–tempReadHostAvailable
-如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。
-1)heartbeat标签
-这个标签内指明用于和后端数据库进行心跳检查的语句。
-例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
-2) writeHost /readHost 标签
-这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
-在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。
-另一方面,由于这个 writeHost 宕机,系统会自动的检测到,并切换到备用的 writeHost 上去。这两个标签的属性相同,这里就一起介绍。
-–host 用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。
-–url 后端实例连接地址。Native:地址:端口 JDBC:jdbc的url
-–password 后端存储实例需要的密码
-–user 后端存储实例需要的用户名字
-–weight 权重 配置在 readhost 中作为读节点的权重
-–usingDecrypt 是否对密码加密,默认0。
-```
-
+读写分离
+
+------
+
+## 一:读写分离部署
+
+### 1. 环境介绍
+
+
+
+### 2. 读写分离集群部署
+
+#### 数据库集群部署
+
+ 单主单从;多主多从等均可(参考主从复制)
+
+#### Mycat部署
+
+ 新机器,不需要安装mysql
+
+安装jdk环境:
+
+```bash
+[root@mycat ~]# tar xvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
+[root@mycat ~]# mv /usr/local/jdk1.8.0_211 /usr/local/jdk8
+```
+
+设置环境变量:
+
+```bash
+[root@mycat ~]# vim /etc/profile
+JAVE_HOME=/usr/local/jdk8
+PATH=$JAVA_HOME/bin:$PATH
+export JAVA_HOME PATH
+[root@mycat ~]# source /etc/profile
+[root@mycat ~]# java -version
+openjdk version "1.8.0_262"
+OpenJDK Runtime Environment (build 1.8.0_262-b10)
+OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
+```
+
+安装mycat:
+
+```bash
+[root@mycat ~]# tar xvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/
+```
+
+设置环境变量:
+
+```bash
+[root@mycat ~]# vim ~/.bash_profile
+PATH=$PATH:$HOME/bin:/usr/local/mycat/bin
+[root@mycat ~]# source ~/.bash_profile
+```
+
+#### 数据库部署
+
+Mysql中添加数据库和账户:
+
+```SQL
+[root@master ~]# mysql -uroot -p'Wxin@123456'
+mysql> create database shop;
+Query OK, 1 row affected (0.00 sec)
+
+mysql> create database bbs;
+Query OK, 1 row affected (0.01 sec)
+
+mysql> create database blog;
+Query OK, 1 row affected (0.00 sec)
+
+mysql> grant all on shop.* to shop@'%' identified by 'Mycat@123456';
+Query OK, 0 rows affected, 1 warning (0.00 sec)
+
+mysql> grant all on bbs.* to bbs@'%' identified by 'Mycat@123456';
+Query OK, 0 rows affected, 1 warning (0.01 sec)
+
+mysql> grant all on blog.* to blog@'%' identified by 'Mycat@123456';
+Query OK, 0 rows affected, 1 warning (0.00 sec)
+```
+
+注意:
+
+- 创建的库跟mycat关联,原则上一个库对应一个项目,根据实际情况创建
+- 创建的库需要单独授权用户进行管理,用户名和库名根据实际情况决定
+
+#### Mycat配置
+
+server.xml:Mycat的配置文件,设置账号、参数等
+
+```shell
+[root@mycat ~]# cd /usr/local/mycat/conf/
+[root@mycat conf]# vim server.xml
+
+ 123456
+ TESTDB
+
+
+
+
+
+
+ Mycat@123456
+ shop
+
+
+ Mycat@123456
+ bbs
+
+
+ Mycat@123456
+ blog
+
+```
+
+注意:
+
+```shell
+user 用户配置节点
+–name 登录的用户名,也就是连接Mycat的用户名
+–password 登录的密码,也就是连接Mycat的密码
+–schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,db2
+```
+
+schema.xml:Mycat对应的物理数据库和数据库表的配置
+
+```bash
+[root@mycat conf]# vim schema.xml
+
+
+
+
+
+
+
+
+
+
+
+ show status like 'wsrep%'
+
+
+
+
+
+
+
+
+ show status like 'wsrep%'
+
+
+
+
+
+
+
+ show status like 'wsrep%'
+
+
+
+
+
+```
+
+注意:
+
+```shell
+balance=1 开启读写分离机制,所有读操作都发送到当前备用的 writeHost 上。
+wirteType=0 所有写操作发送到第一个writeHost,第一个挂了切换到第二个
+switchType=3 基于MySQL Galera cluster的切换机制,心跳语句为show status like 'wsrep%'
+```
+
+#### 启动服务
+
+```bash
+[root@mycat conf]# mycat start
+```
+
+查看端口:
+
+```bash
+[root@mycat conf]# ss -antpl
+State Recv-Q Send-Q Local Address:Port Peer Address:Port
+LISTEN 0 128 *:111 *:* users:(("rpcbind",pid=745,fd=8))
+LISTEN 0 5 192.168.122.1:53 *:* users:(("dnsmasq",pid=1510,fd=6))
+LISTEN 0 128 *:22 *:* users:(("sshd",pid=1139,fd=3))
+LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",pid=1138,fd=11))
+LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1395,fd=13))
+LISTEN 0 80 [::]:3306 [::]:* users:(("mysqld",pid=1562,fd=28))
+LISTEN 0 128 [::]:111 [::]:* users:(("rpcbind",pid=745,fd=11))
+LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1139,fd=4))
+LISTEN 0 128 [::1]:631 [::]:* users:(("cupsd",pid=1138,fd=10))
+LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1395,fd=14))
+```
+
+#### 客户端测试
+
+mycat连接测试:
+
+```SQL
+[root@master ~]# mysql -ushop -pMycat@123456 -P 3306 -h 192.168.159.132
+mysql> show databases;
++--------------------+
+| Database |
++--------------------+
+| information_schema |
+| shop |
++--------------------+
+2 rows in set (0.00 sec)
+
+mysql> use shop
+Database changed
+
+mysql> show tables;
++----------------+
+| Tables_in_shop |
++----------------+
+| t1 |
++----------------+
+1 row in set (0.00 sec)
+
+mysql> insert into t1 values(1);
+Query OK, 1 row affected (0.02 sec)
+
+mysql> insert into t1 values(2);
+Query OK, 1 row affected (0.00 sec)
+```
+
+从服务数据验证:
+
+```SQL
+[root@slave ~]# mysql -uroot -p'Wxin@123456'
+mysql> show databases;
++--------------------+
+| Database |
++--------------------+
+| information_schema |
+| bbs |
+| blog |
+| mysql |
+| performance_schema |
+| shop |
+| sys |
++--------------------+
+7 rows in set (0.01 sec)
+
+mysql> use shop
+Reading table information for completion of table and column names
+You can turn off this feature to get a quicker startup with -A
+
+Database changed
+mysql> show tables;
++----------------+
+| Tables_in_shop |
++----------------+
+| t1 |
++----------------+
+1 row in set (0.00 sec)
+
+mysql> select * from t1;
++------+
+| id |
++------+
+| 1 |
+| 2 |
++------+
+2 rows in set (0.00 sec)
+```
+
+### 3. Mycat 配置文件
+
+server.xml
+
+```shell
+一:server.xml 配置文件
+1.privileges标签
+对用户的 schema以及表进行精细化的DML(数据操纵语言)权限控制
+ --check 表示是否开启DML权限检查。默认是关闭。
+--dml 顺序说明:insert,update,select,delete
+
+
+
+db1的权限是update,select。
+tb01的权限是啥都不能干。
+tb02的权限是insert,update,select,delete。
+其他表默认是udpate,select。
+
+2.system标签
+这个标签内嵌套的所有 property 标签都与系统配置有关。
+utf8
+字符集
+1
+处理线程数量,默认是cpu数量。
+4096
+每次读取留的数量,默认4096。
+409600
+创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。
+0
+默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。
+100
+二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
+100
+全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
+1
+是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
+4
+指定 Mysql 协议中的报文头长度。默认 4。
+16M
+指定 Mysql 协议可以携带的数据最大长度。默认 16M。
+1800000
+指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
+3
+前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
+READ_UNCOMMITTED = 1;
+READ_COMMITTED = 2;
+REPEATED_READ = 3;
+SERIALIZABLE = 4;
+300
+SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
+1000
+清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
+位毫秒。
+300000
+对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
+10000
+对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。
+0.0.0.0
+mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
+8066
+定义 mycat 的使用端口,默认值为 8066。
+9066
+定义 mycat 的管理端口,默认值为 9066。
+5.6
+mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。
+0
+是否开启实时统计。1为开启;0为关闭 。
+0
+是否开启全局表一致性检测。1为开启;0为关闭 。
+0
+分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。
+65535
+默认是65535。 64K 用于sql解析时最大文本长度
+以上举例的属性仅仅是一部分,可以配置的变量很多。
+System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。
+
+3. Firewall标签
+防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问
+
+
+
+
+
+
+
+
+```
+
+schema.xml
+
+```shell
+一:schema.xml
+–schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
+–dataNode 分片信息,也就是分库相关配置
+–dataHost 物理数据库,真正存储数据的数据库
+
+1、schema 标签
+
+schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库,如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。
+–name 逻辑数据库名,与server.xml中的schema对应
+–checkSQLschema 数据库前缀相关设置,当该值为true时,例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company 去掉TESTDB。
+–sqlMaxLimit 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。需要自己sql语句加limit。
+
+2、dataNode标签
+
+datanode标签定义了mycat中的数据节点,也就是数据分片。一个datanode标签就是一个独立的数据分片。
+localhost1数据库实例上的db1物理数据库,这就组成一个数据分片,最后我们用dn1来标示这个分片。
+–name 定义数据节点的名字,这个名字需要唯一。我们在table标签上用这个名字来建立表与分片对应的关系
+–dataHost 用于定义该分片属于哪个数据库实例,属性与datahost标签上定义的name对应
+–database 用于定义该分片属于数据库实例上 的具体库。
+
+3、dataHost标签
+这个标签直接定义了具体数据库实例,读写分离配置和心跳语句。
+
+select user()
+
+
+
+
+
+–name 唯一标示dataHost标签,供上层使用
+–maxCon 指定每个读写实例连接池的最大连接。
+–minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小
+–balance 负载均称类型
+balance=“0”:不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
+balance=“1”:全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
+balance=“2”:所有读操作都随机的在writeHost、readHost上分发
+balance=“3”:所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。
+–writeType 负载均衡类型。
+writeType=“0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
+writeType=“1”,所有写操作都随机的发送到配置的 writeHost。1.5以后版本废弃不推荐。
+–switchType -1不自动切换
+1 默认值 自动切换
+2 基于MySql主从同步的状态决定是否切换心跳语句为 show slave status
+3 基于mysql galary cluster 的切换机制(适合集群) 心跳语句为 show status like ‘wsrep%’
+–dbType 指定后端链接的数据库类型目前支持二进制的mysql协议,还有其他使用jdbc链接的数据库,例如:mongodb,oracle,spark等
+–dbDriver 指定连接后段数据库使用的driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。
+如果使用JDBC的话需要符合JDBC4标准的驱动jar 放到mycat\lib目录下,并检查驱动jar包中包括如下目录结构文件 META-INF\services\java.sql.Driver。 在这个文件写上具体的driver类名,例如com.mysql.jdbc.Driver
+writeHost readHost指定后端数据库的相关配置给mycat,用于实例化后端连接池。
+–tempReadHostAvailable
+如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。
+1)heartbeat标签
+这个标签内指明用于和后端数据库进行心跳检查的语句。
+例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
+2) writeHost /readHost 标签
+这两个标签都指定后端数据库的相关配置,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例。
+在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。
+另一方面,由于这个 writeHost 宕机,系统会自动的检测到,并切换到备用的 writeHost 上去。这两个标签的属性相同,这里就一起介绍。
+–host 用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。
+–url 后端实例连接地址。Native:地址:端口 JDBC:jdbc的url
+–password 后端存储实例需要的密码
+–user 后端存储实例需要的用户名字
+–weight 权重 配置在 readhost 中作为读节点的权重
+–usingDecrypt 是否对密码加密,默认0。
+```
+