mycat2 读写分离配置(详解)
mycat2相对mycat1来说升级还挺多的,但是全网资料太少了,这里尽可能详细的将读写分离说清楚,目前这套配置已经在我司生产环境应用,日UV6W左右,暂时没发现问题。
一、 下载和安装
1.1下载
下需要两个包(两个包的版本可以不一致,更新版本只需要升级依赖包即可):
1、 主程序安装包
mycat2-install-template-1.21.zip
2、 依赖包
mycat2-1.21-release-jar-with-dependencies.jar
2.2安装
java -version #检查是否安装
yum -y list java* # 查看JDK软件包列表
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel#安装JDK软件包
java -version
#配置环境变量
which java #查看JDK的安装路径显示:/usr/bin/java
ls -lrt /usr/bin/java
显示:lrwxrwxrwx. 1 root root 22 Aug 17 15:12 /usr/bin/java -> /etc/alternatives/java
ls -lrt /etc/alternatives/java
显示:
lrwxrwxrwx. 1 root root 46 Aug 17 15:12 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/bin/java
#配置JDK环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile #使环境变量生效
cp mycat2-install-template-1.21.zip /data #拷贝主程序到安装目录/data
cd /data
unzip mycat2-install-template-1.21.zip #解压主程序, 会自动生成mycat文件夹。
cp mycat2-1.21-release-jar-with-dependencies.jar /data/mycat/lib #将依赖包拷贝至 /data/mycat/lib下边
chmod +x /data/mycata #授予/data/mycat/bin 文件夹里边可执行权限:
二、 用户配置
这里的用户名用来登录mycat和mysql没有关系,mycat根据后边datasource里边的用户信息来登录mysql.
cd /data/myca /conf/users
vim root.user.json
{
"dialect":"mysql",
"ip":null,
"password":"XXXXXXX",
"transactionType":"xa",
"username":"root"
}
三、 读写分离配置
2.1prototypeDs原型库配置
cd /data/mycat/mycat/conf/datasources
vim prototypeDs.datasource.json
{
// 数据库类型
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型:READ、WRITE、READ_WRITE。原型库对数据库需要是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称,这里不要修改
"name":"prototypeDs",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 数据库连接
"url":"jdbc:mysql://192.168.10.80:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
#其中mycat为原型库库名,库名可以自己定义,用来预存mycat需要用到的一些信息。mycat会自行建立,如果建立失败,可以手动先在数据库建立后再启动mycat2,推荐自行建立。
#编码推荐utf8mb4_0900_ai_ci也可以utf8mb4_general_ci
手动建立sql:
CREATE DATABASE IF NOT EXISTS `mycat`;
USE `mycat`;
DROP TABLE IF EXISTS `analyze_table`;
CREATE TABLE `analyze_table` (
`table_rows` bigint(20) NOT NULL,
`name` varchar(64) NOT NULL
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (
`key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`value` longtext,
`version` bigint(20) DEFAULT NULL,
`secondKey` longtext,
`deleted` tinyint(1) DEFAULT '0'
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `replica_log`;
CREATE TABLE `replica_log` (
`name` varchar(22) DEFAULT NULL,
`dsNames` text,
`time` datetime DEFAULT NULL
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `spm_baseline`;
CREATE TABLE `spm_baseline` (
`id` bigint(22) NOT NULL AUTO_INCREMENT,
`fix_plan_id` bigint(22) DEFAULT NULL,
`constraint` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`extra_constraint` longtext,
PRIMARY KEY (`id`),
UNIQUE KEY `constraint_index` (`constraint`(22)),
KEY `id` (`id`)
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `spm_plan`;
CREATE TABLE `spm_plan` (
`id` bigint(22) NOT NULL AUTO_INCREMENT,
`sql` longtext,
`rel` longtext,
`baseline_id` bigint(22) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `sql_log`;
CREATE TABLE `sql_log` (
`instanceId` bigint(20) DEFAULT NULL,
`user` varchar(64) DEFAULT NULL,
`connectionId` bigint(20) DEFAULT NULL,
`ip` varchar(22) DEFAULT NULL,
`port` bigint(20) DEFAULT NULL,
`traceId` varchar(22) NOT NULL,
`hash` varchar(22) DEFAULT NULL,
`sqlType` varchar(22) DEFAULT NULL,
`sql` longtext,
`transactionId` varchar(22) DEFAULT NULL,
`sqlTime` bigint(20) DEFAULT NULL,
`responseTime` datetime DEFAULT NULL,
`affectRow` int(11) DEFAULT NULL,
`result` tinyint(1) DEFAULT NULL,
`externalMessage` tinytext,
PRIMARY KEY (`traceId`)
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `variable`;
CREATE TABLE `variable` (
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`value` varchar(22) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
DROP TABLE IF EXISTS `xa_log`;
CREATE TABLE `xa_log` (
`xid` bigint(20) NOT NULL,
PRIMARY KEY (`xid`)
) ENGINE = InnoDB CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
2.2datasource数据源配置(两主一从)
1.2.1数据源164(读写)服务器配置
复制一下prototypeDs.datasource.json
#/information_return 为需要被访问的数据库名称。
#如果instanceType是READ_WRITE的类型,被设置到replicas,对该集群是READ的。但是被设置到masters则为READ_WRITE
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
//name字段在后边集群中会用到
"name":"164",
"password":"Zht@2650896",
"type":"JDBC",
"url":"jdbc:mysql://19.50.67.164:3306/information_return?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"xinxishenbao",
"weight":0
}
1.2.2数据源174(读写)服务器配置
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"174",
"password":"Zht@2650896",
"type":"JDBC",
"url":"jdbc:mysql://19.50.67.174:3306/information_return?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"xinxishenbao",
"weight":0
}
1.2.3数据源169(只读)服务器配置
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"169",
"password":"Zht@2650896",
"type":"JDBC",
"url":"jdbc:mysql://19.50.67.169:3306/information_return?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"xinxishenbao",
"weight":0
}
2.3cluster集群配置
复制prototype.cluster.json
cd /data/ mycat/conf/clusters
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"164",
"174"
],
"replicas":[
"169"
],
"maxCon":200,
//name在逻辑表映射的时候会用到
"name":"xinxishenbao",
"readBalanceType":"BALANCE_READ_WRITE",
//由于从数据库是只读的,所以不切换主从。
"switchType":"NOT_SWITCH"
}
readBalanceType可选值:
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
2.4 schema 逻辑库映射
cd /data/mycat/mycat/conf/schemas
vim xinxishenbo.schema.json
{
"customTables": {},
"globalTables": {},
"normalTables": {},
//逻辑库名,也是mysql中对应的物理数据库名
"schemaName": "information_return",
"shardingTables": {},
//对应cluster集群中的name字段。如果不做集群则对应DataSource中的name字段。
"targetName": "xinxishenbao"
}
如果需要映射多个库,则配置多个数据源,建立多个XX.schema.json进行映射
四、 mycat启动命令
./bin/mycat start
# 查看状态
./bin/mycat status
# 停止
./bin/mycat stop
# 暂停
./bin/mycat pause
# 重启
./bin/mycat restart
# 前台运行
./bin/mycat console
# 查看日志文件
tail -f /home/papis/mycat2/mycat/logs/wrapper.log
五、 问题
5.1 读写分离索引不显示
部分mycat虚拟表不全,表信息显示不全面,可能出现视图显示在表里边,或者索引无法显示。可配置information_schema.schema.json添加如下内容,重复部分进行覆盖即可。(框架里有用到某些系统表)
{
"customTables": {},
"globalTables": {},
"normalTables": {
"statistics": {
"locality": {
"schemaName": "information_schema",
"tableName": "statistics",
"targetName": "prototype"
}
},
"referential_constraints": {
"locality": {
"schemaName": "information_schema",
"tableName": "referential_constraints",
"targetName": "prototype"
}
},
"key_column_usage": {
"locality": {
"schemaName": "information_schema",
"tableName": "key_column_usage",
"targetName": "prototype"
}
},
"table_constraints": {
"locality": {
"schemaName": "information_schema",
"tableName": "table_constraints",
"targetName": "prototype"
}
},
"columns": {
"locality": {
"schemaName": "information_schema",
"tableName": "columns",
"targetName": "prototype"
}
}
},
"schemaName": "information_schema",
"shardingTables": {},
"views": {}
}
5.2 视图被当做表处理的问题
mycat2里面视图会被当做逻辑表显示,但是不影响物理库中的视图和表结构。
5.3 新建表无法自动刷新的问题
mycat2加载后如果数据库有结构变动(比如新建表),无法自动更新,需要手动重启mycat,或者在命令行中输入/*+mycat:loadConfigFromFile{} */刷新。
mycat2 读写分离配置(详解)的更多相关文章
- ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)
ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...
- Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解
一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...
- MySQL+MyCat分库分表 读写分离配置
一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...
- Log4j配置详解(转)
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- Log4J日志配置详解
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- log4j.properties配置详解(转)
本篇文章转自http://it.oyksoft.com/log4j/ 非常感谢原创作者的辛勤编写与分享. 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders ...
- 日志分析工具ELK配置详解
日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...
- crossdomain.xml的配置详解
目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...
- 【转】Nginx+php-fpm+MySQL分离部署详解
转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
随机推荐
- vue的seo
我们知道,常规用 Vue/React 开发的是 SPA 应用. 但是天然的单页面应用 SEO 就是不好. 虽然说现在也有各种技术可以改善了,比如使用服务端渲染.静态页面生成,不过也存在各种缺点. 但是 ...
- 前端开发系列129-进阶篇之Throttle And Debounce
本文讨论前端开发中 函数防抖 和 函数节流,它们的应用.区别以及简单实现. 在前端开发中我们可能经常需要给(页面)标签绑定一些持续触发的事件,如 resize.scroll.input.mousemo ...
- 使用ETL进行数据接入的方式
数据接入 数据接入,作为现代信息技术架构中的一个关键环节,指的是将来自不同源头的数据整合到统一的数据平台或系统中.这一过程不仅是技术上的挑战,也涉及到组织结构.业务流程等多个层面的协调与优化.通过有效 ...
- 创建第一个Streamlit应用
创建应用程序 如果您已经顺利完成了前面的步骤,那么您很可能已经安装了 Streamlit 并在"基本概念"和"高级概念"部分中完成了基础操作.如果没有的话,现在 ...
- 【原创工具】简单实现云控Win电脑锁屏
手机云控 Windows 电脑锁屏 背景 在工作时,常会遇到这么一个场景:坐在电脑前办公,突然被叫了出去,可能出去只有一两分钟或几分钟,因此我不会将电脑锁屏,同时由于常用电脑做一些前台任务,电脑也不设 ...
- SciTech-OS-Linux-Device Driver: 英文原版电子书“Linux Device Drivers, Third Edition”
https://lwn.net/Kernel/LDD3/ Linux Device Drivers, Third EditionThis is the web site for the Third E ...
- 题解:Luogu-P8624 [蓝桥杯 2015 省 AB] 垒骰子
复习了一遍矩阵快速幂,感谢 @naroto2022 的讲课和分享的好题. 本题是一道动态规划结合矩阵加速的好题. 读完题考虑设计状态,记 \(f_{i,j}\) 为第 \(i\) 个骰子点数 \(j\ ...
- 扣子Coze智能体实战:自动化拆解抖音对标账号,输出完整分析报告(喂饭级教程)
大家好,我是汤师爷,专注AI智能体分享,致力于帮助100W人用智能体创富~ 作为短视频创作者,你是否经常遇到这样的困扰: 花了大量时间创作内容,却总是无法获得理想的播放量? 看到其他账号快速增长,却不 ...
- 深度解决Win10专业版占用100%磁盘的问题
有电脑基地的用户,反馈说win10专业版的电脑中,不知道什么缘故打开文件很慢,再一看吓了一跳,电脑磁盘占用100%了,感觉是不是电脑要炸了?其实不然,接下来,深度技术系统小编就来分享详细的解决方法. ...
- 大神U盘工具win10 pe uefi纯净版制作方法详解
现如今很多电脑都是使用uefi启动方式的了,今天MSDN123为各位看官推荐一款大神uefi启动u盘工具的制作方法.希望可以给有需要的小伙伴提供到帮助.方法如下:1.下载大神U盘工具UEFI版并安装至 ...