該篇文章是基于下面的文章,進行進一步的搭建
(一)Linux下MySQL 5.7.x版本單執行個體+多執行個體部署
(二)Linux下MySQL 5.7.x版本主從資料庫搭建配置
開始之前先記錄一個新學到的Linux指令:
rz,sz是Linux/Unix同Windows進行ZModem檔案傳輸的指令行工具。優點就是不用再開一個sftp工具登入上去上傳下載下傳檔案。
sz filename:将標明的檔案發送(send)到本地機器
rz:運作該指令會彈出一個檔案選擇視窗,從本地選擇檔案上傳到Linux伺服器
rz -y : 覆寫上傳
安裝指令:
yum install lrzsz
1. 開始mycat的安裝:
1、下載下傳:
wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
2、下載下傳後解壓即可:
tar –zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz –C /usr/local
解壓後即安裝完成;
bin 程式目錄,存放了可執行檔案:
./mycat {start|restart|stop|status…}
conf 目錄下存放配置檔案:
server.xml 是 Mycat 伺服器參數設定和使用者賬号權限設定的配置檔案;
schema.xml 是邏輯庫定義、讀寫分離、分庫分表的核心配置檔案;
rule.xml 是分庫分表分片規則的配置檔案;
log4j2.xml配置logs目錄下mycat日志輸出;
wrapper.conf 配置相關JVM參數;
lib 目錄下主要存放 mycat 依賴的 jar包;
logs目錄日志存放日志檔案
3. Mycat讀寫分離配置
修改配置server.xml檔案
設定連接配接mycat時的使用者名和密碼, 邏輯庫:
<user name="root" defaultAccount="true">
<property name="password">root</property>
<property name="schemas">MYCATDB</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="user">
<property name="password">user</property>
<property name="schemas">MYCATDB</property>
<property name="readOnly">true</property>
</user>
配置schema.xml檔案
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--配置邏輯資料庫的映射 最大傳回資料條數 sqlMaxLimit -->
<schema name="MYCATDB" checkSQLschema="true" sqlMaxLimit="1000" dataNode="dn1">
<!--如果隻實作讀寫分離,此schema标簽下不需要配置其他資訊-->
</schema>
<!--配置了一個真實的資料庫goodsdb-->
<dataNode name="dn1" dataHost="localhost1" database="goodsdb" />
<!--balance="1"表示開啟讀寫分離,0表示不開啟讀寫分離-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!--寫庫(主庫)-->
<writeHost host="hostM3306" url="localhost:3306" user="root" password="root">
<!--讀庫(從庫)-->
<readHost host="hostS4406" url="localhost:4406" user="root" password="root"/>
</writeHost>
</dataHost>
</mycat:schema>
4. 測試讀寫分離
配置好MySQL主從複制并啟動主從MySQL;
啟動Mycat:
/usr/local/mycat/bin/mycat start
登入Mycat:
cd /usr/local/mysql-5.7.24/bin/
mysql -uroot -p -P8066 -h127.0.0.1
mycat預設資料通路端口是8066
show databases;
use mycatdb;
show tables;
會出現,配置的主庫的所有資料表
插入資料,觀察MySQL資料的情況;
insert into users (phone) values ('13700000000');
Select * from users; 可以正常查詢;
cd /usr/local/mysql-5.7.24/bin
./mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3306/my.cnf &
當把主庫關閉當機,驗證是否可以再插入,如果不能插入,表示已經實作了讀寫分離;
cd /usr/local/mysql-5.7.24/bin
./mysqladmin -uroot -p -P4406 -h127.0.0.1 shutdown
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &
當把從庫關閉當機,驗證是否可以再查詢,如果不能查詢,表示已經實作了讀寫分離;
balance屬性
負載均衡類型,目前的取值有4種:
- balance=“0”, 不開啟讀寫分離機制,所有讀操作都發送到目前可用的writeHost上;
- balance=“1”,全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
- balance=“2”,所有讀操作都随機的在writeHost、readhost上分發;
-
balance=“3”,所有讀請求随機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力;
推薦balance設定為1;
switchType屬性
用于指定主伺服器發生故障後的切換類型:
-1 表示不自動切換
1 預設值,自動切換
2 基于MySQL主從同步的狀态決定是否切換
3 基于MySQL galary cluster的切換機制(适合叢集)(1.4.1)
heartbeat标簽
用于和後端資料庫進行心跳檢查的語句
當switchType為1時,mysql心跳檢查語句是select user()
switchType為2時,心跳檢查語句是show slave status
writeHost與readHost标簽
writeHost指定寫庫、readHost指定讀庫,組合這些讀寫執行個體來滿足系統的要求。
在一個dataHost内可以定義多個writeHost和readHost。如果writeHost指定的後端資料庫當機,那麼這個writeHost綁定的所有readHost都将不可用。另外,由于writeHost當機系統會自動被檢測到,将自動切換到備用的writeHost上去;