Linux下Mycat安裝配置和使用
mysql安裝
- 下載mysql【百度雲】
tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz
解壓- 把mysql資料夾移動到 /usr/local/ 下
mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql
建立mysql使用者和組
groupadd mysqladduser -r -g mysql mysqlchown -R mysql.mysql /usr/local/mysql //修改mysql目錄所屬mysql使用者
- 1
- 2
- 3
- 安裝
/usr/local/mysql/scripts/mysql_install_db
- 修改配置檔案my.cnf,必須要修改才能使用mycat
最後一行新增
lower_case_table_names = 1 設定mysql服務
cp -f /usr/local/mysql/support-files/mysql.server
- 1
- 啟動mysql
service mysqld start
把mysql命令加入環境變數
修改/etc/profile檔案,最後行新增export PATH=$PATH:/usr/local/mysql/bin
然後執行source /etc/profile
使配置立即生效登陸mysql如果提示錯誤
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
執行命令ln /var/lib/mysql/mysql.sock /tmp/mysql.sock
root使用者初始密碼為空,修改密碼使用mysqladmin命令
mysqladmin -uroot -p password
- 1
登陸客戶端
mysql -uroot -p
建立測試資料庫
CREATE database db1;CREATE database db2;CREATE database db3;
- 1
- 2
- 3
至此mysql已經安裝完成了
安裝java
mycat安裝
- 下載mycat【百度雲】
- 解壓
tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz
- 把mycat資料夾移動到 /usr/local/ 下
mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat
新建使用者和組
groupadd mycatadduser -r -g mycat mycatchown -R mycat.mycat /usr/local/mycat //修改mycat目錄所屬mycat使用者
- 1
- 2
- 3
修改配置檔案 /usr/local/mycat/conf/schema.xml
這裡配置mysql的地址、使用者名稱和密碼<writeHost host="hostM1" url="localhost:3306" user="root" password="root"> <readHost host="hostS1" url="localhost:3306" user="root" password="root" /></writeHost>
- 1
- 2
- 3
server.xml
這裡配置mycat的使用者名稱密碼<user name="root"> <property name="password">digdeep</property> <property name="schemas">TESTDB</property></user>
- 1
- 2
- 3
- 4
啟動mycat
/usr/local/mycat/bin/mycat start
連線mycat
mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB
注意這裡 -h 後面必須是ip,使用localhost會出錯建立測試資料
use TESTDB;create table company(id int not null primary key,name varchar(50),addr varchar(255));insert into company values(1,"facebook","usa");
- 1
- 2
- 3
- 結果:檢視mysql上的資料庫db1,db2,db3上都建立了表company
mysql主從伺服器配置
修改主mysql配置檔案my.cnf
[mysqld]log_bin = mysql-bin #記錄操作日誌binlog_ignore_db = mysql #不同步mysql系統資料庫server_id = 1
- 1
- 2
- 3
- 4
啟動主mysql,在主mysql建立一個使用者讓從mysql連線,執行sql
主mysql:node1
從mysql:node2grant replication slave on *.* to 'user'@'node2' identified by 'password'
- 1
修改從mysql配置檔案my.cnf
log_bin = mysql-bin #記錄操作日誌replicate_ignore_db = mysql #不同步mysql系統資料庫slave_skip_errors = all server_id = 2
- 1
- 2
- 3
- 4
主mysql執行sql
show master status;\G
從mysql連線主mysql
根據第2步配建立的user,password 和 第4步獲取的file,position 連線主mysqlchange master to master_host='node1',master_user='user',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=120;//如果是mysql5.6即以上可以不需要master_log_file和master_log_pos,mysql會自動識別change master to master_host='node1',master_user='user',master_password='password';
- 1
- 2
- 3
- 開啟從mysql,從mysql中執行
start slave;
檢視從mysql狀態,從mysql執行
show slave status\G;
紅色下劃線部分為yes則開啟成功測試成果
首先在主從mysql上都新建資料庫testdb
主mysql:use testdb;create table user(id int not null primary key,name varchar(50));
從mysql上也會產生user表,主從mysql配置成功!
mycat讀寫分離配置
注意事項
遠端 mysql 必須允許 mycat主機 遠端連線,修改mysql.user表中的使用者資料,執行sql
update mysql.user set host = '%' where user = 'root'
- 1
schema.xml配置
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <heartbeat>show slave status</heartbeat> <writeHost host="hostM1" url="node1:3306" user="root" password="root"> <readHost host="hostS1" url="node2:3306" user="root" password="root" /> </writeHost></dataHost>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
dbDriver 屬性
指定連線後端資料庫使用的 Driver,目前可選的值有 native 和 JDBC。使用 native 的話,因為這個值執行的是二進位制的 mysql 協議,所以可以使用 mysql 和 maridb。其他型別的資料庫則需要使用 JDBC 驅動來支援。
從 1.6 版本開始支援 postgresql 的 native 原始協議。
如果使用 JDBC 的話需要將符合 JDBC 4 標準的驅動 JAR 包放到 MYCAT\lib 目錄下,並檢查驅動 JAR 包中包括如下目錄結構的檔案:META-INF\services\java.sql.Driver。在這個檔案內寫上具體的 Driver 類名,例如:com.mysql.jdbc.Driver。balance 屬性
負載均衡型別,目前的取值有 3 種:- 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=3 只在 1.4 及其以後版本有,1.3 沒有。
writeType 屬性
負載均衡型別,目前的取值有 3 種:- writeType=”0”, 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個
writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties . - writeType=”1”,所有寫操作都隨機的傳送到配置的 writeHost,1.5 以後廢棄不推薦。
switchType 屬性
- -1 表示不自動切換
- 1 預設值,自動切換
- 2 基於 MySQL 主從同步的狀態決定是否切換
心跳語句為 show slave status
根據主從延時切換技術
Mycat1.4開始支援 MySQL主從複製狀態繫結的讀寫分離機制,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show slave status ,dataHost 上定義兩個新屬性: switchType=”2” 與slaveThreshold=”100”,此時意味著開啟MySQL主從複製狀態繫結的讀寫分離與切換機制,Mycat心跳機制通過檢測 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三個欄位來確定當前主從同步的狀態以及Seconds_Behind_Master 主從複製時延, 當Seconds_Behind_Master>slaveThreshold 時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊資料,而當主節點宕機後,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0,為0時則表示主從同步,可以安全切換,否則不會切換。重啟mycat,連線建立測試資料
use TESTDB;create table company(id int not null primary key,name varchar(50),addr varchar(255));insert into company values(1,"facebook","usa");
- 1
- 2
- 3
結果:檢視主從mysql上的db1,db2,db3上都建立了表company
如果你的mysql的複製模式為STATEMENT(可以在my.cnf中配置
binlog_format="STATEMENT"
),還可以這樣測試。
mycat執行sql :insert into company values(1,@@hostname,"usa");`select * from company ;
- 1
- 2
可以看出,讀取資料是從從mysql讀出的
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow