>

Mycat数据库分片,猫从何地来

- 编辑:金沙国际平台登录 -

Mycat数据库分片,猫从何地来

海量数据的蕴藏难题

今后乘机互连网的向上,数据的量级也是撑指数的巩固,从GB到TB到PB。对数据的种种操作也是更上一层楼的辛勤,古板的关系性数据库已经一点都不大概满意快捷查询与插入数据的必要。这年NoSQL的出现有时化解了这一危害。它经过收缩数据的安全性,裁减对事情的帮忙,裁减对复杂查询的支撑,来获得品质上的提拔。

只是,在有一点点场地NoSQL一些低头是望眼欲穿满意使用情况的,就举例有个别使用境况是应当要有专门的学业与安全指标的。这年NoSQL肯定是不可能满意的,所以依旧要求动用关系性数据库。如若运用关系型数据库消除海量存款和储蓄的难点啊?此时就必要做数据库集群,为了加强查询品质将二个数据库的数码分散到分化的数据库中存款和储蓄。

【布满式架构初探】

1.1 如何是数据库分片

简单的话,就是指通过某种特定的口径,将我们寄放在同多个数据库中的数据分散寄放到多个数据库(主机)下边,以高达疏散单台设备负载的功力。

数据的切分(Sharding)依据其切分法规的档案的次序,能够分成三种切分情势。

(1)一种是依据差异的表(或许Schema)来切分到不一致的数据库(主机)之上,这种切能够称之为数据的垂直(纵向)切分

图片 1

 

 

 

(2)另外一种则是基于表中的多寡的逻辑关系,将同二个表中的数据依据某种条件拆分到多台数据库(主机)上边,这种切分称之为数据的档案的次序(横向)切分。

 图片 2

 

第五节-猫从哪个地方来,要到何地去(Mycat的前生今生)

5.1 MyCAT猫的前世
5.2 MyCAT猫的今生
5.3 十分钟安装使用
5.4 MYCAT下实现读写分离
5.5 切!切!切!MyCAT中分表分库策略
5.6 MyCAT的五脏六腑
5.7 课后作业

1.2 怎么促成数据库分片

当数据库分片后,数据由贰个数据库分散到五个数据库中。此时系统要查询时供给切换差异的数据库进行询问,那么系统怎么样知道要询问的数码在哪个数据库中?当增加一条记下时要向哪些数据库中插入呢?那一个标题管理起来都以非常的麻烦。

这种意况下得以应用一个数据库中间件mycat来消除相关的标题。接下来驾驭一下怎样是mycat。

5.1 MyCAT猫的前生##


近年猫为啥这么火,Apache的猫,MyCAT的猫。
大约都长这些样

5.1-01.png

MyCAT原来本未有想着来生做猫的,因为他的前生是Ali的Cobar,
转世之后,成为了MyCAT,并且开源了,就立志做叁个华夏的Apache猫.

研讨他的前生是Ali的Cobar, Cobar的小编离职了后来,Cobar就大概未有进展后续开拓和保卫安全了,
新兴转为开源的MyCAT,又开展了迅猛的腾飞,以后初叶总计有超越300个品种选取mycat,此中囊括:
中国际联盟通/中国邮电通信/兔拳头菜传播媒介/天狮公司等等

5.1-02.png

何以有这么多的有名厂家采纳mycat 呢, 大家看看她们的业务量,
1.安智账户体系, 数据量单表伍仟万条,20多张表,上亿条数据, 系统运维非凡,不常有SQL操作迟缓的场合。
2.公安项目,21个表,30多亿条数据,选用符合的作业应用mycat

从这几个种类中我们得以看看,mycat专长对上亿条单表数据量的拍卖,并提供不错的实时查询服务。
而大家知道,MYSQL的库中很难管理上亿条数据的询问职业,MYCAT升高了MYSQL数据库的拍卖技能,
从官方的表明来看,MYCAT符合管理千亿条以下的数额,千亿条以上的多少更适合HADOOP那个系统来拍卖。

说了半天,什么是MYCAT呢?
MYCAT便是二个虚拟的MYSQL SEENCOREVEENCORE, 这么说大概不太驾驭, 不过对于利用来讲,他正是七个MYSQL SE索罗德VERubicon,
行使就好像连接普通的MYSQL数据库同样的 去老是他,SQL查询、操作等等一律。

而MYCAT把数据库复杂的架构,以致背后复杂的分表分库的逻辑全体透明化了,MYCAT中间件连接四个MYSQL数据库,
几个数据库之间还是能够做为主同步,而这一体的万事,对采纳来说,独有一个数据库,这正是MYCAT。

Mycat介绍

5.2 MyCAT猫的现世##


MYCAT发展到现行反革命已经不仅是MYSQL的代办了,它还帮衬SQLSE冠道VELX570/ORACLE/DB2/POSTGRESQL等主流数据库。
MYCAT还足以将三个表定义为别的一种MYCAT支持的存款和储蓄方式,比方MySQL的MyISAM 表、内存表、可能MongDB这种
内部存款和储蓄器数据库上。

MYCAT这么强大,那么他的规律是或不是特意的千头万绪,非也,Mycat 的准绳能够用一个动词来描写:”拦截“
它阻挡应用发送过来的SQL, 并对SQL语句进行局地特定的深入分析:分片解析、路由深入分析、读写分离深入分析、缓存深入分析等,然后将
剖判后的SQL分别发送到不相同的实在数据库,最终对数据库重回的结果开展管理,重临给客户。

5.2-01.png

下边列举多少个MYCAT 规范的采纳场景:

  • 偏偏的读写分离,在下边大家会有教书怎么样进展Mycat上边包车型大巴读写分离的布署
  • 分表分库,对于当先一千万的表打开分片,最大援救一千亿的单表分片
  • 多租户应用,每一种应用三个库,但应用程序只连接MYCAT ,进而不退换程序自身,实现多租户
  • 报表系统,借助于MYCAT的分表才干,管理大范围报表的总括
  • 代替HBase, 分析大数目
  • 作为海量数据实时查询的一种简易实用的实施方案, 比如100亿条数据须要在3秒内实时查询出来,此时得以挂念MYCAT

今昔MYCAT社区活跃,MYCAT 周围的体系也稳步衍生出来,稳步的产生了MYCAT生态圈了,像MYCAT-WEB 监察和控制,MYCAT-HA
高可用方案等等,所以MYCAT还是很值得大家学习和钻探的。

2.1 什么是Mycat?

 

Mycat 背后是Ali已经开源的资深产品——Cobar。Cobar 的主干作用和优势是 MySQL 数据库分片,此产品已经流传,传说最先的发起者对 Mysql 很领会,后来从Ali跳槽了,阿里随后开源的 Cobar,并保持到 二零一一 年年终,然后,就不曾然后了。

Cobar 的思绪和促成路线的确不易。基于 Java 开垦的,完成了 MySQL 公开的二进制传输左券,美妙地将和谐伪装成贰个MySQL Server,如今市道上绝大非常多 MySQL 顾客端工具和平运动用都能协作。比自身完成贰个新的数据库公约要明智的多,因为生态情形在哪个地方摆着。

 

Mycat 是根据 cobar 演变而来,对 cobar 的代码举行了干净的重构,使用 NIO 重构了网络模块,况且优化了 Buffer 内核,加强了聚众,Join 等基本特色,相同的时间匹配绝大大多数据库成为通用的数据库中间件。

轻易易行的说,MyCAT便是:

·一个新星的数据库中间件产品帮衬mysql集群,可能mariadb cluster,提供高可用性数据分片集群。你能够像使用mysql同样使用mycat。对于开拓职员来讲根本以为不到mycat的留存。

 图片 3

5.3 十分钟安装使用##


MYCAT尽管庞大,然则他的设置却格外简易, 下边我们步入大家十分钟安装教程:

2.2 Mycat帮忙的数据库

 图片 4

 

1.下载MYCAT安装包###

在GitHub 的 MyCATApache项目下,大家找到
https://github.com/MyCATApache/Mycat-download/tree/master/1.5-RELEASE
选取 Mycat-server-1.5.1-RELEASE-20160929233042-linux.tar.gz
linux 版本实行 下载

当下1.6版本有的作用还在付出中,1.5本子相比稳固,提出下载1.5用以生产情形使用

2.3 Mycat的分片计谋

 图片 5

 

 

 

2. 解压运营MYCAT安装包###

下载文件是三个tar的linux压缩包,用解压命令
tar -zxvf Mycat-server-1.5.1-RELEASE-20160929233042-linux.tar.gz

5.3-01.png

开行命令
./mycat start|restart|stop|console 常用几项内容

5.3-02.png

日志文件
logs/wrapper.log mycat服务器日志
logs/mycat.log 数据库操作日志,剖析数据库操作路由运用。

开行MyCat最重大的多少个布局文件:
conf/server.xml 服务器用户、设想Sechma、端口等安顿音讯。
conf/sechma.xml 物理数据库映射。

运用MyCAT来讲的话,最入眼的便是修改这五个公文,接下去大家贯彻MYCAT下的读写分离。

2.4 概念表达

5.4 MYCAT下达成读写分离##


首先参照他事他说加以考察上一节MYSQL配置主从复制,配置好主从数据库之间的多少复制功效。

2.4.1 逻辑库(schema) :

日前一节讲了数据库中间件,平常对实际应用来讲,并无需知道中间件的留存,业务开垦人士只供给精晓数据库的定义,所以数据库中间件能够被看做是一个或八个数据库集群构成的逻辑库。

1.登陆主服务器的mysql,查询master的场所###

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 | 106 | db1,db2,db3 | mysql |
+------------------+----------+--------------+------------------+
Master 重启后会修改mysql-bin(序号加1)

2.4.2 逻辑表(table):

既然如此有逻辑库,那么就能有逻辑表,布满式数据库中,对选择来讲,读写多少的表就是逻辑表。逻辑表,能够是数据切分后,遍布在一个或四个分影片仓库中,也足以不做多少切分,不分片,独有二个表构成。

分片表:是指那个原来的极大额的表,要求切分到两个数据库的表,那样,每种分片都有一对数码,全数分片构成了全部的数量。 简来讲之正是需求举办分片的表。

非分片表:三个数据库中并不是享有的表都相当的大,有些表是能够不用进行切分的,非分片是相对分片表来讲的,正是那贰个无需展开数据切分的表。

2.查看Slave机有未有陈设成功:###

mysql> show slave statusG
以下多个参数必需为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

2.4.3 分片节点(dataNode)

数码切分后,叁个大表被分到不一样的分片数据库方面,每一个表分片所在的数据库就是分片节点(dataNode)。

3.MyCAT的配置###

不选用Mycat托管的 MySQL主从服务器

schema.xml
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM" url="172.19.4.239:3306" user="root" password="123456"></writeHost>
</dataHost>

接济MySQL主从复制状态绑定的读写分离机制,让读尤其安全可相信,配置如下
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM" url="172.19.4.239:3306" user="root" password="123456">
<readHost host="hostS" url="172.19.4.240:3306" user="root" password="123456" />
</writeHost>
</dataHost>

设置 balance="1"与writeType="0"
Balance参数设置:

  1. balance=“0”, 全数读操作都发送到当前可用的writeHost上。
  2. balance=“1”,全体读操作都随便的发送到readHost。
  3. balance=“2”,全数读操作都随便的在writeHost、readhost上散发

WriteType参数设置:

  1. writeType=“0”, 全部写操作都发送到可用的writeHost上。
  2. writeType=“1”,全数写操作都随便的发送到readHost。
  3. writeType=“2”,全数写操作都随便的在writeHost、readhost分上发。

如此铺排掌握后,就已经落到实处了读写分离的职能, 仍是能够对数据库进行负荷均衡
运行mycat , 用应用或许Navicat等工具 连接mycat ,端口是 8066
insert , select 举行测量试验。

2.4.4 节点主机(dataHost)

数码切分后,每种分片节点(dataNode)不必然都会占领一台机械,同一机器上边能够有多个分片数据库,那样一个或多个分片节点(dataNode)所在的机械正是节点主机(dataHost),为了逃脱单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在分歧的节点主机(dataHost)。

5.5 切!切!切!MyCAT中分表分库攻略##


下面只是落成了如何开展读写分离,基于数据库的基本同步复制的法则, 大家在前头的课程里早就知晓,
着力同步复制的数据是 ,保障从数据库和主库的数量一致,也等于说数据是多复制了一份出来,

而MYCAT 只所以能支撑上百亿的数据量,在于她的另七个功用:分表分库战术
分表分库轻易的话,正是MYCAT 下边连接的数据库节点,打譬如说有dn1,dn2,dn3, 他们各样库中的数据
是各不一致的。
把MYCAT当作一个设想数据库来看,travelrecord 是MYCAT上面建的一张表, 应用调用MYCAT
库能够调用到整张表的数量, 可是如果查询某贰个节点dn1 , 则只好查询到有个别数目(平日是十分之二)的数码
dn1, dn2 , dn3 各自存款和储蓄了一有的的数据, 不过足以由此MYCAT 来询问到整张表的数量,
那般加强了每个数据库的多寡存款和储蓄管理才干, 那正是MYCAT的百步穿杨之处,相当于怎么他可以处理上百亿条数据的神妙。

此间列出一个简易的分表分库的安排:
schema.xml
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
在schema中 大家要求配置mycat 中的设想表table ,以致他的rule ,分表法则
auto-sharding-long 的情趣是 事先已经定义好每个dn的 范围,依照范围划分,这么些准则在rule.xml中实行配置.

datanode 的配置:
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db2" />
<dataNode name="dn3" dataHost="localhost3" database="db3" />

<dataHost name="localhost1" 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="172.19.4.3:3306" user="root" password="123456"></writeHost>
</dataHost>

<dataHost name="localhost2" 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="hostM2" url="172.19.4.201:3306" user="root" password="123456"></writeHost>
</dataHost>

<dataHost name="localhost3" 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="hostM2" url="172.19.4.86:3306" user="root" password="123456"></writeHost>
</dataHost>

这样数据便是电动切分到那3个不等的datanode中了, select 抽出来也是全部的多少。

分表分库还应该有某个门道就是,你的数目是纵一向切,依旧横平素切,
地点讲的不行是 横一贯切:正是把一张表的多寡 切到区别的 数据库中。

纵向切更简短,正是以表来分库, 区别的表 放到分裂的库中, 表中的数据在有个别库中是总体的。

2.4.5 分片准绳(rule)

后面讲了多少切分,三个大表被分为若干个分片表,就需求自然的准绳,那样根据某种业务准则把多少分到有个别分片的条条框框便是分片准则,数据切分选用适当的分片准绳不行重要,将一点都不小的防止后续数据管理的难度。

5.6 MyCAT的五脏六腑##


学会了MYCAT来做读写分离和分表分库的行使今后,我们相应越来越尖锐MYCAT的五脏六腑,了然MYCAT的运转搭飞机制,那样对线上的使用管理部分
应急事故,以至化解一部分标题提供思路,特其他有帮带,有才具的童鞋还是可以参加到MYCAT的继续开荒中来。

5.6-01.png

MYCAT 的后端通讯接纳了NIO非阻塞 和AIO 异步通讯情势, 使得通讯效用越来越高
SQL剖析这一块用到了Ali的Druid实行分析
钻探这一块,对于MYSQL数据库选用原生的二进制公约,还补助驱动格局的连天
再者MYCAT还增添order by , group by ,limit 等联谊成效的支撑

有意思味的童鞋能够对 MYCAT线程池、网络通讯、路由分发、事务管理、缓存等模块做输入的上学和深入分析。

Mycat的下载及安装

5.7 课后作业##


  1. 用MYCAT 达成上一节中的 读写分离案例
  2. 用MYCAT 完毕一个分表分库的行使

越多课程关切民众号【小张网校】
大伙儿号里有微信群加入调换,有大咖亲自教导实战!

barcode.jpg

3.1 安装境况

1、jdk:必要jdk必需是1.7及以上版本

2、Mysql:推荐mysql是5.5以上版本

3、Mycat:

Mycat的官方网址:

http://www.mycat.org.cn/

下载地址:

https://github.com/MyCATApache/Mycat-download

 

3.2 设置步骤

Mycat有windows、linux二种本子。本课程为linux安装步骤,windows基本同样。

第一步:下载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

Mycat的分片

4.1 需求

把商品表分片存款和储蓄到七个数据节点上。

 

4.2 设置境况剖判

两台mysql数据库服务器:

Host1:192.168.25.134

Host2:192.168.25.166

 

host1环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db1、db3

 

 

mysql节点2环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db2

 

MyCat安装到节点1上(供给安装jdk)

 

4.3 配置schema.xml

4.3.1 Schema.xml介绍

Schema.xml作为MyCat中重要的配备文件之一,管理着MyCat的逻辑库、表、分片准则、DataNode以至DataSource。弄懂那一个安插,是不容置疑行使MyCat的前提。这里就1000载难逢对该公文举办分析。

 

schema 标签用于定义MyCat实例中的逻辑库

Table 标签定义了MyCat中的逻辑表

dataNode 标签订义了MyCat中的数据节点,也正是大家通常说所的数额分片。

dataHost标签在mycat逻辑库中也是作为最尾巴部分的竹签存在,直接定义了切实的数据库实例、读写分离配置和心跳语句。

 

注意:若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。

在MySQL的配置文件中/etc/my.cnf [mysqld] 中增加一行

  lower_case_table_names=1

 

4.3.2 Schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="e3mall" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
        <dataHost name="localhost1" 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.25.134:3306" user="root"
                        password="root">
                        <!-- can have multi read hosts -->

                </writeHost>
        </dataHost>
        <dataHost name="localhost2" 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.25.166:3306" user="root"
                        password="root">
                        <!-- can have multi read hosts -->

                </writeHost>
        </dataHost>
</mycat:schema>

 

4.4 配置server.xml 

 

4.4.1 Server.xml介绍

server.xml差十分少保存了全数mycat供给的系统安顿消息。最常用的是在此布局客商名、密码及权限。

 

4.4.2 Server.xml配置

<user name="test">
    <property name="password">test</property>
    <property name="schemas">e3mall</property>
    <property name="readOnly">false</property>
</user>

 

4.5 配置rule.xml 

rule.xml里面就定义了咱们对表进行拆分所关联到的条条框框定义。我们能够灵活的对表使用差别的分片算法,也许对表使用同样的算法但具体的参数分化。这么些文件之中主要有tableRule和function那五个标签。在切实运用进度中得以依据须要增加tableRule

和function。

此布局文件能够毫不修改,使用默许就可以。

4.6 测验分片

4.6.1 创建表

配置达成后,重新起动mycat。使用mysql客商端连接mycat,创制表。

-- ----------------------------
-- Table structure for tb_item
-- ----------------------------
DROP TABLE IF EXISTS `tb_item`;
CREATE TABLE `tb_item` (
  `id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',
  `title` varchar(100) NOT NULL COMMENT '商品标题',
  `sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',
  `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
  `num` int(10) NOT NULL COMMENT '库存数量',
  `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
  `image` varchar(500) DEFAULT NULL COMMENT '商品图片',
  `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',
  `created` datetime NOT NULL COMMENT '创建时间',
  `updated` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  KEY `status` (`status`),
  KEY `updated` (`updated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

 

4.6.2 插入数据 

 

将此文件中的数据插入到数据库:

 图片 6

 

 

4.6.3 分片测量试验

出于配备的分片法则为“auto-sharding-long”,所以mycat会根据此准则自动分片。

各种datanode中保存一定数额的数目。依据id进行分片

经测试id范围为:

Datanode1:1~5000000

Datanode2:5000000~10000000

Datanode3:10000001~15000000

 

当1伍仟000上述的id插入时报错:

[Err] 1064 - can't find any valid datanode :TB_ITEM -> ID -> 15000001

那儿须求增加节点了。

 

Mycat读写分离

数据库读写分离对于大型系统大概访谈量极高的互连网使用来讲,是须求的一个重要意义。对于MySQL来讲,标准的读写分离是主旨情势,三个写节点Master前面随着五个读节点,读节点的数额决议于系统的下压力,经常是1-3个读节点的安插

 图片 7

 

Mycat读写分离和机关注换机制,必要mysql的主从复制机制协作。

 图片 8

 

5.1 Mysql的主从复制

 

着力配置必要小心的地点

1、主DB server和从DB server数据库的版本同样

2、主DB server和从DB server数据库数据名称一致

3、主DB server开启二进制日志,主DB server和从DB server的server_id都必需独一

 

5.2 Mysql主服务器配置

第一步:修改my.cnf文件:

在[mysqld]段下增加:

binlog-do-db=db1

binlog-ignore-db=mysql

#启用二进制日志

log-bin=mysql-bin

#服务器唯一ID,一般取IP最后一段

server-id=134

第二步:重启mysql服务

service mysqld restart

其三步:创立帐户并授权slave

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';

#貌似不要root帐号,“%”表示具有客商端都也许连,只要帐号,密码正确,此处可用具体客商端IP代替,如192.168.145.226,压实安全。

 

刷新权限

mysql> FLUSH PRIVILEGES;

  

查阅mysql未来有哪些客商

mysql>select user,host from mysql.user;

 

第四步:查询master的状态

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      120 | db1          | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set

 

 

 

5.3 Mysql从服务器配置

第一步:修改my.cnf文件

[mysqld]

server-id=166

 

第二步:配置从服务器

mysql>change master to master_host='192.168.25.128',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120

 

专心语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为实施同步操作的数据库账户,“120”无单引号(此处的120正是show master status 中观看的position的值,这里的mysql-bin.000001就是file对应的值)。

 

其次步:运转从服务器复制功效

Mysql>start slave;

 

其三步:检查从服务器复制效率状态:

mysql> show slave status

 

……………………(省略部分)

Slave_IO_Running: Yes //此状态必需YES

Slave_SQL_Running: Yes //此状态必需YES

……………………(省略部分)

 

注:Slave_IO及Slave_SQL进度必须平常运行,即YES状态,否则都是不当的情事(如:此中贰个NO均属不当)。

 

错误处理:

如果出现此错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

解决方法:

删除/var/lib/mysql/auto.cnf文件,重新启动服务。

 

 图片 9

 

如上操作进度,从服务器配置实现。

 

5.4 Mycat配置

Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读尤其安全可信,配置如下:

 

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost1" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">

<heartbeat>show slave status</heartbeat>

<writeHost host="hostM" url="192.168.25.134:3306" user="root"

    password="root">

    <readHost host="hostS" url="192.168.25.166:3306" user="root"

    password="root" />

  </writeHost>

</dataHost>

 

 

 

(1) 设置 balance="1"与writeType="0"

Balance参数设置:

  1. balance=“0”, 全部读操作都发送到当前可用的writeHost上。

2. balance=“1”,全体读操作都随便的发送到readHost。

  1. balance=“2”,全部读操作都随意的在writeHost、readhost上散发

WriteType参数设置:

  1. writeType=“0”, 全数写操作都发送到可用的writeHost上。

  2. writeType=“1”,全体写操作都随意的发送到readHost。

  3. writeType=“2”,全部写操作都随便的在writeHost、readhost分上发。

 “readHost是附属于writeHost的,即意味着它从拾壹分writeHost获取同步数据,因而,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不办事了”,那是因为这时候,它的数额现已“不可信”了。基于那些思量,这几天mycat 1.3和1.4版本中,若想扶助MySQL一主一从的标准配置,而且在主节点宕机的状态下,从节点还是能够读取数据,则要求在Mycat里安插为五个writeHost并设置banlance=1。”

(2) 设置 switchType="2" 与slaveThreshold="100"

switchType 近来有三种选拔:

-1:表示不自动切换

1 :默认值,自动切换

2 :基于MySQL主从同步的事态调整是或不是切换

“Mycat心跳检查语句配置为 show slave status ,dataHost 上定义五个新性格: switchType="2" 与slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过检验show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 四个字段来规定当前主导同步的情事以至Seconds_Behind_Master主从复制时延。“

 

 

附:Centos6.5下安装mysql

首先步:查看mysql是或不是安装。

rpm -qa|grep mysql

其次步:如果mysql的本子不是想要的本子。要求把mysql卸载。

yum remove mysql mysql-server mysql-libs mysql-common

rm -rf /var/lib/mysql

rm /etc/my.cnf

其三步:安装mysql。必要使用yum命令安装。在安装mysql此前须求安装mysql的下载源。须求从oracle的官网下载。

1)下载mysql的源包。

我们是centos6.4对应的rpm包为:mysql-community-release-el6-5.noarch.rpm

2)安装mysql下载源:

yum localinstall mysql-community-release-el6-5.noarch.rpm

(图片 10)此附属类小部件可保留

 图片 11

 

3)在线安装mysql:

yum install mysql-community-server

第四步:启动mysql

service mysqld start

第五步:需求给root客商安装密码。

/usr/bin/mysqladmin -u root password 'new-password'  // 为root账号设置密码

第六步:远程连接授权。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

在乎:'myuser'、'mypassword' 需要替换来实际的客商名和密码。

 

本文由 数据库发布,转载请注明来源:Mycat数据库分片,猫从何地来