澳门在线威尼斯官方 > 电脑数据库 > 那后生可畏篇就够了

原标题:那后生可畏篇就够了

浏览次数:65 时间:2019-11-16

数据库读写抽离

布局如下:

<?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官网:
可以理解下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 心跳检测语句,注意语句结尾的分号要加。

系统开垦中,数据库是极度关键的五个点。除了程序的自身的优化,如:SQL语句优化、代码优化,数据库的管理笔者优化也是超重大的。主从、热备、分表分库等都以系统发展迟早会遭受的技术难点难题。Mycat是五个广受美评的数据库中间件,已经在无数产物上开展利用了。希望由此这篇文章的介绍,能学会Mycat的利用。

大面积难点

应用Mycat后总会碰着一些坑,笔者将自身境遇的局地主题材料在这里地列一下,希望能与大家有同感:

  • Mycat是否计划今后,就能够完全解决分表分库和读写分离难点?
    Mycat合作数据库自己的复制作用,能够解决读写抽离的标题,但是针对分表分库的难题,不是全面包车型地铁消弭。只怕说,到现在截至,产业界尚未完备的解决方案。
    分表分库写入能完美解决,可是,不能够圆满解决重视是联表查询的难点,Mycat扶助七个表联表的查询,多余多少个表的询问不扶植。 其实,很比相当多据库中间件关于分表分库后查询的难题,都是要求协和达成的,何况节本都不帮助联表查询,Mycat已经算做地拾叁分先进了。
    分表分库的后联表查询难点,大家经过客观数据库设计来制止。

  • Mycat补助什么数据库,其余平台如 .net、PHP能用吗?
    法定说了,帮助的数据库满含MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,比相当赞。
    尽量用Mysql,小编试过SQL Server,会有个别不成难题,因为有的语法有一些异样。

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

数据库分表分库

安插如下:

<?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>

使用

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有个认识,官方的文书档案了解起来也十分轻松,只是要求的小运更加多,本文为求证的参数,请参考官方文书档案。


款待大家关怀自身的众生号调换、学习、第有时间获取最新的文章
微信号:itmifen

图片 3

本文由澳门在线威尼斯官方发布于电脑数据库,转载请注明出处:那后生可畏篇就够了

关键词:

上一篇:没有了

下一篇:6的环境下修改生产环境的表结构