精华内容
下载资源
问答
  • MyCat是什么?为什么要用MyCat?

    万次阅读 多人点赞 2017-02-21 10:24:54
    当时就在想MyCat是什么东西?为什么要用它呢?*一、什么是MyCat: MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而...

    实习的时候,在一个项目当中,项目经理要求把原先的MySQL数据连接基于mycat来进行改造 。当时就在想MyCat是什么东西?为什么要用它呢?

    *一、什么是MyCat:
    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

    MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度


    二、那么为什么要用到MyCat呢?

    *例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?假如只有一种硬件的时候,我们需要开发一个操作系统吗?
    再比如一个项目只需要一个人完成的时候不需要leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对于他的上层来说就是对项目组的抽象。
    同样的,当我们的应用只需要一台数据库服务器的时候我们并不需要Mycat,而如果你需要分库甚至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是Mycat的核心作用。
    所以可以这样理解:数据库是对底层存储文件的抽象,而Mycat是对数据库的抽象。*

    展开全文
  • MyCat是什么

    2017-12-22 21:37:30
    当时就在想MyCat是什么东西?为什么要用它呢? *一、什么是MyCat:  MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行...

    实习的时候,在一个项目当中,项目经理要求把原先的MySQL数据连接基于mycat来进行改造 。当时就在想MyCat是什么东西?为什么要用它呢?

    *一、什么是MyCat: 
    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

    MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度


    二、那么为什么要用到MyCat呢?

    *例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?假如只有一种硬件的时候,我们需要开发一个操作系统吗? 
    再比如一个项目只需要一个人完成的时候不需要leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对于他的上层来说就是对项目组的抽象。 
    同样的,当我们的应用只需要一台数据库服务器的时候我们并不需要Mycat,而如果你需要分库甚至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是Mycat的核心作用。 
    所以可以这样理解:数据库是对底层存储文件的抽象,而Mycat是对数据库的抽象。*

    展开全文
  • 从定义和分类来看,它一个开源的分布式数据库系统,一个实现了MySQL协议的Server,前端用户可以把它看做一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL...

    a93c9c5ef8b3a49af43d8dcd76c66561.png

    从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的Server,前端用户可以把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分库分表,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

    MyCat后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。

    无论哪种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作。

    对于DBA,MyCat就是MySQL Server,而MyCat后面连接的MySQL Server就好像是MySQL的存储引擎,如InnoDB,MyISAM等,因此,Mycat本身并不存储数据,数据是在后端的MySQL上存储的,因此数据可靠性以及事务等都是MySQL保证的,简单的说,MyCat就是MySQL最佳伴侣,它在一定程度上让MySQL拥有了能跟Oracle PK的能力。

    对于软件工程师,MyCat是一个近似等于MySQL的数据库服务器,你可以用连接MySQL的方式去连接MyCat(除了端口不同,默认的MyCat端口是8066而非MySQL的3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用MyCat,但建议对于分片表,尽量使用基础的SQL语句,因为这样能达到最佳性能,特别是几千万甚至几百亿条记录的情况下。

    对于架构师,MyCat是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的MyCat只能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。

    MyCat原理

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

    4f680daa2288de529f873372d03f507b.png

    上述图片里,Orders表被分为三个分片datanode(简称dn),这三个分片是分布在两台MySQL Server上(DataHost),即datanode=database@datahost方式,因此你可以用一台到N台服务器来分片,分片规则为(sharding rule)典型的字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function),这里的分片字段为prov而分片函数为字符串枚举方式。

    当Mycat收到一个SQL时,会先解析这个SQL,查找涉及到的表,然后看此表的定义,如果有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,得到该SQL对应的分片列表,然后将SQL发往这些分片去执行,最后收集和处理所有分片返回的结果数据,并输出到客户端。以select * from Orders where prov=?语句为例,查到prov=wuhan,按照分片函数,wuhan返回dn1,于是SQL就发给了MySQL1,去取DB1上的查询结果,并返回给用户。

    如果上述SQL改为select * from Orders where prov in (‘wuhan’,‘beijing’),那么,SQL就会发给MySQL1与MySQL2去执行,然后结果集合并后输出给用户。但通常业务中我们的SQL会有Order By 以及Limit翻页语法,此时就涉及到结果集在Mycat端的二次处理,这部分的代码也比较复杂,而最复杂的则属两个表的Jion问题,为此,Mycat提出了创新性的ER分片、全局表、HBT(Human Brain Tech)人工智能的Catlet、以及结合Storm/Spark引擎等十八般武艺的解决办法,从而成为目前业界最强大的方案,这就是开源的力量!

    MyCat的应用场景

    以下是几个典型应用场景:

    1、 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换

    2、 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片

    3、 多租户应用,每个应用一个库,但应用程序只连接MyCat,从而不改造程序本身,实现多租户

    4、 报表系统,借助于MyCat的分表能力,处理大规模报表的统计

    5、 替代HBase,分析大数据

    6、 作为海量数据实时查询的一种方案,比如100亿条频繁查询的记录需要在3秒内查询出结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时MyCat可能是最简单有效的选择。

    概念:

    1、数据库中间件

    MyCat是数据库中间件,介于数据库与应用之间,进行数据处理与交互的中间服务。

    2、逻辑库(schema)

    通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

    3、逻辑表(table)

    3.1 既然有逻辑库,就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表可以是数据切分之后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

    3.2 分片表,指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。例如在mycat配置中的t_node就属于分片表,数据按照规则被分到dn1、dn2两个分片节点(dataNode)上。

    <table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1" />

    3.3 非分片表,一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。如下配置中t_node,只存在于分片节点(dataNode)dn1上

    <table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1" />

    3.4 ER表,关系型数据库是基于实体关系模型(Entity-Relationship Model)之上,通过其描述了真实世界中事物与关系,MyCat中的ER表即是来源于此。根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据join不会跨库操作。表分组(Table Group)是解决跨分片数据join的一种很好的思路,也是数据切分规划的一条重要规则。

    3.5 全局表,一个真实的业务系统中,往往存在大量的类似字典表的表,这些表基本上很少变动,字典表具有以下几个特性:

    a) 变动不频繁

    b) 数据量总体变化不大

    c) 数据规模不大,很少有超过数十万条记录

    对于这类表,在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联就成了比较棘手的问题,所以MyCat中通过数据冗余来解决这类表的join,即所有的分片都有一份数据的拷贝,将所有字典表或者符合字典表特性的一些表定义为全局表。数据冗余是解决跨分片数据join的一种很好思路,也是数据切分规划的另一条重要规则。

    4、分片节点(dataNode)

    数据切分之后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点,分片节点指的是一个数据库。

    5、节点主机(dataHost)

    数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡地放在不同的节点主机(dataHost)。

    6、分片规则(rule)

    按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大地避免后续数据处理的难度。

    7、全局序列号(sequence)

    数据切分后,原有的关系型数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)。

    8、多租户

    多租户技术或称多重租赁技术,是一种软件架构技术,它是在讨论与现实如何于多用户的环境下公用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。多租户在数据存储上存在三种主要的方案:

    8.1独立数据库:这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别很高,安全性最好,但成本也高。

    优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。

    缺点:增大了数据库的安装数量,随之带来维护成本和购置成本的增加。

    8.2 共享数据库,隔离数据架构:即多个或所有租户共享Database,但是每个租户一个schema。

    优点:为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可以支持更多的租户数量。

    缺点:如果出现故障,数据恢复比较困难,因为恢复数据库将牵扯到其他租户的数据;如果需要跨租户统计数据,存在一定困难。

    8.3 共享数据库,共享数据架构:即租户共享一个Database、同一个Schema,但在表中通过tenantID区分租户的数据。这是共享程度最高、隔离级别最低的模式。

    优点:此种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。

    缺点:隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量;数据备份和恢复最困难,需要逐表逐条备份和还原。

    如果希望以最少的服务器为最多的租户提供服务,并且租户接受以牺牲隔离级别换取降低成本,这种方案最合适。

    27b2943404fa902a47a95c370e46ea47.png
    展开全文
  • mycat是什么_MyCat

    2020-11-10 19:25:25
    什么是 MyCat MyCat 目前最流行的基于 java 语言编写的数据库中间件,一个实现了MySQL 协议的服务器, 前端用户可以把它看作一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端可以用 MySQL 原生...

    6b3bf5f9e136f1a303662412bc88b148.png

    一、 MyCat 简介

    MyCat 官网:http://www.mycat.io/

    1.什么是 MyCat

    MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了MySQL 协议的服务器,
    前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端可以用 
    MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数 主流数据库服务器通信,
    其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。 
    	MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及
    众多成熟的使用案例使得 MyCat 变得非常的强大。 
    	MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持MySQL、SQL Server、
    Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型 NoSQL 方式的存储,
    未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在 MyCat 里,都是一个传统
    的数据库表,支持标准的 SQL 语句进行数据的操作,这样 一来,对前端业务系统来说,可以大幅降低
    开发难度,提升开发速度。 

    2.使用 Mycat 后的结构图

    125cde4eb67e2ef3f07884cbf7a601b8.png

    3.使用 Mycat 的优势

    3.1数据量级

    单一的 MySQL其数据存储量级和操作量级有限.

    Mycat 可以管理若干 MySQL 数据库,同时实现数据的存储和操作.

    3.2开源性质

    Mycat 是 java 编写的中间件. 开源,免费. 
    有非常多的人和组织对 Mycat 实行开发,维护,管理,更新. 
    Mycat 版本提升较快,可以跟随环境发展.如果有问题,可以快速解决. 
    Mycat 有开源网站和开源社区.且有官方发布的电子书籍. 
    Mycat 是阿里原应用 corba 转型而来的. 

    二.MyCat 中的概念

    1 切分

    逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分

    1.1纵向切分/垂直切分

    就是把原本存储于一个库的数据存储到多个库上。 
    由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的问题。 
    例如,我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志 
    数据库 logDB 等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。 
    优点 
    1)减少增量数据写入时的锁对查询的影响。 
    2)由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查 
    询所需的检索行数变少,减少了磁盘 IO,时延变短。 
    缺点:无法解决单表数据量太大的问题。 

    1.2横向切分/水平切分

    把原本存储于一个表的数据分块存储到多个表上。
    当一个表中的数据量过大时,我们可 以把该表的数据按照某种规则,进行划分,然后存储到
    多个结构相同的表,和不同的库上。 
    例如,我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同 
    的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable: 
    userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。 
    优点 
    1)单表的并发能力提高了,磁盘 I/O 性能也提高了。 
    2)如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。 
    缺点:无法实现表连接查询。

    2 逻辑库-Schema

    Mycat 中定义的 database.是逻辑上存在的.但是物理上是不存在的.主要是针对纵向切分提供的概念.

    3 逻辑表-table

    Mycat 中定义的 table.是逻辑上存在,物理上是不存在的.主要是针对横向切分提供的概念.

    4 默认端口

    MySQL 默认端口是 3306 
    Mycat 默认端口是 8066 
    tomcat 默认端口是 8080 
    Oracle 默认端口是 1521 
    nginx 默认端口是 80 
    http 协议默认端口 80 
    redis 默认端口 6379 

    5 数据主机 - dataHost

    物理 MySQL 存放的主机地址.可以使用主机名,IP,域名定义.

    6 数据节点 - dataNode

    配置物理的 database. 数据保存的物理节点.就是 database.

    7 分片规则

    当控制数据的时候,如何访问物理 database 和 table. 
    就是访问 dataHost 和 dataNode 的算法. 
    在 Mycat 处理具体的数据 CRUD 的时候,如何访问 dataHost 和 dataNode 的算法.如:哈希 
    算法,crc32 算法等. 

    三、 MyCat 的使用

    1 读写分离

    原理:需要搭建主从模式,让主数据库(master)处理事务性增、改、删操作(INSERT、 UPDATE、DELETE),
    而从数据库(slave)处理 SELECT 查询操作。 Mycat 配合数据库本身的复制功能,可以解决读写分离的问题。

    2 主从备份概念

    什么是主从备份: 就是一种主备模式的数据库应用. 主库(Master)数据与备库(Slave)数据完全一致. 
    实现数据的多重备份, 保证数据的安全.可以在 Master[InnoDB]和 Slave[MyISAM]中使用不同的数据库引擎,实现读写的分离 

    2.1MySQL5.5, 5.6 版本后本身支持主从备份

    在老旧版本的 MySQL 数据库系统中,不支持主从备份,需要安装额外的 RPM 包. 
    如果需要安装 RPM,只能在一个位置节点安装. 

    2.2主从备份目的

    2.2.1 实现主备模式

    保证数据的安全. 尽量避免数据丢失的可能.

    2.2.2 实现读写分离

    使用不同的数据库引擎,实现读写分离.提高所有的操作效率.

    InnoDB 使用 DML 语法操作. MyISAM 使用 DQL 语法操作.

    2.3主从备份效果

    2.3.1 主库操作同步到备库

    所有对 Master 的操作,都会同步到 Slave 中. 
    如果 Master 和 Salve 天生上环境不同,那么对 Master 的操作,可能会在 Slave 中出现错误 
    如: 在创建主从模式之前,Master 有 database : db1, db2, db3. Slave 有 database: db1, 
    db2. 
    创建主从模式.现在的情况 Master 和 Slave 天生不同. 
    主从模式创建成功后,在 Master 中 drop database db3. Slave 中抛出数据库 SQL 异常.后 
    续所有的命令不能同步. 
    一旦出现错误. 只能重新实现主从模式.

    2.4主从模式下的逻辑图

    80a55ce531ab12ec39e55d95f51de850.png

    3 MySql 的主从模式搭建

    1.安装 MySQL
    2.主从备份配置 
    3.Master[主库]配置
    3.1修改 Master 配置文件
    3.2 配置server_id
    3.3 配置log_bin 
    3.4 重启 MySQL 
    3.5 配置 Master
    3.5.1 访问 MySQL
    3.5.2 创建用户
    3.5.3 查看用户
    3.5.4 查看 Master 信息
    3.5.5 查看主机端口号
    3.5.6 关闭防火墙或在防火墙中开放 3306 端口 
    4Slave[从库]配置 
    4.1 修改 Slave 配置文件 
    4.2 配置server_id 
    4.3 重启 MySQL 服务 
    4.4 配置 Slave
    4.4.1 访问 mysql 
    4.4.2 停止 Slave 功能
    4.4.3 配置主库信息 
    4.4.4 启动 Slave 功能 
    4.4.5 查看 Slave 配置 
    5测试主从 

    3.1安装 MySQL

    已安装

    主库:192.168.70.148

    从库:192.168.70.149

    3.2主从备份配置

    3.3Master[主库]配置

    3.3.1 修改 Master 配置文件

    路径:/etc/my.cnf

    命令:vim /etc/my.cnf

    e769d11192533abf3b6e63aa8e9d0865.png

    3.3.2 server_id

    本环境中 server_id 是 1

    MySQL 服务唯一标识

    配置要求:server_id 任意配置,只要是数字即可

    server_id Master 唯一标识数字必须小于 Slave 唯一标识数字.

    8298e8f52becbe24ee330f278c671dac.png

    3.3.3 log_bin

    本环境中 log_bin 值 : master_log

    开启日志功能以及日志文件命名,log_bin=master_log

    变量的值就是日志文件名称.是日志文件名称的主体.

    MySQL 数据库自动增加文件名后缀和文件类型

    a26443bed5f244b869e21a8079aacd2e.png

    3.3.4 重启 MySQL

    service mysqld restart

    3.3.5 配置 Master

    3.3.5.1 访问 MySQL

    mysql -uusername -ppassword

    58cfb1e128e2e12776d5c468716de3d5.png

    3.3.5.2 创建用户

    在 MySQL 数据库中,为不存在的用户授权,就是同步创建用户并授权.

    此用户是从库访问主库使用的用户

    ip 地址不能写为%. 因为主从备份中,当前创建的用户,是给从库 Slave 访问主库 Master

    使用的.用户必须有指定的访问地址.不能是通用地址.

    配置

    grant 

    刷新

    flush 

    本次使用配置(错误)

    grant 

    这里不应该配置主机ip ,应该是从机ip

    grant 

    刷新

    flush 

    a5aa26e145786dd71ad38f6f6bd06676.png

    3.3.5.3 查看用户

    use mysql;

    select host, name from user;

    07b50abd81d729eba6b4233f6f5f0224.png

    3.3.5.4 查看 Master 信息

    show master status;

    a035ef431552f9a27b632d055941f29b.png

    3.3.5.5 查看主机端口号

    SHOW VARIABLES LIKE '%PORT%';

    d25eb6d29740b1ebc41c101e6146ee4e.png

    3.3.5.6 关闭防火墙或在防火墙中开放 3306 端口

    5709f70f289a240ee2e00e412edab9ca.png

    ea2d369e1aa71b02181d656736e783ae.png

    3.4Slave[从库]配置

    3.4.1 修改 Slave 配置文件

    /etc/my.cnf

    3.4.2 server_id

    唯一标识, 本环境中配置为 : 2

    f5aae2340986bee15f1982d16ebfd4cb.png

    3.4.3 重启 MySQL 服务

    service mysqld restart

    234f9f1b6aff41a0fabcb9e01942c57b.png

    3.4.4 配置 Slave

    3.4.4.1 访问 mysql

    mysql -uusername -ppassword

    3.4.4.2 停止 Slave 功能

    stop slave;

    3e292c34e223bbf56a29a5018be3226c.png

    3.4.4.3 配置主库信息

    需要修改的数据是依据 Master 信息修改的. ip 是 Master 所在物理机 IP. 用户名和密码是

    Master 提供的 Slave 访问用户名和密码. 日志文件是在 Master 中查看的主库信息提供的.在

    Master 中使用命令 show master status 查看日志文件名称.

    change master to master_host=’主库ip’, master_user=’username’, master_password=’password’, master_log_file=’log_file_name’;

    本次配置

    change 

    a43a5b8ff66c369ebd5e35d33692d7d6.png

    3.4.4.4 启动 Slave 功能

    start slave;

    ff3375f2d99e25dc2766b3a11bed0450.png

    3.4.4.5 查看 Slave 配置

    show slave status G;

    报错

    Last_IO_Errno: 1045

    Last_IO_Error: error connecting to master 'myslave@192.168.116.128:3306' - retry-time: 60 retries: 20

    d1a495adc92dbafc231fce00dad6429c.png

    在主库中没有配置从库ip

    grant all privileges on *.* to 'myslave'@'192.168.116.129' identified by 'myslave' with grant option;

    0c6d9137cc0c9c3684734cdc708fd201.png

    3.5测试主从

    新建库 (主机)

    create database demo1 default character set utf8;

    5ac3b8347952fe3b4dc491764f7b32bc.png

    新建表

    CREATE 

    cf88cf4f3e86c00d8407ee51e1e8c663.png

    添加数据

    insert into t_users(id,name) values(1,'admin');

    ce4bbb9e9e0d6b46b7cfc7f2eccd37ab.png

    4 安装 MyCat

    4.1安装环境

    192.168.116.127

    4.2需要配置 JDK

    已安装

    4.3在主数据库和从数据库都需要完成

    4.3.1 放开 3306 端口

    1、修改vim /etc/sysconfig/iptables文件,增加如下一行:

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 要开启的端口 -j ACCEPT

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

    2、重启 iptables
    命令:service iptables restart

    查询端口是否已打开:

    netstat -an | grep 端口 或 netstat -tunlp |grep 端口

    方法二:
    1、# /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
    2、# /etc/init.d/iptables restart
    3、# /etc/rc.d/init.d/iptables save

    4.3.2 保证 root 用户可以被 mycat 访问

    在 Mycat 中通过 Master 数据库的 root 用户访问 Master 数据库.

    grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

    flush privileges;

    f5b555a79b96aa137ef48904d2625c61.png

    4.4解压上传的 Mycat 压缩包

    4.4.1上传MyCat压缩包到Usr/temp目录下

    36ff4bd2b0d148492870cfa30f12f26f.png

    4.4.2解压压缩包

    tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

    4.5将解压后的文件夹复制到/usr/local/mycat

    cp mycat /usr/local/ -r

    7e6cf6350c050a9dabd3c54d43f02f8a.png

    4.6MyCat 目录介绍

    5f9135e87a65b17a673c6d7fd985bddc.png

    bin 目录里是启动脚本

    conf 目录里是配置文件

    catlet 为 Mycat 的一个扩展功能

    lib 目录里是 Mycat 和它的依赖 jar

    logs 目录里是 console.log 用来保存控制台日志,和 mycat.log 用来保存 mycat 的 log4j 日志

    5 MyCat 配置文件

    Mycat 的架构其实很好理解,Mycat 是代理,Mycat 后面就是物理数据库。和 Web 服

    务器的 Nginx 类似。对于使用者来说,访问的都是 Mycat,不会接触到后端的数据库。

    我们现在做一个主从、读写分离。结构如下图:

    d21649527d4d0082015f11d98be11483.png

    Mycat 的配置文件都在 conf 目录里面,这里介绍几个常用的文件

    d811a731720381ec698e3733d3fbef5a.png

    5.1server.xml

    常见修改内容:

    ce52d4a5c7a24851104076ea1a629422.png
    <property 

    5.1.1 配置 Mycat 服务信息

    如: Mycat 中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等

    f83ee32e17af770f110c21f40f7354bd.png

    默认配置了一个账号 root 密码也是 123456,针对数据库 TESTDB,读写权限都有,没有

    针对表做任何特殊的权限。

    5.1.2 配置权限

    078af86faa6cc90e69c271176d854a87.png

    dml 权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000--> 1111,0 为禁止权限,1 为开启权限。

    5.2 schema.xml

    schema.xml 是最主要的配置文件,首先看默认的配置文件

    <?xml version="1.0"?>
    

    5.2.1 用于定义逻辑库和逻辑表的配置文件

    在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode 等信息.

    604f30df491743528e1d930fa23617d1.png

    5.2.2 节点与属性介绍

    5.2.2.1 标签 schema

    配置逻辑库的标签

    <schema 

    5.2.2.1.1 属性 name

    逻辑库名称

    5.2.2.1.2 属性 checkSQLschema

    是否检测 SQL 语法中的 schema 信息.

    如: Mycat 逻辑库名称 A, dataNode 名称 B

    SQL : select * from A.table;

    checkSQLschema 值是 true, Mycat 发送到数据库的 SQL 是 select * from table;

    checkSQLschema 只是 false,Mycat 发送的数据库的 SQL 是 select * from A.table;

    5.2.2.1.3 sqlMaxLimit

    Mycat 在执行 SQL 的时候,如果 SQL 语句中没有 limit 子句.自动增加 limit 子句. 避免一次

    性得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果 SQL中有具体的 limit子句,当前属性失效.

    SQL : select * from table . mycat 解析后: select * from table limit 100

    SQL : select * from table limit 10 . mycat 不做任何操作修改.

    5.2.2.2 标签 table

    <table name="t_user" dataNode="dn1,dn2,dn3" rule="crc32slot" />

    定义逻辑表的标签

    5.2.2.2.1 属性 name

    逻辑表名

    5.2.2.2.2 属性 dataNode

    数据节点名称. 即物理数据库中的 database 名称.多个名称使用逗号分隔.

    5.2.2.2.3 属性 rule

    分片规则名称.具体的规则名称参考 rule.xml 配置文件.

    5.2.2.3 标签 dataNode

    <dataNode 

    定义数据节点的标签

    5.2.2.3.1 属性 name

    数据节点名称, 是定义的逻辑名称,对应具体的物理数据库 database

    5.2.2.3.2 属性 dataHost

    引用 dataHost 标签的 name 值,代表使用的物理数据库所在位置和配置信息.

    5.2.2.3.3 属性 database

    在 dataHost 物理机中,具体的物理数据库 database 名称.

    5.2.2.4 dataHost 标签

    <dataHost 

    定义数据主机的标签

    5.2.2.4.1 属性 name

    定义逻辑上的数据主机名称

    5.2.2.4.2 属性 maxCon/minCon

    最大连接数, max connections

    最小连接数, min connections

    5.2.2.4.3 属性 dbType

    数据库类型 : mysql 数据库

    5.2.2.4.4 属性 dbDriver

    数据库驱动类型, native,使用 mycat 提供的本地驱动.

    5.2.2.5 dataHost 子标签 writeHost

    写数据的数据库定义标签. 实现读写分离操作.

    5.2.2.5.1 属性 host

    数据库命名

    5.2.2.5.2 属性 url

    数据库访问路径

    5.2.2.5.3 属性 user

    数据库访问用户名

    5.2.2.5.4 属性 password

    访问用户密码

    5.2.2.6 writeHost 子标签 readHost

    5.2.2.6.1 属性 host

    数据库命名

    5.2.2.6.2 属性 url

    数据库访问路径

    5.2.2.6.3 属性 user

    数据库访问用户名

    5.2.2.6.4 属性 password

    5.2.3 rule.xml

    用于定义分片规则的配置文件.

    mycat 默认的分片规则: 以 500 万为单位,实现分片规则.

    逻辑库 A 对应 dataNode - db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存

    在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推.

    <tableRule 

    5.2.3.1 tableRule

    a9a70a30f529918a1d695e8028976857.png

    5.2.3.2 function

    <function 

    dfaed3e86453afe0c587881c9e5d4edd.png

    6 实现读写分离

    6.1配置读写分离

    6.1.1 Schema.xml

    <?xml version="1.0"?>
    

    4f8ba7faf14cea1b6a04f7fd2b5f6013.png

    6.1.2 Server.xml

    <user 

    6.1.3 测试读写分离

    6.1.3.1 启动 Mycat 命令

    bin/mycat start

    e8b2781dd88f773234c53c856de4ba91.png

    6.1.3.2 停止命令

    bin/mycat stop

    7a59743aa421702585b791467c84234c.png

    6.1.3.3 重启命令

    bin/mycat restart

    8e77127744af7988833058c4370af653.png

    6.1.3.4 查看 MyCat 状态

    bin/mycat status

    cb241fd9797f6463d37eabdb8ca64659.png

    6.1.3.5 访问方式

    可以使用命令行访问或客户端软件访问.

    6.1.3.6 命令行访问方式

    mysql -u 用户名 -p 密码 -hmycat 主机 IP -P8066

    链接成功后,可以当做 MySQL 数据库使用.

    访问约束

    6.1.3.7 查看 Mycat 日志

    logs/wrapper.log

    日志中记录的是所有的 mycat 操作. 查看的时候主要看异常信息 caused by 信息

    6.1.3.8 balance

    balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上

    balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡

    balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。

    balance=”3”, 所有读请求随机的分发到 writeHost 对应的 readhost 执行,writerHost 不负担读压力

    992d6e6045e67089dbcdd6845a995a71.png

    7 MyCat 分库

    7.1分片规则

    7.1.1 auto-sharding-long 范围约定

    以 500 万为单位,实现分片规则.

    逻辑库 A 对应 dataNode - db1 和 db2. 1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存

    在 db2 中,1000 万零 1 到 1500 万保存在 db1 中.依次类推.

    7.1.2 crc32slot 规则

    在 CRUD 操作时,根据具体数据的 crc32 算法计算,数据应该保存在哪一个 dataNode 中

    7.2配置分片规则需要注意的地方

    1)id中推荐配置主键列

    2)所有的 tableRule 只能使用一次。如果需要为多个表配置相同的分片规则,那么需要在此重新定义该规则。

    3)在 crc32Slot 算法中的分片数量一旦给定,MyCat 会将该分片数量和 slor 的取值范围保存到文件中。在次修改分片数量时是不会生效的,需要将该文件删除。文件位置位于 conf

    目录中的 ruledata 目录中。

    7.3配置分库

    7.3.1 需求:

    1)在 master 中创建 3 个数据库

    2)在 MyCat 中配置分库

    7.3.2 创建数据库

    create 

    b45d3225a7151e13d2e4ab6b2f61bdbc.png

    创建t_user表

    CREATE 

    7.3.3 修改 Schema.xml

    <?xml version="1.0"?>
    

    7.3.4 测试

    1.重启mycat

    ./mycat restart

    2.修改分片数量

    删除cd /usr/local/mycat/conf/目录下的ruledata

    4f252ab5ca2f83567468d17540ddfe6e.png

    修改rule.xml

    558d9a24052fb0302c4db5ed08a26d6a.png

    查看分片数量

    104016a2dcb298be9980036b4042063b.png

    7.3.4 测试

    919f7c64ef2f6c32d2b93eb2cd4af267.png

    90a51a3cfe1eb70fb074da05263511bd.png

    749a8dd594d10a984b0bf9338ed70921.png

    7.4注意:

    1)使用 MyCat 实现分库时,先在 MyCat 中定义逻辑库与逻辑表,然后在 MyCat 的链接

    中执行创建表的命令必须要在 MyCat 中运行。因为 MyCat 在创建表时,会在表中添加一个

    新的列,列名为_slot。

    2)使用 MyCat 插入数据时,语句中必须要指定所有的列。即便是一个完全项插入也不

    允许省略列名。

    展开全文
  • 一、MyCAT概述MyCAT是一款由阿里Cobar演变而来的用于支持数据库读写分离、分片的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。基础架构如下:1、...
  • 当时就在想MyCat是什么东西?为什么要用它呢? *一、什么是MyCat: MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而...
  • 详解Mycat核心概念和名词Mycat是什么?· 一个彻底开源的,面向企业应用开发的大数据库集群· 支持事务、ACID、可以替代MySQL的加强版数据库· 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群· 一...
  • mycat是什么鬼mycat是国人开发的一款开源的数据库中间件,他的作用就是伪装成一个真的数据库,然后在它背后,连的是多种类型,集群分布式的真实数据库。他的体系结构就像下面:需要理解mycat的几个概念。schema:逻辑...
  • 当时就在想MyCat是什么东西?为什么要用它呢? *一、什么是MyCat: MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,...
  • mycat是什么_MYCAT简介

    2020-11-28 04:28:09
    什么是MyCAT?简单的说,MyCAT就是:·一个彻底开源的,面向企业应用开发的“大数据库集群”·支持事务、ACID、可以替代Mysql的加强版数据库·一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群...
  • 问题:MyCat的作用和特点是什么?答:MyCat是目前最流行的基于Java语言编写的数据库中间件,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用...
  • mycat是什么_MYCAT学习2

    2020-11-29 00:26:18
    的作用是什么?指定使用的分片算法(2) <tableRule>中name属性的作用是什么?name 属性指定唯一的名字,用于标识不同的分片规则。内嵌的 rule 标签则指定对物理表中的哪一列进行拆分和使用什么分算法(3) <...
  • 什么是Mycat官网:http://www.mycat.io/· 一个彻底开源的,面向企业应用开发的大数据库集群· 支持事务、ACID、可以替代MySQL的加强版数据库· 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群· ...
  • 一、 MyCat 简介 1 什么是 MyCat MyCat 目前最流行的基于 java 语言编写的数据库中间件,一个实现了 MySQL 协议 的服务器,前端用户可以把它看作一个数据库代理,用 MySQL 客户端工具和命令行访问, 而其后端...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 807
精华内容 322
关键字:

mycat是什么