Mycat【Java提高】1

本文涉及的产品
RDSClaw,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: Mycat【Java提高】1

前言


2022/8/23 8:41


暑假持续学习ing


推荐

【尚硅谷】Mycat核心教程(mycat实战应用)

Mycat的使用_尚硅谷视频学习笔记

Mycat

资源下载

尚硅谷mycat配套资源.7z

第一章 入门概述

1.1 是什么

Mycat是数据库中间件

1、数据库中间件

中间件:是一类连接软件和应用的计算机软件,以便软件各部件之间的沟通。

例子:Tomcat, web中间件。

数据库中间件:连接java应用的应用程序和数据库。
2、为什么要用Mycat?

1、java与数据库紧耦合

2、高访问量高并发对数据库的压力

3、读写请求数据不一致

3、数据库中间件对比



① Cobar 属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。


② Mycat 是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。


③ OneProxy 基于MySQL官方的proxy思想利用c语言进行开发的,OneProxy是一款商业 收费 的中间件。舍弃了一些功能,专注在性能和稳定性上 。


④ kingshard 由小团队用go语言开发,还需要发展,需要不断完善。


⑤ Vitess 是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用 需要大量改造成本。


⑥ Atlas 是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。


⑦ MaxScale 是mariadb(MySQL原作者维护的一个版本) 研发的中间件


⑧ MySQLRoute 是MySQL官方Oracle公司发布的中间件

4、Mycat的官网

http://www.mycat.io/

http://dl.mycat.io

1.2 干什么

1、读写分离



2、数据分片

垂直拆分(分库)、 水平拆分(分表)、 垂直+水平拆分(分库分表)


3、多数据源整合



1.3 原理

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

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

第二章 安装启动

Linux下安装几种方法
1、rpm万式
  .rpm安装包,按顺序安装
2、yum方式
  需要连网
3、解压后既可使用
4、解压后编译安装

2.1 安装

对应mysql5.7

mysq8.0不好弄

准备工作
下载地址:https://github.com/MyCATApache

下载版本:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz


下载地址:http://dl.mycat.org.cn/1.6-RELEASE/

源自Mycat-安装教程


克隆虚拟机【Linux】

两个虚拟机
mysql1  139 主机
mysqlS1 140 从机

1、 解压后即可使用:解压缩文件拷贝到 linux 下 /usr/local/

解压

[root@centos7-mysql-1 ~]# cd /opt
[root@centos7-mysql-1 opt]# ll
总用量 1560
-rw-r--r--. 1 root root 1597440 8月  23 10:59 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
drwxr-xr-x. 2 root root       6 10月 31 2018 rh
[root@centos7-mysql-1 opt]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 
mycat/bin/wrapper-linux-ppc-64
mycat/bin/wrapper-linux-x86-64
mycat/bin/wrapper-linux-x86-32
mycat/bin/mycat
mycat/lib/zookeeper-3.4.6.jar
mycat/lib/jline-0.9.94.jar
mycat/lib/ehcache-core-2.6.11.jar
mycat/lib/log4j-1.2.17.jar
mycat/lib/fastjson-1.2.12.jar
mycat/lib/curator-client-2.11.0.jar
mycat/lib/joda-time-2.9.3.jar
mycat/lib/log4j-slf4j-impl-2.5.jar
mycat/lib/libwrapper-linux-x86-32.so
mycat/lib/netty-3.7.0.Final.jar
mycat/lib/druid-1.0.26.jar
mycat/lib/log4j-api-2.5.jar
mycat/lib/mapdb-1.0.7.jar
mycat/lib/slf4j-api-1.6.1.jar
mycat/lib/univocity-parsers-2.2.1.jar
mycat/lib/hamcrest-core-1.3.jar
mycat/lib/Mycat-server-1.6-RELEASE.jar
mycat/lib/objenesis-1.2.jar
mycat/lib/leveldb-api-0.7.jar
mycat/lib/hamcrest-library-1.3.jar
mycat/lib/wrapper.jar
mycat/lib/commons-lang-2.6.jar
mycat/lib/reflectasm-1.03.jar
mycat/lib/mongo-java-driver-2.11.4.jar
mycat/lib/guava-19.0.jar
mycat/lib/curator-recipes-2.11.0.jar
mycat/lib/curator-framework-2.11.0.jar
mycat/lib/libwrapper-linux-ppc-64.so
mycat/lib/log4j-core-2.5.jar
mycat/lib/leveldb-0.7.jar
mycat/lib/sequoiadb-driver-1.12.jar
mycat/lib/mysql-binlog-connector-java-0.4.1.jar
mycat/lib/kryo-2.10.jar
mycat/lib/jsr305-2.0.3.jar
mycat/lib/commons-collections-3.2.1.jar
mycat/lib/disruptor-3.3.4.jar
mycat/lib/log4j-1.2-api-2.5.jar
mycat/lib/velocity-1.7.jar
mycat/lib/libwrapper-linux-x86-64.so
mycat/lib/dom4j-1.6.1.jar
mycat/lib/minlog-1.2.jar
mycat/lib/asm-4.0.jar
mycat/conf/wrapper.conf
mycat/conf/
mycat/conf/zkconf/
mycat/conf/zkdownload/
mycat/conf/sequence_time_conf.properties
mycat/conf/sharding-by-enum.txt
mycat/conf/migrateTables.properties
mycat/conf/zkconf/sequence_time_conf.properties
mycat/conf/zkconf/sharding-by-enum.txt
mycat/conf/zkconf/ehcache.xml
mycat/conf/zkconf/index_to_charset.properties
mycat/conf/zkconf/partition-range-mod.txt
mycat/conf/zkconf/sequence_db_conf.properties
mycat/conf/zkconf/sequence_time_conf-mycat_fz_01.properties
mycat/conf/zkconf/cacheservice.properties
mycat/conf/zkconf/partition-hash-int.txt
mycat/conf/zkconf/autopartition-long.txt
mycat/conf/zkconf/server-mycat_fz_01.xml
mycat/conf/zkconf/auto-sharding-long.txt
mycat/conf/zkconf/rule.xml
mycat/conf/zkconf/auto-sharding-rang-mod.txt
mycat/conf/zkconf/sequence_distributed_conf.properties
mycat/conf/zkconf/sequence_distributed_conf-mycat_fz_01.properties
mycat/conf/zkconf/sequence_conf.properties
mycat/conf/zkconf/schema.xml
mycat/conf/zkconf/server.xml
mycat/conf/ehcache.xml
mycat/conf/index_to_charset.properties
mycat/conf/partition-range-mod.txt
mycat/conf/sequence_db_conf.properties
mycat/conf/cacheservice.properties
mycat/conf/partition-hash-int.txt
mycat/conf/autopartition-long.txt
mycat/conf/auto-sharding-long.txt
mycat/conf/rule.xml
mycat/conf/auto-sharding-rang-mod.txt
mycat/conf/sequence_distributed_conf.properties
mycat/conf/sequence_conf.properties
mycat/conf/myid.properties
mycat/conf/schema.xml
mycat/conf/zkdownload/auto-sharding-long.txt
mycat/conf/server.xml
mycat/version.txt
mycat/conf/log4j2.xml
mycat/bin/init_zk_data.sh
mycat/bin/startup_nowrap.sh
mycat/bin/dataMigrate.sh
mycat/bin/rehash.sh
mycat/logs/
mycat/catlet/
[root@centos7-mysql-1 opt]# 
[root@centos7-mycat opt]# ll
总用量 1560
drwxr-xr-x. 4 root root      28 8月  23 11:02 mycat
-rw-r--r--. 1 root root 1597440 8月  23 10:59 Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
drwxr-xr-x. 2 root root       6 10月 31 2018 rh
[root@centos7-mysql-1 opt]# 

拷贝

[root@centos7-mycat opt]# cp -r mycat /usr/local/
[root@centos7-mycat opt]# cd /usr/local/
[root@centos7-mycat local]# ll
总用量 0
drwxr-xr-x. 2 root root  6 4月  11 2018 bin
drwxr-xr-x. 2 root root  6 4月  11 2018 etc
drwxr-xr-x. 2 root root  6 4月  11 2018 games
drwxr-xr-x. 2 root root  6 4月  11 2018 include
drwxr-xr-x. 2 root root  6 4月  11 2018 lib
drwxr-xr-x. 2 root root  6 4月  11 2018 lib64
drwxr-xr-x. 2 root root  6 4月  11 2018 libexec
drwxr-xr-x. 4 root root 28 8月  23 11:04 mycat
drwxr-xr-x. 2 root root  6 4月  11 2018 sbin
drwxr-xr-x. 5 root root 49 7月  25 15:35 share
drwxr-xr-x. 2 root root  6 4月  11 2018 src
[root@centos7-mysql-1 local]# cd mycat
[root@centos7-mysql-1 mycat]# ll
总用量 12
drwxr-xr-x. 2 root root  209 8月  23 11:33 bin
drwxr-xr-x. 2 root root    6 8月  23 11:33 catlet
drwxr-xr-x. 4 root root 4096 8月  23 11:33 conf
drwxr-xr-x. 2 root root 4096 8月  23 11:33 lib
drwxr-xr-x. 2 root root    6 8月  23 11:33 logs
-rwxr-xr-x. 1 root root  217 8月  23 11:33 version.txt
[root@centos7-mysql-1 mycat]# 

2、 三个配置文件

[root@centos7-mysql-1 mycat]# cd conf

① schema.xml: 定义逻辑库,表、分片节点等内容

② rule.xml: 定义分片规则

③ server.xml: 定义用户以及系统相关变量,如端口等

2.2 启动

1、 修改配置文件server.xml

修改root用户信息name改为mycat,与MySQL区分, 如下:


mycat 用户 密码 123456
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property> 逻辑库
</user>


2、修改配置文件 schema.xml

删除< schema>标签间的表信息, < dataNode>标签只留一个,< dataHost> 标签只留一个, < WriteHost>< ReadHost>只留一对

:set nu #vim 显示行号
: d 27  #vim 删除从6到32
dd #vim 删除当前行
  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  </schema>

注意

testdb 用于mycat操作真实数据库
writeHost mysql root的密码是123456(我自己的)
readHost  mysql root的密码是123456(我自己的)

完整

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="host1" database="testdb" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.253.139:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS1" url="192.168.253.140:3306" user="root" password="123456" />
                </writeHost>
        </dataHost>
</mycat:schema>

另外:在wrapper.conf配置文件 添加

wrapper.ping.timeout=120
wrapper.startup.timeout=300

3、 验证数据库访问情况

Mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况。

mysql -uroot -p123123 -h 192.168.140.128 -P 3306
mysql -uroot -p123123 -h 192.168.140.127 -P 3306
#如远程访问报错,请建对应用户
grant all privileges on *.* to root@'缺少的host' identified by '123123';

root 密码123456

远程访问 140 OK

远程访问 139 OK


4、 启动程序

① 控制台启动 : 去 mycat/bin 目录下执行 ./mycat console

② 后台启动 :去 mycat/bin 目录下 ./mycat start

为了能第一时间看到启动日志,方便定位问题,我们选择①控制台启动。

linux中六个特殊目录,不用加./
bin       usr/bin    usr/local/bin
sbin      usr/sbin   usr/local/sbin
[root@centos7-mysql-1 /]# cd /usr/local/mycat/bin
[root@centos7-mysql-1 bin]# ./mycat console
---
jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log

5、 启动时可能出现报错

如果操作系统是 CentOS6.8, 可能会出现域名解析失败错误,如下图

可以按照以下步骤解决

① 用 vim 修改 /etc/hosts 文件, 在 127.0.0.1 后面增加你的机器名


② 修改后重新启动网络服务





2.3 登录

1、登录后台管理窗口

此登录方式用于管理维护 Mycat

mysql -umycat -p123456 -P 9066 -h 192.168.253.132
#常用命令如下:
show database

show @@help;




2、登录数据窗口

此登录方式用于通过 Mycat 查询数据,我们选择这种方式访问 Mycat

mysql -umycat -p123456 -P 8066 -h 192.168.253.132   --default_auth=mysql_native_password

mysql8.0以上的版本,后边再加上 --default-auth=mysql_native_password

[root@centos7-mysql-1 conf]# mysql -umycat -p123456 -h 192.168.253.132 -P 8066   --default-auth=mysql_native_password

参考

mysql 8驱动使用mycat_Mycat 整合 MySQL 8.x 踩坑实践

总结一下mysql8使用mycat做主从复制的坑

CentOS7 mycat 连接mysql8.x 配置及报错解决


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
SQL 监控 Java
Mycat【Java提高】5
Mycat【Java提高】5
216 0
|
Java Linux 数据库
Mycat【Java提高】4
Mycat【Java提高】4
247 1
|
存储 Java 关系型数据库
Mycat【Java提高】3
Mycat【Java提高】3
274 0
|
关系型数据库 MySQL Java
Mycat【Java提高】2
Mycat【Java提高】2
154 0
|
Oracle Java 关系型数据库
Mycat(6):聊天消息表,按月分表 java客户端跨月查询数据
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47039103 未经博主允许不得转载。 1,业务需求 上次分析聊天业务按照月进行拆。http://blog.csdn.net/freewebsys/article/details/47003577 具体拆分方案已经有了: 但是在操作的时候还是有点小问
1439 0
|
6月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
337 1
|
6月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
337 1
|
7月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
322 0
|
7月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
502 16