一. 部署環(huán)境
1. 準(zhǔn)備
MySQL-master 192.168.78.128
MySQL-slave 192.168.78.129
Mycat 192.168.78.130
關(guān)閉防火墻
systemctl stop firewalld
setenforce 0 或者 vim /etc/selinux/config
SELINUX=disabled
reboot 重啟生效
2. 下載 jdk
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz
3. 解壓文件
shell> tar -xf -C jdk-8u201-linux-x64.tar.gz /usr/local/
shell> ln -s /usr/local/jdk1.8.0_201/ /usr/local/java
4. 配置環(huán)境變量
shell> vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
注意 CLASSPATH 中有個(gè)點(diǎn).
不要省略
5. 使環(huán)境變量生效
// 立刻在當(dāng)前的 shell 會(huì)話中生效
shell> source /etc/profile
全部生效需要重啟機(jī)器
二. 部署Mycat
1. 下載
wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
2. 解壓
shell> tar -xf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local/
shell> ls /usr/local/mycat/
bin catlet conf lib logs version.txt
3. 配置 server.xml
<user name="mycatdb">
<property name="password">123456</property>
<property name="schemas">wsl</property>
<!-- 表級(jí) DML 權(quán)限設(shè)置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
</mycat:server>
<user name="mycatdb" # mycatdb 為登陸mycat的用戶名 mysql -umycatdb -p'密碼' -P8066 -h'ip地址'
<property name="schemas">wsl</property> #wsl 為用戶訪問(wèn)的邏輯庫(kù)
==上面的配置中烤镐,假如配置了用戶訪問(wèn)的邏輯庫(kù)耻姥,那么必須在 schema.xml 文件中也配置這個(gè)邏輯庫(kù)蜗字,否則報(bào)錯(cuò)被丧,啟動(dòng) mycat 失敗==
4. 配置 schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="wsl" // 邏輯庫(kù)名稱
checkSQLschema="false" // 不檢查
sqlMaxLimit="100" // 最大連接數(shù)
dataNode='dn1' // 數(shù)據(jù)節(jié)點(diǎn)名稱
>
</schema>
<dataNode name="dn1" // 此數(shù)據(jù)節(jié)點(diǎn)的名稱
dataHost="localhost1" // 主機(jī)組
database="test" /> // 真實(shí)的數(shù)據(jù)庫(kù)名稱test為mysql-master中真實(shí)存在的數(shù)據(jù)庫(kù)名
<dataHost name="localhost1"
maxCon="1000" minCon="10" // 連接
balance="3" // 負(fù)載均衡
writeType="0" // 寫模式配置
dbType="mysql" dbDriver="native" // 數(shù)據(jù)庫(kù)配置
switchType="1" slaveThreshold="100"
>
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1"
url="192.168.78.128:3306"
user="root"
password="123"
>
<readHost host="hostS2"
url="192.168.78.129:3306"
user="root"
password="123" />
</writeHost>
</dataHost>
</mycat:schema>
balance 屬性
負(fù)載均衡類型,目前的取值有 3 種:
- balance="0", 不開(kāi)啟讀寫分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上旧困。
- balance="1", 全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡,簡(jiǎn)單的說(shuō),當(dāng)雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2
互為主備),正常情況下,M2,S1,S2 都參與 select 語(yǔ)句的負(fù)載均衡汗唱。- balance="2", 所有讀操作都隨機(jī)的在 writeHost傻唾、readhost 上分發(fā)湃崩。
- balance="3", 所有讀請(qǐng)求隨機(jī)的分發(fā)到 wiriterHost 對(duì)應(yīng)的 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力,注意 balance=3 只在 1.4 及其以后版本有,1.3 沒(méi)有未荒。
writeType 屬性
負(fù)載均衡類型,目前的取值有 3 種:
- writeType="0", 所有寫操作發(fā)送到配置的第一個(gè) writeHost,第一個(gè)掛了切到還生存的第二個(gè)writeHost,重新啟動(dòng)后已切換后的為準(zhǔn).
- writeType="1",所有寫操作都隨機(jī)的發(fā)送到配置的 writeHost,1.5 以后廢棄不推薦专挪。
5. 配置 log4j2.xml
<asyncRoot level="debug" includeLocation="true">
將默認(rèn)info 改為 debug
6. 啟動(dòng) Mycat
shell> /usr/local/mycat/bin/mycat start
支持一下參數(shù)
start | restart |stop | status
7. 在真實(shí)的 master 數(shù)據(jù)庫(kù)上給用戶授權(quán)
mysql> grant all on test.* to root@'%' identified by '123';
mysql> flush privileges;
或者
mysql> grant all on *.* to root@'192.168.78.%' identified by '123';
mysql> flush privileges;
三. 測(cè)試
在 mycat 的機(jī)器上測(cè)試用戶權(quán)限有效性
測(cè)試是否能正常登錄上 主服務(wù)器
shell> mysql -uroot -p'123' -h192.168.78.128
繼續(xù)測(cè)試是否能登錄上從服務(wù)器
shell> mysql -uroot -p'123' -h192.168.78.129
通過(guò)客戶端進(jìn)行測(cè)試是否能登錄到 mycat 上
192.168.78.130 是 mycat 的主機(jī)地址
shell > mysql -umycatdb -p123456 -P8066 -h192.168.78.130
mysql> show databases;
+----------+
| DATABASE |
+----------+
| wsl |
+----------+
1 row in set (0.01 sec)
此為mycat 看到的test數(shù)據(jù)庫(kù)中的表信息
mysql> use wsl;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| class |
| class2 |
| student |
+----------------+
3 rows in set (0.01 sec)
此為主數(shù)據(jù)庫(kù)(mysql-master)中的表信息
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| class |
| class2 |
| student |
+----------------+
3 rows in set (0.00 sec)
然后在mycat中創(chuàng)建一個(gè)表檢測(cè)在主從數(shù)據(jù)庫(kù)中是否都能成功查詢到
mysql> create table mycat( id int);
Query OK, 0 rows affected (0.14 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| class |
| class2 |
| mycat |
| student |
+----------------+
4 rows in set (0.01 sec)
此為mycat中創(chuàng)建
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| class |
| class2 |
| mycat |
| student |
+----------------+
4 rows in set (0.00 sec)
主數(shù)據(jù)庫(kù)中查詢到這個(gè)在mycat中創(chuàng)建表
從數(shù)據(jù)庫(kù)查詢一下也會(huì)存在 只有主從復(fù)制沒(méi)問(wèn)題