主頁(yè) > 知識(shí)庫(kù) > Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離

Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離

熱門標(biāo)簽:寧夏房產(chǎn)智能外呼系統(tǒng)要多少錢 烏海智能電話機(jī)器人 做外呼系統(tǒng)的公司違法嗎 在百度地圖標(biāo)注車輛 藍(lán)點(diǎn)外呼系統(tǒng) 撫順移動(dòng)400電話申請(qǐng) 貴陽(yáng)教育行業(yè)電話外呼系統(tǒng) 400電話申請(qǐng)方案 威海人工外呼系統(tǒng)供應(yīng)商

Linux-使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離

一、MySQL 讀寫分離

1、MySQL 讀寫分離的概述

MySQL 作為目前世界上使用最廣泛的免費(fèi)數(shù)據(jù)庫(kù),相信所有從事系統(tǒng)運(yùn)維的工程師都一定接觸過。但在實(shí)際的生產(chǎn)環(huán)境中,由單臺(tái) MySQL 作為獨(dú)立的數(shù)據(jù)庫(kù)是完全不能滿足實(shí)際需求的,無論是在安全性,高可用性以及高并發(fā)等各個(gè)方面。

因此,一般來說都是通過主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),再通過讀寫分離(MySQL-Proxy/Amoeba)來提升數(shù)據(jù)庫(kù)的并發(fā)負(fù)載能力,這樣的方案來進(jìn)行部署與實(shí)施的。

2、讀寫分離工作原理

基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫(kù)處理 SELECT 查詢操作。數(shù)據(jù)庫(kù)復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫(kù)。 在這里插入圖片描述 數(shù)據(jù)內(nèi)部交換過程:

3、為什么要讀寫分離

  • 面對(duì)越來越大的訪問壓力,單臺(tái)的服務(wù)器的性能成為瓶頸,需要分擔(dān)負(fù)載
  • 主從只負(fù)責(zé)各自的寫和讀,極大程度的緩解 X(寫)鎖和 S(讀)鎖爭(zhēng)用
  • 從庫(kù)可配置 myisam 引擎,提升查詢性能以及節(jié)約系統(tǒng)開銷
  • 增加冗余,提高可用性

3、實(shí)現(xiàn)讀寫分離的方式

有兩種方式實(shí)現(xiàn)

(1)應(yīng)用程序?qū)訉?shí)現(xiàn):網(wǎng)站的程序?qū)崿F(xiàn) 應(yīng)用程序?qū)訉?shí)現(xiàn)指的是在應(yīng)用程序內(nèi)部及連接器中實(shí)現(xiàn)讀寫分離 。

優(yōu)點(diǎn): 應(yīng)用程序內(nèi)部實(shí)現(xiàn)讀寫分離,安裝既可以使用; 減少一定部署難度; 訪問壓力在一定級(jí)別以下,性能很好。
缺點(diǎn): 架構(gòu)一旦調(diào)整,代碼要跟著變; 難以實(shí)現(xiàn)高級(jí)應(yīng)用,如自動(dòng)分庫(kù),分表; 無法適用大型應(yīng)用場(chǎng)景。

(2)中間件層實(shí)現(xiàn): 中間件層實(shí)現(xiàn)是指在外部中間件程序?qū)崿F(xiàn)讀寫分離

4、常見的中間件程序

(1)Cobar: 阿里巴巴 B2B 開發(fā)的關(guān)系型分布式系統(tǒng),管理將近 3000 個(gè) MySQL 實(shí)例。 在阿里經(jīng)受住了考驗(yàn),后面由于作者的走開的原因 cobar 沒有人維護(hù) 了,阿里也開發(fā)了 tddl 替代 cobar。
(2)MyCAT: 社區(qū)愛好者在阿里 cobar 基礎(chǔ)上進(jìn)行二次開發(fā),解決了 cobar 當(dāng)時(shí)存在的一些問題,并且加入了許多新的功能在其中。目前 MyCAT 社區(qū)活躍度很高,已經(jīng)有一些公司在使用 MyCAT??傮w來說支持度比 較高,也會(huì)一直維護(hù)下去。
(3)OneProxy: 數(shù)據(jù)庫(kù)界大牛,前支付寶數(shù)據(jù)庫(kù)團(tuán)隊(duì)領(lǐng)導(dǎo)樓總開發(fā),基于 mysql 官方 的 proxy 思想利用 c 進(jìn)行開發(fā)的,OneProxy 是一款商業(yè)收費(fèi)的中間件,樓總舍去了一些功能點(diǎn),專注在性能和穩(wěn)定性上。有人測(cè)試過說在高并發(fā)下很穩(wěn)定。
(4)Vitess: 這個(gè)中間件是 Youtube 生產(chǎn)在使用的,但是架構(gòu)很復(fù)雜。 與以往中間件不同,使用 Vitess 應(yīng)用改動(dòng)比較大,要使用他提供語(yǔ)言的 API 接口,我們可以借鑒他其中的一些設(shè)計(jì)思想。
(5)Kingshard: Kingshard 是前 360Atlas 中間件開發(fā)團(tuán)隊(duì)的陳菲利用業(yè)余時(shí)間 用 go 語(yǔ)言開發(fā)的,目前參與開發(fā)的人員有 3 個(gè)左右, 目前來看還不是成熟可以使用的產(chǎn)品,需要在不斷完善。
(7)Atlas: 360 團(tuán)隊(duì)基于 mysql proxy 把 lua 用 C 改寫。原有版本是支持分表, 目前已經(jīng)放出了分庫(kù)分表版本。在網(wǎng)上看到一些朋友經(jīng)常說在高并發(fā)下會(huì)經(jīng)常掛掉,如果大家要使用需要提前做好測(cè)試。
MaxScale 與 MySQL Route: 這兩個(gè)中間件都算是官方的,MaxScale 是 mariadb (MySQL 原作者維護(hù)的一個(gè)版本)研發(fā)的,目前版本不支持分庫(kù)分表。MySQL Route 是現(xiàn)在 MySQL 官方 Oracle 公司發(fā)布出來的一個(gè)中間件。
優(yōu)點(diǎn): 架構(gòu)設(shè)計(jì)更靈活 可以在程序上實(shí)現(xiàn)一些高級(jí)控制,如:透明化水平拆分,failover,監(jiān)控 可以依靠技術(shù)手段提高 mysql 性能 對(duì)業(yè)務(wù)代碼的影響小,同時(shí)也安全
缺點(diǎn): 需要一定的開發(fā)運(yùn)維團(tuán)隊(duì)的支持。

二、MyCAT簡(jiǎn)述

1、什么是 MyCAT

一個(gè)徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫(kù)集群; 支持事務(wù)、ACID、可以替代 MySQL 的加強(qiáng)版數(shù)據(jù)庫(kù); 一個(gè)可以視為 MySQL 集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來替代昂貴的 Oracle 集群; 一個(gè)融合內(nèi)存緩存技術(shù)、NoSQL 技術(shù)、HDFS 大數(shù)據(jù)的新型 SQL Server; 結(jié)合傳統(tǒng)數(shù)據(jù)庫(kù)和新型分布式數(shù)據(jù)倉(cāng)庫(kù)的新一代企業(yè)級(jí)數(shù)據(jù)庫(kù)產(chǎn)品; 一個(gè)新穎的數(shù)據(jù)庫(kù)中間件產(chǎn)品。

 

2、MyCat 服務(wù)安裝與配置

MyCat 有提供編譯好的安裝包,支持 Windows、Linux、Mac、Solaris 等系統(tǒng)上安裝與運(yùn)行。官方下載主頁(yè) http://www.mycat.org.cn/

架構(gòu):

192.168.1.63 mycat
192.168.1.64 主
192.168.1.65 從

Mycat 需要安裝 JDK 1.7 或者以上版:

第一步:下載 jdk-8u191-linux-x64.tar.gz 文件

[root@xuegod63 local]# wget http://download.oracle.com/otn-pub/java/jdk/8u191-
b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz 
#如果在Linux 上下載的程序包有問題,需要把鏈接復(fù)制到 Windows 上下載再上傳到 Linux。

第二步:新建/usr/java 文件夾,將 jdk-8u191-linux-x64.tar.gz 解壓到該目錄中

[root@xuegod63 local]# mkdir /usr/java
[root@xuegod63 local]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/java/

第三步:配置環(huán)境變量 在/etc/profile 底部加入如下內(nèi)容:

[root@xuegod63 local]# vim /etc/profile.d/java.sh #/etc/profile.d/目錄下創(chuàng)建
java.sh 文件并定入如下內(nèi)容
JAVA_HOME=/usr/java/jdk1.8.0_191
PATH=$JAVA_HOME/bin:$PATH 
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
[root@xuegod63 local]# source /etc/profile.d/java.sh #使環(huán)境變量生效
[root@xuegod63 local]# java -version#查看 java 版本
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

 Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

安裝 mycat Linux 下可以下載 Mycat-server-xxxxx.linux.tar.gz 解壓在某個(gè)目錄下,注意目錄不能有空格,在 Linux(Unix)下,建議放在 usr/local/Mycat 目錄下,如下:

[root@xuegod63 ~]# tar -xf Mycat-server-1.5-RELEASE-0301083012-linux.tar.gz -C 
/usr/local/
[root@xuegod63 local]# ls /usr/local/mycat/

下面修改 MyCAT 用戶密碼(僅供參考):

[root@xuegod63 ~]# useradd mycat
[root@xuegod63 ~]# passwd mycat #修改時(shí)輸入兩次密碼 成功

[root@xuegod63 ~]# chown -R mycat.mycat /usr/local/mycat #修改權(quán)限

目錄解釋如下:

bin 程序目錄,存放了 window 版本和 linux 版本,除了提供封裝成服務(wù)的版本之外,也提供了nowrap 的 shell 腳本命令,方便大家選擇和修改,進(jìn)入到 bin 目錄:

Linux 下運(yùn)行:./mycat console,首先要 chmod +x *

注:mycat 支持的命令{ console | start | stop | restart | status | dump }

conf 目錄下存放配置文件,server.xml 是 Mycat 服務(wù)器參數(shù)調(diào)整和用戶授權(quán)的配置文件,schema.xml 是邏輯庫(kù)定義和表以及分片定義的配置文件,rule.xml 是分片規(guī)則的配置文件,分片規(guī)則的具體一些參數(shù)信息單獨(dú)存放為文件,也在這個(gè)目錄下,配置文件修改,需要重啟 Mycat 生效。

lib 目錄下主要存放 mycat 依賴的一些 jar 文件。

日志存放在 logs/mycat.log 中,每天一個(gè)文件,日志的配置是在 conf/log4j.xml 中,根據(jù)自己的需要,可以調(diào)整輸出級(jí)別為 debug,在 debug 級(jí)別下,會(huì)輸出更多的信息,方便排查問題。

三、MyCat 服務(wù)啟動(dòng)與啟動(dòng)設(shè)置

MyCAT 在 Linux 中部署啟動(dòng)時(shí),首先需要在 Linux 系統(tǒng)的環(huán)境變量中配置 MYCAT_HOME,操作方式如下:

[root@xuegod63 local]# vim /etc/profile.d/mycat.sh #在/etc/profile.d 目錄下創(chuàng)建
mycat.sh 文件,并寫入如下。
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH
[root@xuegod63 local]# source /etc/profile.d/mycat.sh #使環(huán)境變量生效

如果是在多臺(tái) Linux 系統(tǒng)中組建的 MyCAT 集群,那需要在 MyCAT Server 所在的服務(wù)器上配置對(duì)其他 IP 和主機(jī)名的映射,配置方式如下:

vi /etc/hosts 

例如:我有 3 臺(tái)機(jī)器,配置如下: IP 主機(jī)名:

192.168.1.63 xuegod63.cn 
192.168.1.64 xuegod64.cn 
192.168.1.65 xuegod65.cn

編輯完后,保存文件。

mycat 的用戶賬號(hào)和授權(quán)信息是在 conf/server.xml 文件中配置

[root@xuegod63 local]# vim /usr/local/mycat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
 <system>
 <property name="defaultSqlParser">druidparser</property>
 </system>
 <!--以下設(shè)置為應(yīng)用訪問帳號(hào)權(quán)限 -->
 34 行 <user name="root"> #定義管理員用戶,也就是連接 Mycat 的用戶名
 <property name="password">123456</property> #密碼
 <property name="schemas">ha</property> #定義一個(gè)邏輯庫(kù),與schema 配置文件對(duì)應(yīng)
 </user>
 <!--以下設(shè)置為應(yīng)用只讀帳號(hào)權(quán)限 -->
 <user name="user">
 <property name="password">user</property>
 <property name="schemas">ha</property>
 <property name="readOnly">true</property>
 </user>
</mycat:server>

編輯 MyCAT 的配置文件 schema.xml,關(guān)于 dataHost 的配置信息如下

[root@xuegod63 local]# mv /usr/local/mycat/conf/schema.xml 
/usr/local/mycat/conf/schema.xml.bak #備份原文件。
[root@xuegod63 local]# vim /usr/local/mycat/conf/schema.xml 新建
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
 <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" 
dataNode='dn1'>
 </schema>
 <dataNode name="dn1" dataHost="dthost" database="ha"/>
 <dataHost name="dthost" maxCon="500" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" 
slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <writeHost host="xuegod64.cn" url="192.168.1.64:3306" user="mycat" 
password="123456">
 </writeHost>
 <writeHost host="xuegod65.cn" url="192.168.1.65:3306" user="mycat" 
password="123456">
 </writeHost>
 </dataHost>
</mycat:schema>

綠色 為物理存在的數(shù)據(jù)庫(kù)名 注解: schema 標(biāo)簽用于定義 MyCat 實(shí)例中的邏輯庫(kù),name:后面就是邏輯庫(kù)名 MyCat 可以有多個(gè)邏輯庫(kù),每個(gè)邏輯庫(kù)都有自己的相關(guān)配置??梢允褂?schema 標(biāo)簽來劃分這些不同的邏輯庫(kù)。

checkSQLschema 這個(gè)屬性默認(rèn)就是 false,官方文檔的意思就是是否去掉表前面的數(shù)據(jù)庫(kù)的名稱,”select * from db1.testtable” ,設(shè)置為 true 就會(huì)去掉 db1。但是如果 db1 的名稱不是schema 的名稱,那么也不會(huì)被去掉,因此官方建議不要使用這種語(yǔ)法。同時(shí)默認(rèn)設(shè)置為 false。

sqlMaxLimit 當(dāng)該值設(shè)置為某個(gè)數(shù)值時(shí)。每條執(zhí)行的 SQL 語(yǔ)句,如果沒有加上 limit 語(yǔ)句,MyCat 也會(huì)自動(dòng)的加上所對(duì)應(yīng)的值。例如設(shè)置值為 100,執(zhí)行”select * from test_table”,則效果為 “selelct * from test_table limit 100”.

dataNode 標(biāo)簽定義了 MyCat 中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說所的數(shù)據(jù)分片。一個(gè)dataNode 標(biāo)簽就是一個(gè)獨(dú)立的數(shù)據(jù)分片

.

writeHost /readHost 這兩個(gè)標(biāo)簽都指定后端數(shù)據(jù)庫(kù)的相關(guān)配置,用于實(shí)例化后端連接池。唯一不同的是,writeHost 指定寫實(shí)例、readHost 指定讀實(shí)例。 在一個(gè) dataHost 內(nèi)可以定義多個(gè)writeHost 和 readHost。但是,如果 writeHost 指定的后端數(shù)據(jù)庫(kù)宕機(jī),那么這個(gè) writeHost 綁定的所有 readHost 都將不可用。另一方面,由于這個(gè) writeHost 宕機(jī),系統(tǒng)會(huì)自動(dòng)的檢測(cè)到,并切換到備用的 writeHost 上去。這兩個(gè)標(biāo)簽的屬性相同

有兩個(gè)參數(shù)需要注意,balance 和 switchType。其中,balance 指的負(fù)載均衡類型,目前的取值 有 4 種:

(2)balance="0", 不開啟讀寫分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上;
(2)balance="1",全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡,簡(jiǎn)單的 說,當(dāng)雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2、S1、S2 都 參與 select 語(yǔ)句的負(fù)載均衡;
(3)balance="2",所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā);
(4)balance="3",所有讀請(qǐng)求隨機(jī)的分發(fā)到 wiriterHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不 負(fù)擔(dān)讀壓力。

switchType 指的是切換的模式,目前的取值也有 4 種:

(1)switchType='-1' 表示不自動(dòng)切換;
(2)switchType='1' 默認(rèn)值,表示自動(dòng)切換;
(3)switchType='2' 基于 MySQL 主從同步的狀態(tài)決定是否切換,心跳語(yǔ)句為 show slave status;
(4)switchType='3'基于 MySQL galary cluster 的切換機(jī)制(適合集群)(1.4.1),心跳語(yǔ)句為show status like 'wsrep%'。

經(jīng)過以上兩個(gè)步驟的配置,就可以到/usr/local/mycat/bin 目錄下執(zhí)行 ./mycat start,即可啟動(dòng)mycat 服務(wù)!

[root@xuegod63 local]# /usr/local/mycat/bin/mycat start
[root@xuegod63 ~]# cat /usr/local/mycat/logs/wrapper.log #查看日志,啟動(dòng)成功

四、配置 MySQL 主從

安裝 mysql 上傳 mysql-5.7.tar.gz 到 xuegod64

[root@xuegod64 ~]# systemctl start mysqld
[root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod64 ~]# systemctl restart mysqld

關(guān)閉密碼強(qiáng)度審計(jì)插件

[root@xuegod64 ~]# systemctl start mysqld
[root@xuegod64 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod64 ~]# systemctl restart mysqld

修改 root 用戶密碼

[root@xuegod64 ~]# grep "password" /var/log/mysqld.log
[root@xuegod64 ~]# mysql -uroot -p'-NEjo1gbPllh'
mysql> set password for root@localhost = password('123456');
mysql> exit

另一臺(tái)機(jī)器

[root@xuegod65 ~]# tar xf mysql-5.7.tar.gz
[root@xuegod65 ~]# yum install -y ./mysql*.rpm

關(guān)閉密碼強(qiáng)度審計(jì)插件

[root@xuegod65 ~]# systemctl start mysqld
[root@xuegod65 ~]# echo "validate-password=OFF">> /etc/my.cnf
[root@xuegod65 ~]# systemctl restart mysqld

修改 root 用戶密碼

[root@xuegod65~]# grep "password" /var/log/mysqld.log
[root@xuegod65 ~]# mysql -uroot -p'%OrrfGwyM6tS'
mysql> set password for root@localhost = password('123456');
mysql> exit

創(chuàng)建數(shù)據(jù)庫(kù)和測(cè)試數(shù)據(jù)

[root@xuegod64 ~]# mysql -uroot -p123456
mysql> create database ha;
mysql> use ha;
mysql> create table test(id int,name varchar(20));
mysql> insert into test values(1,'man');
[root@xuegod64 ~]# mysqldump -uroot -p123456 -B ha >HA.sql #可以導(dǎo)出數(shù)據(jù)庫(kù)

將導(dǎo)出的數(shù)據(jù)庫(kù)傳給從服務(wù)器

[root@xuegod64 ~]# scp HA.sql root@192.168.1.65:/root/

xuegod65 從服務(wù)上操作: 導(dǎo)入數(shù)據(jù)庫(kù)和表,用于實(shí)現(xiàn)讀操作:

[root@xuegod65 ~]# mysql -uroot -p123456<HA.sql
[root@xuegod64 ~]# vim /etc/my.cnf
log-bin=mysql-bin-master #啟用二進(jìn)制日志
server-id=1 #本機(jī)數(shù)據(jù)庫(kù) ID 標(biāo)示
binlog-do-db=ha #可以被從服務(wù)器復(fù)制的庫(kù), 二進(jìn)制需要同步的數(shù)據(jù)庫(kù)名
binlog-ignore-db=mysql #不可以被從服務(wù)器復(fù)制的庫(kù)
[root@xuegod64 ~]# systemctl restart mysqld
[root@xuegod64 ~]# mysql -uroot -p'123456'

授權(quán)給 mycat 登陸數(shù)據(jù)庫(kù)使用的帳號(hào)以及主從復(fù)制賬號(hào)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "123456"; 
mysql> grant replication slave on *.* to slave@"192.168.1.%" identified by "123456";
mysql> exit
[root@xuegod65 ~]# vim /etc/my.cnf
log-bin=mysql-bin-slave #啟用二進(jìn)制日志
server-id=2 #本機(jī)數(shù)據(jù)庫(kù) ID 標(biāo)示
binlog-do-db=ha #可以被從服務(wù)器復(fù)制的庫(kù), 二進(jìn)制需要同步的數(shù)據(jù)庫(kù)名
binlog-ignore-db=mysql #不可以被從服務(wù)器復(fù)制的庫(kù)
[root@xuegod65 ~]# systemctl restart mysqld
[root@xuegod65 ~]# mysql -uroot -p'123456'

授權(quán)給 mycat 登陸數(shù)據(jù)庫(kù)使用的帳號(hào)以及主從復(fù)制賬號(hào)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "123456";
mysql> grant replication slave on *.* to slave@"192.168.1.%" identified by "123456";
mysql> change master to 
master_host='192.168.1.64',master_user='slave',master_password='123456';
mysql> start slave; #啟動(dòng) slave
mysql> show slave status\G #查看狀態(tài) ,有兩個(gè) yes 主從同步成功!
mysql> exit

模擬 slave 故障:從服務(wù)器掛掉了

[root@xuegod65 ~]# systemctl stop mysqld

在客戶端上測(cè)試讀寫

[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066 
mysql> use ha;
mysql> select * from test;

說明讀操作的路由切換到 master 上了,對(duì)外沒有任何影響!

[root@xuegod65 ~]# systemctl start mysqld

模擬 master 故障:主服務(wù)器掛掉了

[root@xuegod64 ~]# systemctl stop mysqld

在客戶端上測(cè)試讀寫

[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066
mysql> use ha;
mysql> create table test1(id int);
ERROR 1184 (HY000): 拒絕連接 #主數(shù)據(jù)庫(kù)停止了,是無法寫操作的,但不影響讀.
mysql> select * from test;

[root@xuegod64 ~]# systemctl start mysqld

只讀用戶登錄測(cè)試

mysql -u user -puser -h 192.168.1.201 -P8066
mysql> insert into test values(5,'feng');
ERROR 1495 (HY000): User readonly
mysql> select * from ha.test;
+------+--------+
| id | name |
+------+--------+
| 1 | cd |

五、實(shí)戰(zhàn)節(jié)點(diǎn)宕機(jī)后自動(dòng)切換 Slave 節(jié)點(diǎn)

配置 MM 模式主從復(fù)制環(huán)境 啟用 65 為 64 的主

[root@xuegod64 ~]# mysql -uroot -p'123456'
mysql> change master to 
master_host='192.168.1.65',master_user='slave',master_password='123456';
mysql> start slave; #啟動(dòng) slave
mysql> show slave status\G #查看狀態(tài) ,有兩個(gè) yes 主從同步成功!
mysql> exit

1、mycat 配置文件優(yōu)化調(diào)整

[root@xuegod63 ~]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
 <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" 
dataNode='dn1'>
 </schema>
 <dataNode name="dn1" dataHost="dthost" database="ha"/>
 <dataHost name="dthost" maxCon="500" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <writeHost host="xuegod64.cn" url="192.168.1.64:3306" user="mycat" 
password="123456">
 </writeHost>
 <writeHost host="xuegod65.cn" url="192.168.1.65:3306" user="mycat" 
password="123456">
 </writeHost>
 </dataHost>
</mycat:schema>

我們前面配置 switchType="-1"關(guān)閉了自動(dòng)切換,但是我們?cè)谥鲝沫h(huán)境下應(yīng)該避免在從節(jié)點(diǎn)寫入數(shù)據(jù),否則會(huì)造成主從數(shù)據(jù)庫(kù)數(shù)據(jù)不一致, 如果我們使用的是 MM 模式則主節(jié)點(diǎn)發(fā)生故障后會(huì)自動(dòng)切換至備用節(jié)點(diǎn),此時(shí)不影響數(shù)據(jù)寫入。

[root@xuegod63 ~]# /usr/local/mycat/bin/mycat restart 
[root@xuegod64 ~]# systemctl stop mysqld
[root@xuegod63 ~]# mysql -uroot -p123456 -h 192.168.1.63 -P8066
MySQL [(none)]> insert into ha.test values(666,'mk');
MySQL [(none)]> select * from ha.test;
+------+---------+
| id | name |
+------+---------+
| 1 | man |
| 666 | mk |

2、停主節(jié)點(diǎn):

[root@xuegod64 ~]# systemctl stop mysqld
Mycat 端繼續(xù)插入
mysql> insert into test values(5,'feng');

3、恢復(fù)主節(jié)點(diǎn):

[root@xuegod64 ~]# systemctl start mysqld
mysql -uroot -p123456
select * from ha.test;

關(guān)于使用方面的建議,在一些 CMS(內(nèi)容管理系統(tǒng))系統(tǒng)中底層的數(shù)據(jù)庫(kù)代碼已經(jīng)經(jīng)過封裝,此時(shí)使用 mycat 是不可取的,因?yàn)榉庋b后的 sql 語(yǔ)句會(huì)和 mycat 不兼容,建議是程序開發(fā)時(shí)應(yīng)考慮連接mysql 的方式和 mycat 是相互兼容的?;蛘哌x擇其他中間件比如 mysql-proxy。

以上就是Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離的詳細(xì)內(nèi)容,更多關(guān)于Linux MySQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

標(biāo)簽:朝陽(yáng) 周口 慶陽(yáng) 蕪湖 那曲 銅川 松原 泰州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離》,本文關(guān)鍵詞  Linux,如何,使用,MyCat,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Linux如何使用 MyCat 實(shí)現(xiàn) MySQL 主從讀寫分離的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章