前言
2022/8/23 8:41
暑假持续学习ing
推荐
Mycat
资源下载
第一章 入门概述
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的官网
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-安装教程
两个虚拟机 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 踩坑实践
CentOS7 mycat 连接mysql8.x 配置及报错解决