目录
🦐博客主页:大虾好吃吗的博客
🦐MySQL专栏:MySQL专栏地址
mycat目前已经出mycat2版本了,虽然还没有全面普及,但是大概这两年各大企业逐步升级mycat2,但是mycat1还是要有一定的了解。本次mycat分三章讲解,熟悉mycat1后,可以去官网下载一个mycat2学习。官网地址:上海云业网络科技有限公司
一、什么是MyCat
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID,通过远程可以直接当做数据库使用
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
二、为什么使用MyCat
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat
综上所述:Mycat作用为:能满足数据库数据大量存储;提高了查询性能。
读写分离
数据分片 垂直拆分(分库) 、 水平拆分(分表) 、 垂直+水平拆分(分库分表)
多数据源整合
三、数据库中间件对比
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公司发布的中间件
四、支持的数据库
支持MySQL、ORACLE、SQLServer等一些主流的数据库。
五、核心技术(分库分表)
数据库分片指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。
Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。
DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上
六、分片规则
前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难。
拓扑图如下:

master和slave搭建主从复制,这里就搭建一个简单地主从关系就可以。
1. master开启二进制日志、server_id
[root@master ~]# vim /etc/my.cnf
server_id=1
log_bin=mysql-bin
[root@master ~]# systemctl restart mysqld
[root@master ~]# mysql -uroot -p123 #登录mysql创建主从连接用户
#省略登录信息
mysql> grant replication slave on *.* to rep@'192.168.8.%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 446 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2. slave指定server_id、指定maste为8.20
[root@slave ~]# vim /etc/my.cnf
server_id=2
[root@slave ~]# systemctl restart mysqld
[root@slave ~]# mysql -uroot -p123 #登录mysql指定主为8.20
#省略登录信息
mysql> change master to
-> master_user='rep',
-> master_host='192.168.8.20',
-> master_port=3306,
-> master_password='123',
-> master_log_file='mysql-bin.000005',
-> master_log_pos=446;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.8.20
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 446
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#省略部分内容
1. master创建库、表、插入数据
mysql> create database mytest character set utf8;
Query OK, 1 row affected (0.01 sec)
mysql> use mytest
Database changed
mysql> create table tb1(
-> id int primary key,
-> name varchar(20));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tb1 values(1,'z3');
Query OK, 1 row affected (0.08 sec)
mysql> grant all on *.* to root@'%' identified by '123'; #提前创建一个root的远程用户,权限可以根据需求提供,如果没有创建,mycat则没有权限查看数据
Query OK, 0 rows affected, 1 warning (0.01 sec)
2. slave查看数据
mysql> select * from mytest.tb1;
+----+------+
| id | name |
+----+------+
| 1 | z3 |
+----+------+
1 row in set (0.00 sec)
1. 下载及安装
jdk:要求jdk必须是1.7及以上版本
Mysql:推荐mysql是5.5以上版本
Mycat:Mycat的官方网站:上海云业网络科技有限公司
下载地址: GitHub - MyCATApache/Mycat-download Mycat有windows、linux多种版本。
第一步:下载Mycat-server-xxxx-linux.tar.gz
第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。
第三步:进入mycat目录,启动mycat./mycat start 停止:./mycat stop
mycat支持的命令{ console | start | stop | restart | status |dump } Mycat的默认端口号为:8066
2. 配置文件的相关配置
①schema.xml: 定义逻辑库,表、分片节点等内容
②rule.xml: 定义分片规则
③server.xml: 定义用户以及系统相关变量,如端口等
准备好jdk、mycat软件包,解压到相应目录。
[root@mycat src]# tar zxf jdk-8u131-linux-x64.tar.gz
[root@mycat src]# mv jdk1.8.0_131/ /usr/local/java
[root@mycat src]# tar zxf Mycat-server-1.6.7.6-release-20220524173810-linux.tar.gz
[root@mycat src]# mv mycat/ /usr/local/mycat
[root@mycat src]# vim /etc/profile #添加path路径
export JAVA_HOME=/usr/local/java
export MYCAT_HOME=/usr/local/mycat
export PATH=$JAVA_HOME/bin:$PATH:$MYCAT_HOME/bin
[root@mycat src]# source /etc/profile
[root@mycat src]# java -version #查看jdk版本
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
[root@mycat src]# cd /usr/local/mycat/conf/
1. 修改server.xml 修改用户信息,与MySQL区分, 如下:
[root@mycat conf]# vim server.xml

2 . 修改schema.xml,这里只需要修改IP(如下图所示),其他的注释信息也被我删掉了,方便查看。
[root@mycat conf]# vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="mytest" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="jdbc:mysql://192.168.8.20:3306" user="root"
password="123">
<readHost host="hostS1" url="jdbc:mysql://192.168.8.30:3306" user="root"
password="123"></readHost>
</writeHost>
</dataHost>
</mycat:schema>

[root@mycat conf]# mycat console
或者
[root@mycat conf]# mycat start
slave测试等mycat,用户名为mycat,密码默认为123456,端口8066.
[root@slave ~]# mysql -umycat -p123456 -h 192.168.8.10 -P8066
#省略登录信息
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.00 sec)
mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+------------------+
| Tables_in_mytest |
+------------------+
| tb1 |
+------------------+
1 row in set (0.01 sec)
mysql> select * from tb1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.49 sec)
至此mycat部署完成,后面还将针对文件的详细信息,详细讲解。
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
我有一个Ruby数组[1,4]。我想在中间插入另一个数组[2,3],这样它就变成了[1,2,3,4]。我可以使用[1,4].insert(1,[2,3]).flatten实现这一点,但是有更好的方法吗? 最佳答案 您可以通过以下方式进行。[1,4].insert(1,*[2,3])insert()方法处理多个参数。因此,您可以使用splat运算符*将数组转换为参数。 关于ruby-如何在数组中间插入一个数组?,我们在StackOverflow上找到一个类似的问题:
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件:classMyMiddlewaredefinitialize(app)@app=appenddefcall(env)env['model']=MyModel.firstendend我在config/environments/development.rb中执行此操作:config.cache_classes=false#thedefaultfordevelopmentconfig.middleware.
如果有人有兴趣将PDF文件保存在PDFKit中间件gem显示的文件系统中,那么这里是...重写middleware.rb文件的call方法。在覆盖中只需替换这一行:body=PDFKit.new(translate_paths(body,env),@options).to_pdf与pdf=PDFKit.new(translate_paths(body,env),@options)file=pdf.to_file('Your/file/name/path')Mymodel.my_method()#Youcanwriteyourmethodheretousethatfilebody=pdf
我的Rails4应用程序使用了一个自定义Rack中间件。如果客户端未提供有效信息(我'正在开发API)。因此,在每个请求之前它会更改这些header,并且在每个请求之后它会添加一个带有自定义媒体类型信息的自定义X-Something-Media-Typeheader。我想切换到Puma,因此我有点担心这种中间件的线程安全性。我没有使用实例变量,除了我们在每个中间件中遇到的常见@app.call一次,但即使在这里我也复制了一些我在RailsCasts的评论中读到的内容:definitialize(app)@app=appenddefcall(env)dup._call(env)endde
我为你们准备了一个简单的。我想要一个特色内容部分,其中排除了当前文章所以这可以通过delete_if使用MiddlemanBlog:但是我使用的是中间人代理,所以我无法访问current_article方法...我有一个YAML结构,其中包含以下模拟数据(以及其他数据),文件夹设置如下:data>site>caseStudy>RANDOM-ID423536.yaml(由CMS生成)在每个yaml文件中,您会发现如下内容::id:2k1YccJrQsKE2siSO6o6ac:title:Heyplace我的config.rb看起来像这样data.site.caseStudy.eachdo
目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.