MySQL全解[集群篇] (待续)

日志

错误日志

错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log 。查看日志位置:

show variables like '%log_error%';

二进制日志

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但不包括数据查询(SELECT、SHOW)语句。

作用:
①. 灾难时的数据恢复;
②. MySQL的主从复制。

在MySQL8版本中,默认二进制日志是开启着的,涉及到的参数如下:

show variables like '%log_bin%';

在这里插入图片描述
参数说明:

  1. log_bin_basename:当前数据库服务器的binlog日志的基础名称(前缀),具体的binlog文件名需要再该basename的基础上加上编号(编号从000001开始)。

  2. log_bin_index:binlog的索引文件,里面记录了当前服务器关联的binlog文件有哪些。

格式

MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:
在这里插入图片描述

show variables like '%binlog_format%';

如果需要配置二进制日志的格式,只需要在 /etc/my.cnf 中配置 binlog_format 参数即可。

查看

由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查看,具体语法:

mysqlbinlog [ 参数选项 ] logfilename
参数选项:
-d 指定数据库名称,只列出指定的数据库相关操作。
-o 忽略掉日志中的前n行命令。
-v 将行事件(数据变更)重构为SQL语句
-vv 将行事件(数据变更)重构为SQL语句,并输出注释信息

删除

对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:

在这里插入图片描述
也可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志过期会自动删除。

show variables like '%binlog_expire_logs_seconds%';

查询日志

查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下,查询日志是未开启的。

如果需要开启查询日志,可以修改MySQL的配置文件 /etc/my.cnf 文件,添加如下内容:

#该选项用来开启查询日志 , 可选值 : 0 或者 1 ; 0 代表关闭, 1 代表开启
general_log=1
#设置日志的文件名 , 如果没有指定, 默认的文件名为 host_name.log
general_log_file=mysql_query.log

开启了查询日志之后,在MySQL的数据存放目录,也就是 /var/lib/mysql/ 目录下就会出现mysql_query.log 文件。之后所有的客户端的增删改查操作都会记录在该日志文件之中,长时间运行后,该日志文件将会非常大。

慢查询日志

慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于min_examined_row_limit 的所有的SQL语句的日志,默认未开启。long_query_time 默认为10 秒,最小为 0, 精度可以到微秒。

如果需要开启慢查询日志,需要在MySQL的配置文件 /etc/my.cnf 中配置如下参数:

#慢查询日志
slow_query_log=1
#执行时间参数
long_query_time=2

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以使用log_slow_admin_statements和 更改此行为 log_queries_not_using_indexes,如下所述:

#记录执行较慢的管理语句
log_slow_admin_statements =1
#记录执行较慢的未使用索引的语句
log_queries_not_using_indexes = 1

主从复制

主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

在这里插入图片描述

MySQL 复制的优点主要包含以下三个方面:

  1. 主库出现问题,可以快速切换到从库提供服务。
  2. 实现读写分离,降低主库的访问压力。
  3. 可以在从库中执行备份,以避免备份期间影响主库服务。

原理

MySQL主从复制的核心就是 二进制日志,具体的过程如下:
在这里插入图片描述
复制分成三步:

  1. Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
  2. 从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。
  3. slave重做中继日志中的事件,将改变反映它自己的数据。

docker搭建

  1. 主库配置
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库(可设置多个)
binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

#设置logbin格式
binlog_format=STATEMENT

binlog格式:statement,row,mixed.
在这里插入图片描述

  1. 重启MySQL服务器docker restart mysql8
  2. 登录mysql,创建远程连接的账号,并授予主从复制权限
#创建itcast用户,并设置密码为`Root@123456`,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
  1. 通过指令,查看二进制日志坐标

    show master status ;
    

    在这里插入图片描述

    字段含义说明:

    1. file : 从哪个日志文件开始推送日志文件
    2. position : 从哪个位置开始推送日志
    3. binlog_ignore_db : 指定不需要同步的数据库
  2. 从库配置

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1
#启用中继日志
relay-log=mysql-relay
  1. 登录mysql,设置主库配置
# 8.0.23
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.200', SOURCE_USER='itcast',
SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000004',
SOURCE_LOG_POS=663;

# 8.0.23之前
CHANGE MASTER TO MASTER_HOST='192.168.200.200', MASTER_USER='itcast',
MASTER_PASSWORD='Root@123456', MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=663;

在这里插入图片描述

  1. 开启同步操作
start replica ; #8.0.22之后
start slave ; #8.0.22之前
  1. 查看主从同步状态

    show replica status ; #8.0.22之后
    show slave status ; #8.0.22之前
    

    在这里插入图片描述

  2. 在主库上创建数据库、表,并插入数据

create database db01;
use db01;
create table tb_user(
id int(11) primary key not null auto_increment,
name varchar(50) not null,
sex varchar(1)
)engine=innodb default charset=utf8mb4;
insert into tb_user(id,name,sex) values(null,'Tom', '1'),(null,'Trigger','0'),
(null,'Dawn','1');
  1. 在从库中查询数据,验证主从是否同步
    在这里插入图片描述

分库分表

随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈:

  1. IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。 请求数据太多,带宽不够,网络IO瓶颈。
  2. CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。

为了解决上述问题,我们需要对数据库进行分库分表处理。
在这里插入图片描述
分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。

拆分策略

分库分表的形式,主要是两种:垂直拆分和水平拆分。而拆分的粒度,一般又分为分库和分表,所以组成的拆分策略最终如下:
在这里插入图片描述

垂直拆分

垂直分库

在这里插入图片描述
垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

特点:

  1. 每个库的表结构都不一样。
  2. 每个库的数据也不一样。
  3. 所有库的并集是全量数据。

垂直分表

在这里插入图片描述
垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。

特点:

  1. 每个表的结构都不一样。
  2. 每个表的数据也不一样,一般通过一列(主键/外键)关联。
  3. 所有表的并集是全量数据。

水平拆分

水平分库

在这里插入图片描述
水平分库:以字段为依据,按照一定策略,将一个库的数据拆分到多个库中。

特点:

  1. 每个库的表结构都一样。
  2. 每个库的数据都不一样。
  3. 所有库的并集是全量数据。

水平分表

在这里插入图片描述
水平分表:以字段为依据,按照一定策略,将一个表的数据拆分到多个表中。
特点:

  1. 每个表的表结构都一样。
  2. 每个表的数据都不一样。
  3. 所有表的并集是全量数据。

在业务系统中,为了缓解磁盘IO及CPU的性能瓶颈,到底是垂直拆分,还是水平拆分;具体是分库,还是分表,都需要根据具体的业务需求具体分析。

实现技术

在这里插入图片描述

  1. Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数
    据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,
    Cobar停止维护。
  2. Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并
    且加入了许多新的功能在其中。青出于蓝而胜于蓝。
  3. OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费
    的中间件。舍弃了一些功能,专注在性能和稳定性上。
  4. kingshard由小团队用go语言开发,还需要发展,需要不断完善。
  5. Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量
    改造成本。
  6. Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
  7. MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件
  8. MySQLRoute是MySQL官方Oracle公司发布的中间件

在这里插入图片描述
mysqlRouter和mycat2都是比较好的产品,鉴于mycat2教程较多,则以mycat2为例,后期更新mysqlrouter.

MyCat2

  1. Mycat是开源的、活跃的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat,对于开发人员来说根本感觉不到mycat的存在。

  2. 开发人员只需要连接MyCat即可,而具体底层用到几台数据库,每一台数据库服务器里面存储了什么数据,都无需关心。 具体的分库分表的策略,只需要在MyCat中配置即可。

在这里插入图片描述
优势:

  1. 性能可靠稳定
  2. 强大的技术团队
  3. 体系完善
  4. 社区活跃

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

似乎,mycat1.6.x版本已经凉凉了,连官网都没了,有言论说mycat是伪集群,大厂在生产环境使用mycat的也寥寥无几。

偶然看到了mycat2,大佬说mycat2是另外一个产品,独立的,代码与mycat1没有关系,配置文件也变成了json,以官网为准,继续学习。

mysql2对比mycat1.x

功能
1.6
2
多语句
不支持
支持
blob值
支持一部分
支持
全局二级索引
不支持
支持
任意跨库join(包含复杂查询)
catlet支持
支持
分片表与分片表JOIN查询
ER表支持
支持
关联子查询
不支持
支持一部分
分库同时分表
不支持
支持
存储过程
支持固定形式的
支持更多
支持逻辑视图
不支持
支持
支持物理视图
支持
支持
批量插入
不支持
支持
执行计划管理
不支持
支持
路由注释
支持
支持
集群功能
支持
支持更多集群类型
自动hash分片算法
不支持
支持
支持第三方监控
支持mycat-web
支持普罗米斯,kafka日志等监控
流式合拼结果集
支持
支持
范围查询
支持
支持
单表映射物理表
不支持
支持
XA事务
弱XA
支持,事务自动恢复
支持MySQL8
需要更改mysql8的服务器配置支持
支持
虚拟表
不支持
支持
joinClustering
不支持
支持
union all语法
不支持
支持
BKAJoin
不支持
支持
优化器注释
不支持
支持
ER表
支持
支持
全局序列号
支持
支持
保存点
不支持
支持
离线迁移
支持
支持(实验)
增量迁移
CRC32算法支持
BINLOG追平(实验)
安全停机
不支持
支持(实验)
HAProxy协议
不支持
支持
会话粘滞
update后select会粘滞
update后select会粘滞且支持设置时间
全局表插入支持全局序列号
不支持
支持
全局表插入支持主表插入自增结果作为序列号
不支持
支持
外部调用的分片算法
不支持但可定制
支持

(1)多语句:解析器会对 SQL 进行拆分依次执行(默认配置)

(2)blob 值:BLOB (binary large object)二进制大对象,是一个可以存储二进制文
件的容器。

(3)全局二级索引:使用全局二级索引后,能有效减少全表扫描,对于减少连接使用, 减少计算节点与存储节点的数据传输有帮助.

(4)关联子查询:支持不能消除关联的关联子查询

(5)分库同时分表:把分库分表合一,统一规划

(6)存储过程:存储过程支持多结果集返回、支持接收 affectRow

(7)支持批量插入:支持 rewriteInsertBatchedStatementBatch 参数,用于提高批量插入性能(只有把 rewriteBatchedStatements 参数置为 true, MySQL 驱动才会帮你批量执行 SQL)

(8)支持执行计划管理:Mycat2 的执行计划管理主要作用是管理执行计划,加快 SQL到执行计划的转换,并且提供一个方式可以从持久层读取自定义的执行计划。

(9)自动 hash 分片算法:由 1.6 版本的手动配置算法,到 2.0 的自动 hash 分片

(10)单表映射物理表:使用自动化建表语句创建测试的物理库物理表,它会自动生成配置文件,然后通过查看本地的配置文件,观察它的属性

docker运行mycat2

  1. 编写Dockerfile
FROM docker.io/adoptopenjdk/openjdk8:latest

ENV AUTO_RUN_DIR ./mycat2
ENV DEPENDENCE_FILE mycat2-1.22-release-jar-with-dependencies-2022-5-12.jar
ENV TEMPLATE_FILE mycat2-install-template-1.21.zip


RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@http://mirrors.aliyun.com@g" /etc/apt/sources.list

RUN buildDeps='procps wget unzip' \
    && apt-get update \
    && apt-get install -y $buildDeps

RUN wget -P  $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/1.22-release/$DEPENDENCE_FILE \
   &&  wget -P  $AUTO_RUN_DIR/ http://dl.mycat.org.cn/2.0/install-template/$TEMPLATE_FILE  


RUN cd $AUTO_RUN_DIR/ \
    && unzip $TEMPLATE_FILE \
    && ls -al . \
    && mv  $DEPENDENCE_FILE mycat/lib/ \
    && chmod +x  mycat/bin/* \
    && chmod 755  mycat/lib/* \
    && mv mycat /usr/local
#copy mycat /usr/local/mycat/
VOLUME /usr/local/mycat/conf
VOLUME /usr/local/mycat/logs

EXPOSE 8066 1984
CMD ["/usr/local/mycat/bin/mycat", "console"]
  1. 创建images
docker build -t mycat.org.cn/mycat2:20220513 .
  1. 创建配置文件conf
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
unzip mycat2-install-template-1.21.zip
mv mycat/conf/ ./conf && rm -rf mycat
  1. 修改mycat的conf下prototype的配置,修改其中对应的user(用户),password(密码),url中的ip
{
    "dbType":"mysql",
    "idleTimeout":60000,
    "initSqls":[],
    "initSqlsGetConnection":true,
    "instanceType":"READ_WRITE",
    "maxCon":1000,
    "maxConnectTimeout":3000,
    "maxRetryCount":5,
    "minCon":1,
    "name":"prototypeDs",
    "password":"123456",
    "type":"JDBC",
    "url":"jdbc:mysql://169.254.212.3:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
    "user":"mycat",
    "weight":0
}
  1. 启动镜像
docker run --name mycat8 --restart=always \
  -p 8066:8066 \
  -p 1984:1984 \
  -v /data/mycat2/conf:/usr/local/mycat/conf \
  -v /data/mycat2/logs:/usr/local/mycat/logs \
  -d --privileged=true \
  mycat.org.cn/mycat2:20220513
  1. 测试连接
# 没错,就是用mysql客户端连接
mysql -uroot -p123456 -h 192.168.71.130 -P 8066

mycat2可以做什么

  1. 读写分离
    在这里插入图片描述

  2. 数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)

在这里插入图片描述

  1. 多数据源整合
    在这里插入图片描述

原理

Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

在这里插入图片描述
这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用Mycat 还是 MySQL。

映射模型区别:
在这里插入图片描述
在这里插入图片描述

mycat2相关概念

1、分库分表
按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路径的分表。
解读:分库:一个电商项目,分为用户库、订单库等等。
分表:一张订单表数据数百万,达到 MySQL 单表瓶颈,分到多个数据库中的多张表

2、逻辑库
数据库代理中的数据库,它可以包含多个逻辑表。
解读:Mycat 里定义的库,在逻辑上存在,物理上在 MySQL 里并不存在。有可能是多个 MySQL 数据库共同组成一个逻辑库。类似多个小孩叠罗汉穿上外套,扮演一个大人。

3、逻辑表
数据库代理中的表,它可以映射代理连接的数据库中的表(物理表)
解读:Mycat 里定义的表,在逻辑上存在,可以映射真实的 MySQL 数据库的表。可以一对一,也可以一对多。

4、物理库
数据库代理连接的数据库中的库
解读:MySQL 真实的数据库。

5、物理表
数据库代理连接的数据库中的表
解读:MySQL 真实的数据库中的真实数据表。

6、拆分键
即分片键,描述拆分逻辑表的数据规则的字段
解读:比如订单表可以按照归属的用户 id 拆分,用户 id 就是拆分键

7、物理分表
指已经进行数据拆分的,在数据库上面的物理表,是分片表的一个分区
解读:多个物理分表里的数据汇总就是逻辑表的全部数据

8、物理分库
一般指包含多个物理分表的库
解读:参与数据分片的实际数据库

9、分库
一般指通过多个数据库拆分分片表,每个数据库一个物理分表,物理分库名字相同
解读:分库是个动作,需要多个数据库参与。就像多个数据库是多个盘子,分库就是把一串数据葡萄,分到各个盘子里,而查询数据时,所有盘子的葡萄又通过 Mycat2 组成了完整的一串葡萄。

10、分片表,水平分片表
按照一定规则把数据拆分成多个分区的表,在分库分表语境下,它属于逻辑表的一种
解读:安按照规则拆分数据,上个例子中的那串葡萄。

11、单表
没有分片,没有数据冗余的表,
解读:没有拆分数据,也没有复制数据到别的库的表。

12、全局表,广播表
每个数据库实例都冗余全量数据的逻辑表. 它通过表数据冗余,使分片表的分区与该表的数据在同一个数据库实例里,达到 join 运算能够直接在该数据库实例里执行.它的数据一致一般是通过数据库代理分发 SQL 实现. 也有基于集群日志的实现
解读:例如系统中翻译字段的字典表,每个分片表都需要完整的字典数据翻译字段。

13、ER 表
狭义指父子表中的子表,它的分片键指向父表的分片键,而且两表的分片算法相同广义指具有相同数据分布的一组表
解读:关联别的表的子表,例如:订单详情表就是订单表的 ER 表

14、集群
多个数据节点组成的逻辑节点.在 mycat2 里,它是把对多个数据源地址视为一个数据源地址(名称),并提供自动故障恢复,转移,即实现高可用,负载均衡的组件。
解读:集群就是高可用、负载均衡的代名词

15、数据源
连接后端数据库的组件,它是数据库代理中连接后端数据库的客户端
解读:Mycat 通过数据源连接 MySQL 数据库

16、原型库(prototype)
原型库是 Mycat2 后面的数据库,比如 mysql 库
解读:原型库就是存储数据的真实数据库,配置数据源时必须指定原型库

配置文件

服务(server)

目录:mycat/conf,默认配置即可

在这里插入图片描述

用户(user)

  1. 目录:mycat/conf/users,配置用户相关信息
  2. 命名方式,{用户名}.user.json
  3. 配置内容:
vim mycat/conf/users/root.user.json
{
"ip":null,
"password":"123456",
"transactionType":"xa",
"username":"root",
"isolation":3
}
#字段含义
# ip:客户端访问ip,建议为空,填写后会对客户端的ip进行限制

# username:用户名

# password:密码

# isolation:设置初始化的事务隔离级别
# READ_UNCOMMITTED:1
# READ_COMMITTED:2
# REPEATED_READ:3,默认
# SERIALIZABLE:4

# transactionType:事务类型
# 可选值:
# proxy 本地事务,在涉及大于 1 个数据库的事务,commit 阶段失败会导致不一致,但是兼容性最好
# xa 事务,需要确认存储节点集群类型是否支持 XA
# 可以通过语句实现切换
# set transaction_policy = 'xa'
# set transaction_policy = 'proxy' 可以通过语句查询
# SELECT @@transaction_policy

数据源(datasource)

  1. 所在目录:mycat/conf/datasources,配置Mycat连接的数据源信息
  2. 命名方式:{数据源名字}.datasource.json
  3. 配置:
vim mycat/conf/datasources/ prototype. datasources.json
{
"dbType": "mysql",
"idleTimeout": 60000,
"initSqls": [],
"initSqlsGetConnection": true,
"instanceType": "READ_WRITE",
"maxCon": 1000,
"maxConnectTimeout": 3000,
"maxRetryCount": 5,
"minCon": 1,
"name": "prototype",
"password": "123456",
"type": "JDBC",
"url":
"jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&serverTimezone=UTC",
"user": "root",
"weight": 0,
"queryTimeout":30,//mills
}
#字段含义
# dbType:数据库类型,mysql

# name:用户名

# password:密码

# type:数据源类型,默认 JDBC

# url:访问数据库地址

# idleTimeout:空闲连接超时时间

# initSqls:初始化sql

# initSqlsGetConnection:对于 jdbc 每次获取连接是否都执行 initSqls

# instanceType:配置实例只读还是读写
# 可选值:
# READ_WRITE,READ,WRITE

# weight :负载均衡权重

# 连接相关配置
# "maxCon": 1000,
# "maxConnectTimeout": 3000,
# "maxRetryCount": 5,
# "minCon": 1

集群(cluster)

  1. 所在目录:mycat/conf/clusters,配置集群信息
  2. 命名方式:{集群名字}.cluster.json
  3. 配置
vim mycat/conf/clusters/prototype.cluster.json
{
	"clusterType": "MASTER_SLAVE",
	"heartbeat": {
		"heartbeatTimeout": 1000,
		# 2021-6-4前是maxRetry,后更正为maxRetryCount 
		"maxRetryCount": 3, 
		"minSwitchTimeInterval": 300,
		"slaveThreshold": 0
	},
	# 配置多个主节点,在主挂的时候会选一个检测存活的数据源作为主节点
	"masters": [ 
		"prototypeDs"
	],
	# 配置多个从节点
	"replicas": [ //配置多个从节点
		"xxxx"
	],
	"maxCon": 200,
	"name": "prototype",
	"readBalanceType": "BALANCE_ALL",
	"switchType": "SWITCH",
	# -------------------------------------------------------可选
	# MySQL集群心跳周期,配置则开启集群心跳,Mycat主动检测主从延迟以及高可用主从切换
	"timer": {
		"initialDelay": 30,
		"period": 5,
		"timeUnit": "SECONDS"
	},
	# readBalanceName:"BALANCE_ALL",
	# writeBalanceName:"BALANCE_ALL",
}

# 字段含义
# clusterType:集群类型
# 可选值:
# SINGLE_NODE:单一节点
# MASTER_SLAVE:普通主从
# GARELA_CLUSTER:garela cluster/PXC 集群
# MHA:MHA 集群
# MGR:MGR 集群

# readBalanceType:查询负载均衡策略
# 可选值:
# BALANCE_ALL(默认值)
# 获取集群中所有数据源
# BALANCE_ALL_READ
# 获取集群中允许读的数据源
# BALANCE_READ_WRITE
# 获取集群中允许读写的数据源,但允许读的数据源优先
# BALANCE_NONE
# 获取集群中允许写数据源,即主节点中选择

# switchType:切换类型
# 可选值:
# NOT_SWITCH:不进行主从切换
# SWITCH:进行主从切换

逻辑库表(schema)

  1. 所在目录:mycat/conf/schemas,配置逻辑库表,实现分库分表
  2. 命名方式:{库名}.schema.json
  3. 配置:
vim mycat/conf/schemas/mydb1.schema.json
#库配置
{
	"schemaName": "mydb",
	"targetName": "prototype"
}
# schemaName:逻辑库名
# targetName:目的数据源或集群
# targetName自动从prototype目标加载test库下的物理表或者视图作为单表,prototype必须是mysql服务器


#单表配置
{
	"schemaName": "mysql-test",
	"normalTables": {
		"role_edges": {
			"createTableSQL":null,//可选
			"locality": {
				"schemaName": "mysql",//物理库,可选
				"tableName": "role_edges",//物理表,可选
				"targetName": "prototype"//指向集群,或者数据源
			}
		}
	}
	...
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值