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裏面配置的帳號密碼

下面就是隻讀表的。不能添加數據只能刷新別地數據庫添加的數據

相關文章
相關標籤/搜索