MySQL基于linux的mycat的读写分离

什么是读写分离

在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让二者分工明确达到提升数据库总体读写性能。固然,主数据库另一个功能就是负责将事务性查询致使的数据变动同步到从库中,也就是写操做。mysql

 

主从复制原理

 依赖于二进制日志,binary-log.linux

 二进制日志中记录引发数据库发生改变的语句sql

  Insert 、delete、update、create table数据库

什么是  Mycat

是一个开源的分布式数据库系统,可是由于数据库通常都有本身的数据库引擎,而Mycat并无属于本身的独有数据库引擎,全部严格意义上说并不能算是一个完整的数据库系统,只能说是一个在应用和数据库之间起桥梁做用的中间件。express

在Mycat中间件出现以前,MySQL主从复制集群,若是要实现读写分离,通常是在程序段实现,这样就带来了一个问题,即数据段和程序的耦合度过高,若是数据库的地址发生了改变,那么个人程序也要进行相应的修改,若是数据库不当心挂掉了,则同时也意味着程序的不可用,而对于不少应用来讲,并不能接受;

apache

  引入Mycat中间件能很好地对程序和数据库进行解耦,这样,程序只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务的,大量的通用数据聚合、事务、数据源切换等工做都由中间件来处理;架构

  Mycat中间件的原理是对数据进行分片处理,从原有的一个库,被切分为多个分片数据库,全部的分片数据库集群构成完成的数据库存储,有点相似磁盘阵列中的RAID0.app

Mycat安装

建立表结构

CREATE DATABASE IF NOT EXISTS `weibo_simple`;less

-- ------------------------------------
-- Table structure for `t_users` 用户表
-- ------------------------------------
DROPTABLEIFEXISTS`t_users`;
CREATETABLE`t_users` (
`user_id`varchar64NOTNULLCOMMENT'注册用户ID'  () ,
`user_email`varchar64NOTNULLCOMMENT'注册用户邮箱'  () ,
`user_password`varchar64NOTNULLCOMMENT'注册用户密码'  () ,
`user_nikename`varchar64NOTNULLCOMMENT'注册用户昵称'  () ,
`user_creatime`NOTNULLCOMMENT'注册时间'   datetime ,
`user_status`1NOTNULLCOMMENT'验证状态  1:已验证  0:未验证'   tinyint() ,
`user_deleteflag`1NOTNULLCOMMENT'删除标记  1:已删除 0:未删除'   tinyint() ,
KEY`user_id`  PRIMARY  ()
ENGINEInnoDBDEFAULTCHARSET) ==utf8;
 
-- -------------------------------------
-- Table structure for `t_message`微博表
-- -------------------------------------
DROPTABLEIFEXISTS`t_message`;
CREATETABLE`t_message` (
`messages_id`varchar64NOTNULLCOMMENT'微博ID'  () ,
`user_id`varchar64NOTNULLCOMMENT'发表用户'  () ,
`messages_info`varchar255DEFAULTNULLCOMMENT'微博内容'  () ,
`messages_time`DEFAULTNULLCOMMENT'发布时间'   datetime ,
`messages_commentnum`int12DEFAULTNULLCOMMENT'评论次数'  () ,
`message_deleteflag`1NOTNULLCOMMENT'删除标记 1:已删除 0:未删除'   tinyint() ,
`message_viewnum`int12DEFAULTNULLCOMMENT'被浏览量'  () ,
KEY`messages_id`  PRIMARY  (),
KEY`user_id``user_id`   (),
CONSTRAINT`t_message_ibfk_1`KEY`user_id`REFERENCES`t_users``user_id`   FOREIGN  ()  ()
ENGINEInnoDBDEFAULTCHARSET) ==utf8;

 

 

配置server.xml

 

         <!-- 添加user -->分布式

   <user name="mycat">

    <property name="password">mycat</property>

    <property name="schemas">mycat</property>

    </user>

        

         <!-- 添加user -->

   <user name="mycat_red">

    <property name="password">mycat_red</property>

    <property name="schemas">mycat</property>

         <property name="readOnly">true</property>

    </user>

 

配置schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <!-- 与server.xml中user的schemas名一致 -->

    <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">

        <table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/>

        <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />

    </schema>

<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple

 

 

" />

  

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

                writeType="0" dbType="mysql" dbDriver="native" switchType="1"

                slaveThreshold="100">

         <heartbeat>select user()</heartbeat> 

        <writeHost host="hostMaster" url="172.27.185.1:3306" user="root" password="root">

        </writeHost>

        <writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/>

    </dataHost>

   

</mycat:schema>

配置rule.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- - - Licensed under the Apache License, Version 2.0 (the "License");

         - you may not use this file except in compliance with the License. - You

         may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0

         - - Unless required by applicable law or agreed to in writing, software -

         distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT

         WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the

         License for the specific language governing permissions and - limitations

         under the License. -->

<!DOCTYPE mycat:rule SYSTEM "rule.dtd">

<mycat:rule xmlns:mycat="http://org.opencloudb/">

          <tableRule name="rule1">

        <rule>

            <columns>user_id</columns>

            <algorithm>func1</algorithm>

        </rule>

    </tableRule>

    <function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong">

       <property name="mapFile">autopartition-long.txt</property>

    </function>

</mycat:rule>

为了更好地定位错误,修改log4j.xml

<level value="debug" />

双击startup_nowrap.bat开始启动

 

注意事项:

注意:1.我用EditPlus打开的,因此,个人EditPlus要指定编码格式,要改为utf-8,我第一次就是运行时候出错改了好久

          2

       <!-- 添加user -->

      <user name="mycat">

            <property name="password">mycat</property>

             <property name="schemas">mycat</property>

    </user>

//这里设置的mycat是读写也就是主数据库的用户名,下面的是密码

         <!-- 添加user -->

   <user name="mycat_red">

         <property name="password">mycat_red</property>

         <property name="schemas">mycat</property>

         <property name="readOnly">true</property>

   </user>

//这里设置的是从数据库的用户名密码,只有读的权限

3在schema.xml中

(1)<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple">

   weibo_simple这个是要操做的数据库名字

 (2)  <writeHost host="hostMaster" url="172.27.185.1:3306" user="root" password="root"/>

  <writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/>

第一个是配置的主数据库的IP(linux),后面是数据库的用户名和密码

第二个是配置的从数据库的IP(linux),后面是数据库的用户名和密码

 (3)启动之后出现以下就说明mycat安装启动成功

 

 

 (4)Navicat进行MySQL链接

注意端口号:8066

ip:ip为当前电脑也就是我window的IP

用户名为在service。xml里面配置的帐号密码

下面就是只读表的。不能添加数据只能刷新别地数据库添加的数据

相关文章
相关标签/搜索