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 读写分离配置(详解)的更多相关文章

  1. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  2. Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

    一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...

  3. MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件.运行在代码应用和MySQL数据库之间的应用. 前身 : cor ...

  4. Log4j配置详解(转)

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  5. Log4J日志配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  6. log4j.properties配置详解(转)

    本篇文章转自http://it.oyksoft.com/log4j/ 非常感谢原创作者的辛勤编写与分享. 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders ...

  7. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  8. crossdomain.xml的配置详解

    目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...

  9. 【转】Nginx+php-fpm+MySQL分离部署详解

    转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...

  10. Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)

    1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...

随机推荐

  1. SQL server跨库链接服务器

    SQL server进阶技能篇:SQL的跨库查询与链接服务器 - 知乎 (zhihu.com)各位小伙伴们,关于MSSQL的基本技能篇前面一共写了10篇,也基本上算是告一段落,接下来将开始介绍进阶技能 ...

  2. Power BI: 设置切片器只能影响到指定的图表

    如下所示: 表一和表二的数据都来源于Staff表,切片器也来源于Staff表,但是希望当切片器的值发生变化时,只会影响到表二,表一永远显示所有的数据,不受切片器的影响. 做法如下: 选中切片器,菜单栏 ...

  3. 使用 Git 时出现 unable to access,如何解决?

    回答重点 这个问题通常是由于网络访问问题.Git 配置错误或代理设置问题引起的.常见的解决方案: 1)检查网络连接:确保可以访问外部网络,尤其是 Git 仓库所在的服务器. 2)检查 Git 配置:使 ...

  4. java 2D 绘图

    简介 java 2D绘图 code /* * @Author: your name * @Date: 2020-10-28 21:36:29 * @LastEditTime: 2020-10-28 2 ...

  5. 低代码开发平台,快速提升API开发效率

    RestCloud低代码开发平台相比于传统API开发模式具有更轻量级.更快速.更全面.更低代码量.更易于学习等特点,是完全自主研发的基于微服务架构的专注API高效开发的专业化平台,通过平台可以实现无代 ...

  6. 干翻 Typora!MilkUp:完全免费的桌面端 Markdown 编辑器!

    不知道大家平时写 markdown 都是用什么软件呢?是多端同步的印象笔记?还是 vscode 内置编辑器?还是大名鼎鼎的 typora?你不会用记事本在写 markdown 吧? 不过据说微软已经把 ...

  7. Win11电脑设置系统还原点的问题

    有雨林木风官网用户,问小编在原版win11系统里面怎么设置系统还原点?先来说说,在Windows11系统中的系统还原点功能,只要系统有什么问题,我们可以还原这个备份的还原点,就不用重新安装一些常用的软 ...

  8. JS slice(0);克隆数组

    // 克隆 const cloneArr1 = arr1.slice(0);

  9. SpringBoot系列之集成EasyExcel实现百万级别的数据导入导出实践

    Spring Boot 系列:集成 EasyExcel 实现百万级数据导入导出实战 SpringBoot与微服务实践系列博客 本文基于开源项目 springboot-easyexcel-batch 进 ...

  10. PS一键图片智能添加噪点脚本 GrainLab for Photoshop安装与使用方法

    GrainLab 是一款专为 Photoshop 设计的「一键智能噪点」脚本,可在 3 秒内为任意图像添加电影级颗粒.胶片杂讯或复古质感.脚本内置 8 组预设(胶片.数码.复古.粗颗粒等),支持自定义 ...