Mycat【Java提高】1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 配置及报错解决


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10月前
|
存储 Java 关系型数据库
Mycat【Java提高】3
Mycat【Java提高】3
68 0
|
10月前
|
Java Linux 数据库
Mycat【Java提高】4
Mycat【Java提高】4
65 1
|
10月前
|
关系型数据库 MySQL Java
Mycat【Java提高】2
Mycat【Java提高】2
59 0
|
10月前
|
SQL 监控 Java
Mycat【Java提高】5
Mycat【Java提高】5
97 0
|
Oracle Java 关系型数据库
Mycat(6):聊天消息表,按月分表 java客户端跨月查询数据
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47039103 未经博主允许不得转载。 1,业务需求 上次分析聊天业务按照月进行拆。http://blog.csdn.net/freewebsys/article/details/47003577 具体拆分方案已经有了: 但是在操作的时候还是有点小问
1289 0
|
3天前
|
Java 程序员
从菜鸟到大神:JAVA多线程通信的wait()、notify()、notifyAll()之旅
【6月更文挑战第21天】Java多线程核心在于wait(), notify(), notifyAll(),它们用于线程间通信与同步,确保数据一致性。wait()让线程释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒所有线程。这些方法在解决生产者-消费者问题等场景中扮演关键角色,是程序员从新手到专家进阶的必经之路。通过学习和实践,每个程序员都能在多线程编程的挑战中成长。
|
3天前
|
Java
并发编程的艺术:Java线程与锁机制探索
【6月更文挑战第21天】**并发编程的艺术:Java线程与锁机制探索** 在多核时代,掌握并发编程至关重要。本文探讨Java中线程创建(`Thread`或`Runnable`)、线程同步(`synchronized`关键字与`Lock`接口)及线程池(`ExecutorService`)的使用。同时,警惕并发问题,如死锁和饥饿,遵循最佳实践以确保应用的高效和健壮。
10 2
|
3天前
|
Java
Java Socket编程与多线程:提升客户端-服务器通信的并发性能
【6月更文挑战第21天】Java网络编程中,Socket结合多线程提升并发性能,服务器对每个客户端连接启动新线程处理,如示例所示,实现每个客户端的独立操作。多线程利用多核处理器能力,避免串行等待,提升响应速度。防止死锁需减少共享资源,统一锁定顺序,使用超时和重试策略。使用synchronized、ReentrantLock等维持数据一致性。多线程带来性能提升的同时,也伴随复杂性和挑战。
|
4天前
|
安全 Java
JAVA多线程通信新解:wait()、notify()、notifyAll()的实用技巧
【6月更文挑战第20天】Java多线程中,`wait()`, `notify()`和`notifyAll()`用于线程通信。在生产者-消费者模型示例中,它们确保线程同步。`synchronized`保证安全,`wait()`在循环内防止虚假唤醒,`notifyAll()`避免唤醒单一线程问题。关键技巧包括:循环内调用`wait()`,优先使用`notifyAll()`以保证可靠性,以及确保线程安全和正确处理`InterruptedException`。
|
4天前
|
安全 Java
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
【6月更文挑战第20天】JAVA多线程中,wait(), notify(), notifyAll()是Object类的关键同步机制。wait()让线程等待并释放锁,直到被notify()或notifyAll()唤醒或超时。它们必须在同步块中使用,持有锁的线程调用。notify()唤醒一个等待线程,notifyAll()唤醒所有。最佳实践包括:与synchronized结合,循环检查条件,避免循环内notify(),通常优先使用notifyAll()。