MySQL+MyCat分库分表 读写分离配置
副标题[/!--empirenews.page--]
一、 MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK。 Mycat是中间件,运行在代码应用和MySQL数据库之间的应用。 前身: corba,是阿里开发的数据库中间件,实现MySQL数据库分库分表集群管理的中间件,曾经出现过重大事故,二次开发,形成Mycat。 使用MyCat之后,编写的所有的SQL语句,必须严格遵守SQL标准规范。
使用MyCat中间件后的结构图如下: 逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分. 2.1.1 纵向切分把一个数据库切分成多个数据库,配置方便 只能实现两张表的表连接查询. 将一张表中的数据,分散到若干个database的同结构表中。多个表的数据的集合是当前表格的数据。 把一个表切分成多个表,相比纵向切分配置麻烦 无法实现表连接查询. 将一张表的字段,分散到若干张表中,将若干表连接到一起,才是当前表的完整数据。 Mycat中定义的database.是逻辑上存在的.但是物理上未必存在. 主要是针对纵向切分提供的概念. 访问MyCat,就是将MyCat当做MySQL使用。 Db数据库是MyCat中定义的database。通过SQL访问MyCat中的db库的时候,对应的是MySQL中的db1,db2,db3三个库。物理上的database是db1,db2,db3.逻辑上的database就是db。 Mycat中定义的table.是逻辑上存在,物理上未必存在. 主要是针对横向切分提供的概念 MyCat中的表格table,其字段分散到MySQL数据库的表格table1,table2,table3中。 Mycat默认端口是8066 2.5 数据主机 - dataHost物理MySQL存放的主机地址.可以使用主机名,IP,域名定义. 2.6 数据节点 - dataNode物理的database是什么.数据保存的物理节点.就是database. 2.7 分片规则当控制数据的时候,如何访问物理database和table. 就是访问dataHost和dataNode的算法. 在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法.如:哈希算法,crc16算法等. 3 Mycat搭建 3.1 安装JDK略 3.2 主从备份搭建完成 3.3 安装mycat解压缩: tar -zxf mycat-xxxx.tar.gz 3.4 Master提供可被Mycat访问的用户在Mycat中通过Master数据库的root用户访问Master数据库. 3.5 上传mycat 3.6 解压缩 3.7 Mycat配置文件详解 Mycat所有的配置文件,都在应用的conf目录中. 3.7.1 rule.xml用于定义分片规则的配置文件. 主要是查看.很少修改. mycat默认的分片规则: 以500万为单位,实现分片规则. 逻辑库A对应dataNode - db1和db2. 1-500万保存在db1中, 500万零1到1000万保存在db2中,1000万零1到1500万保存在db1中.依次类推. 用于定义逻辑库和逻辑表的配置文件.在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode等信息. 配置文件解释: 3.7.2.1 标签schema配置逻辑库的标签 3.7.2.1.1 属性name 逻辑库名称 3.7.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; 3.7.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不做任何操作修改. 3.7.2.2 标签table定义逻辑表的标签,如果需要定义多个逻辑表,编写多个table标签。要求逻辑表的表名和物理表(MySQL数据库中真实存在的表)的表名一致。 3.7.2.2.1 属性name 逻辑表名 3.7.2.2.2 属性dataNode 数据节点名称. 配置文件中后续需要定义的标签(即物理数据库中的database名称).多个名称使用逗号分隔. 多个database定义后,代表分库。 3.7.2.2.3 属性rule 分片规则名称.具体的规则名称参考rule.xml配置文件. SQL语句发送到Mycat中后,Mycat如何计算,应该将当期的SQL发送到哪一个物理数据库管理系统或物理database中。 3.7.2.3 标签dataNode定义数据节点的标签, 定义具体的物理database信息的。 3.7.2.3.1 属性name 数据节点名称, 是定义的逻辑名称,对应具体的物理数据库database 3.7.2.3.2 属性dataHost 引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息. 3.7.2.3.3 属性database 在dataHost物理机中,具体的物理数据库database名称. 3.7.2.4 dataHost标签定义数据主机的标签, 就是物理MYSQL真实安装的位置。 3.7.2.4.1 属性name 定义逻辑上的数据主机名称 3.7.2.4.2 属性maxCon/minCon 最大连接数, max connections 最小连接数, min connections 3.7.2.4.3 属性dbType 数据库类型 : mysql数据库 3.7.2.4.4 属性dbDriver 数据库驱动类型, native,使用mycat提供的本地驱动. 3.7.2.5 dataHost子标签writeHost写数据的数据库定义标签. 实现读写分离操作. 3.7.2.5.1 属性 host 数据库命名 3.7.2.5.2 属性url 数据库访问路径 3.7.2.5.3 属性user 数据库访问用户名 3.7.2.5.4 属性password (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |