betway必威官网欢迎您-最新官方网站

点击立可下载开户即可下载betway必威官网欢迎您提供的所有游戏,因为最新官方网站与欧洲的八大电视台都展开了合作,betway必威官网欢迎您为你选择最优质的娱乐,欢迎您来体验试玩!。

您的位置:betway必威官网欢迎您 > betway必威官网欢迎您 > 分表分库

分表分库

2019-09-30 13:30

系统开辟中,数据库是可怜首要的多个点。除了程序的自作者的优化,如:SQL语句优化、代码优化,数据库的处理小编优化也是相当关键的。主从、热备、分表分库等都以系统升高迟早会境遇的本事难题难点。Mycat是一个广受好评的数据库中间件,已经在不菲成品上拓宽利用了。希望通过那篇作品的牵线,能学会Mycat的施用。

安装

Mycat官网:
能够驾驭下Mycat的背景和使用情形,那样使用起来比较有信念。

Mycat下载地址:http://dl.mycat.io/
官方网站有个文书档案,属于详细的介绍,初次入门,看起来相比花时间。

下载:
建议大家挑选 1.6-RELEASE 版本,究竟是相比稳固的本子。

安装:
据书上说不一样的种类选拔不一致的版本。包涵linux、windows、mac,我考虑依旧极其周到的,当然,也可以有源码版的。(ps:源码版的下载后,只要配置不错,就足以健康运维调治,那一个赞一下。)
图片 1

Mycat的装置其实只要解压下载的目录就能够了,特轻巧。
安装完毕后,目录如下:

目录 说明
bin mycat命令,启动、重启、停止等
catlet catlet为Mycat的一个扩展功能
conf Mycat 配置信息,重点关注
lib Mycat引用的jar包,Mycat是java开发的
logs 日志文件,包括Mycat启动的日志和运行的日志。

配置

Mycat的布局文件都在conf目录里面,这里介绍多少个常用的文本:

文件 说明
server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则

Mycat的架构其实很好驾驭,Mycat是代理,Mycat后边便是物理数据库。和Web服务器的Nginx类似。对于使用者来讲,访谈的都以Mycat,不会触发到后端的数据库。
我们未来做八个核心、读写分离,简单分表的亲自过问。结构如下图:
图片 2

服务器 IP 说明
Mycat 192.168.0.2 mycat服务器,连接数据库时,连接此服务器
database1 192.168.0.3 物理数据库1,真正存储数据的数据库
database2 192.168.0.4 物理数据库2,真正存储数据的数据库

Mycat作为主数据库中间件,确定是与代码弱关联的,所以代码是永不修改的,使用Mycat后,连接数据库是不改变的,暗许端口是8066。连接格局和日常数据库一样,如:jdbc:mysql://192.168.0.2:8066/

server.xml

示例

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

        <!-- 表级 DML 权限设置 -->
        <!--        
        <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>       
         -->
    </user>

器重关切上面这段,其余私下认可就可以。

参数 说明
user 用户配置节点
--name 登录的用户名,也就是连接Mycat的用户名
--password 登录的密码,也就是连接Mycat的密码
--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
--privileges 配置用户针对表的增删改查的权限,具体见文档吧

本人这里配置了贰个账号test 密码也是test,针对数据库lunch,读写权限都有,未有针对性表做任何例外的权柄。

schema.xml
schema.xml是最关键的配备项,首先看本人的配备文件。

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

<!-- 数据库配置,与server.xml中的数据库对应 -->
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="lunchmenu" dataNode="dn1"  />
        <table name="restaurant" dataNode="dn1"  />
        <table name="userlunch" dataNode="dn1"  />
        <table name="users" dataNode="dn1"  />
        <table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2"  rule="mod-long" />


    </schema>

<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="test1" database="lunch" />
    <dataNode name="dn2" dataHost="test2" database="lunch" />

<!-- 物理数据库配置 -->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

    <dataHost name="test2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostS1" url="192.168.0.3:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

</mycat:schema>
参数 说明
schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
dataNode 分片信息,也就是分库相关配置
dataHost 物理数据库,真正存储数据的数据库

各种节点的性质逐一表达:

schema:

属性 说明
name 逻辑数据库名,与server.xml中的schema对应
checkSQLschema 数据库前缀相关设置,建议看文档,这里暂时设为folse
sqlMaxLimit select 时默认的limit,避免查询全表

table:

属性 说明
name 表名,物理数据库中表名
dataNode 表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name
primaryKey 主键字段名,自动生成主键时需要设置
autoIncrement 是否自增
rule 分片规则名,具体规则下文rule详细介绍

dataNode

属性 说明
name 节点名,与table中dataNode对应
datahost 物理数据库名,与datahost中name对应
database 物理数据库中数据库名

dataHost

属性 说明
name 物理数据库名,与dataNode中dataHost对应
balance 均衡负载的方式
writeType 写入方式
dbType 数据库类型
heartbeat 心跳检测语句,注意语句结尾的分号要加。

接纳场景

数据库分表分库

布署如下:

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

<!-- 数据库配置,与server.xml中的数据库对应 -->
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="lunchmenu" dataNode="dn1"  />
        <table name="restaurant" dataNode="dn1"  />
        <table name="userlunch" dataNode="dn1"  />
        <table name="users" dataNode="dn1"  />
        <table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2"  rule="mod-long" />


    </schema>

<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="test1" database="lunch" />
    <dataNode name="dn2" dataHost="test2" database="lunch" />

<!-- 物理数据库配置 -->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

    <dataHost name="test2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostS1" url="192.168.0.3:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

</mycat:schema>

本身在192.168.0.2、192.168.0.3均有数据库lunch。
lunchmenu、restaurant、userlunch、users这一个表都只写入节点dn1,也正是192.168.0.2以此服务,而dictionary写入了dn1、dn2七个节点,也正是192.168.0.2、192.168.0.3这两台服务器。分片的法规为:mod-long。
首要关注rule属性,rule属性的开始和结果来源于rule.xml这些文件,Mycat协助10种分表分库的法规,基本能满意你所需求的供给,那些必需赞二个,其余数据库中间件好像都尚未那样多。
table中的rule属性对应的正是rule.xml文件中tableRule的name,具体有啥样分表和分库的贯彻,提出依然看下文书档案。笔者那边选用的mod-long正是将数据平均拆分。因为笔者后端是两台物理库,所以rule.xml中mod-long对应的function count为2,见上边部分代码:

<tableRule name="mod-long">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>

数据库读写分离

安排如下:

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

<!-- 数据库配置,与server.xml中的数据库对应 -->
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="lunchmenu" dataNode="dn1"  />
        <table name="restaurant" dataNode="dn1"  />
        <table name="userlunch" dataNode="dn1"  />
        <table name="users" dataNode="dn1"  />
        <table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1"  />


    </schema>

<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="test1" database="lunch" />


<!-- 物理数据库配置 -->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">  
        <readHost host="hostM1" url="192.168.0.3:3306" user="root" password="123456">   
        </readHost>
        </writeHost>
    </dataHost>


</mycat:schema>

像这种类型的配备与前贰个演示配置改变如下:
除去了table分配的条条框框,以及datanode唯有三个
datahost也独有一台,不过writehost总增多了readhost,balance改为1,表示读写分离。
以上配置高达的效应正是102.168.0.2为主库,192.168.0.3为从库。

注意:Mycat主从送别只是在读的时候做了拍卖,写入数据的时候,只会写入到writehost,要求经过mycat的主从复制将数据复制到readhost,这一个难点那时候候本人纠葛了绵绵,数据写入writehost后,readhost一贯相当的少,感到是协和配置的标题,前面才发觉Mycat就一直不落到实处主从复制的成效,毕竟数据库自个儿自带的这么些效果才是最火速牢固的。

关于其余的面貌,就好像期着力和分表分库也是支撑的了,只要领悟这么些实现以后再去修改配置,都是足以兑现的。而热备及故障职业官方推荐使用haproxy合作共同利用,我们能够试试。

使用

Mycat的开发银行也一点也不细略,运行命令在Bin目录:

##启动
mycat start

##停止
mycat stop

##重启
mycat restart

假定在运维时开掘非凡,在logs目录中查看日志。

  • wrapper.log 为顺序运转的日志,运维时的难题看这么些
  • mycat.log 为脚本施行时的日志,SQL脚本实践报错后的切切实实错误内容,查看这一个文件。mycat.log是前卫的不当日志,历史日志会依据时间变化目录保存。

mycat运行后,试行命令不成事,或者实际配置有荒唐,导致后边的命令没有很好的奉行。

Mycat带来的最大便宜就是选取是一丝一毫不用修改原有代码的,在mycat通过命令运行后,你只要求将数据库连接切换来Mycat的地址就可以了。如上面就足以扩充再三再四了:

 mysql -h192.168.0.1 -P8806 -uroot -p123456

连天成功后方可实践sql脚本了。
于是,可以直接通过sql管理工科具(如:navicat、datagrip)连接,施行脚本。小编直接用datagrip来进行普通轻松的军管,那么些很方便。

Mycat还会有一个处理的三番五次,端口号是9906.

 mysql -h192.168.0.1 -P9906 -uroot -p123456

总是后得以依据管理命令查看Mycat的运营状态,当然,喜欢UI管理方式的人,能够安装二个Mycat-Web来进行管制,风乐趣活动物检疫索。

回顾,开采中利用Mycat和直接动用Mysql机遇没迥然分裂。

周围难点

使用Mycat后总会碰到有的坑,作者将自身碰着的有些难点在那边列一下,希望能与大家有同感:

  • Mycat是或不是布局今后,就可以完全化解分表分库和读写分离难点?
    Mycat协作数据库自个儿的复制作用,能够化解读写分离的主题素材,然则针对分表分库的题目,不是巨细无遗的缓慢解决。也许说,到现在甘休,业界尚未宏观的建设方案。
    分表分库写入能圆满化解,可是,无法周全化解主假使联表查询的标题,Mycat支持三个表联表的询问,多余五个表的查询不支持。 其实,很繁多据库中间件关于分表分库后查询的主题素材,都是内需团结完成的,何况节本都不扶助联表查询,Mycat已经算做地足够进步了。
    分表分库的后联表查询难题,我们通过客观数据库设计来防止。

  • Mycat帮助什么数据库,其他平台如 .net、PHP能用吗?
    官方说了,帮助的数据库包含MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,相当赞。
    尽量用Mysql,作者试过SQL Server,会有个别小难题,因为有的语法有一点距离。

  • Mycat 非JAVA平台如 .net、PHP能用吗?
    能够用。那或多或少MyCat做的也很棒。

参考

《Mycat权威指南》:
官网 :

假若想熟谙运用Mycat,提议要过细看看官方推荐的文书档案,大概供给花点时间。本文只是轻便的牵线下Mycat的布置,希望能急迅让我们对Mycat有个认知,官方的文书档案明白起来也很轻松,只是须要的岁月更加多,本文为表达的参数,请参见官方文书档案。


应接大家关怀自己的大众号调换、学习、第一时间获取最新的稿子
微信号:itmifen

图片 3

本文由betway必威官网欢迎您发布于betway必威官网欢迎您,转载请注明出处:分表分库

关键词: