是一個開源的分佈式數據庫系統,一個實現了 MySQL 協議的的 Server。前端用戶能夠把它看做是一個數據庫代理,用 MySQL客戶端工具和命令行訪問,而其後端能夠用 MySQL 原生(Native)協議與多個 MySQL服務器通訊,也能夠用 JDBC 協議與大多數主流數據庫服務器通訊。其核心功能是 分表分庫,即將一個大表水平分割爲 N 個小表,存儲在後端 MySQL 服務器裏或者其餘數據庫裏。mysql
指經過某種特定的條件,將存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單臺設備負載的效果。linux
參考地址git
github 參考地址github
startup_nowrap.bat
暫略sql
在安裝目錄中conf
文件夾下存放。數據庫
server.xml
:是mycat服務器參數調整和用戶受權的配置文件。schema.xml
:管理着 MyCat 的邏輯庫(schema
)、表、分片規則、DataNode
以及 DataSource
。rule.xml
:是分片規則的配置文件。分片規則的具體參數信息單獨存放爲文件,也在這個目錄下,配置文件修改須要重啓mycat。mysql節點開啓主從複製的配置方案windows
主數據庫master修改後端
my.ini
(mysql配置文件)後,重啓mysql。(mysql安裝目錄中沒有,若是是windows系統則可能在C盤隱藏目錄ProgramData
下)[mysqld] log-bin=mysql-bin # 開啓二進制日誌 server-id=1 # 設置server-id # 默認記錄全部庫操做 # 不一樣步哪些數據庫 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema # 只同步哪些數據庫,除此以外,其餘不一樣步 binlog-do-db = game
CREATE USER '用戶名'@'從數據庫Ip' IDENTIFIED BY '密碼'; # 建立用戶 GRANT REPLICATION SLAVE ON *.* TO '用戶名'@'從數據庫IP'; # 分配權限 flush privileges; # 刷新權限
SHOW MASTER STATUS;
從數據庫slave修改緩存
my.ini
(mysql配置文件)後,重啓mysql。[mysqld] server-id=2 #設置server-id,必須惟一
CHANGE MASTER TO MASTER_HOST='主數據庫IP', MASTER_USER='用戶名', MASTER_PASSWORD='密碼', MASTER_LOG_FILE='mysql-bin.000003', -- 由上,查看master狀態獲得 MASTER_LOG_POS=73; -- 由上,查看master狀態獲得
start slave; # 開啓 stop slave; # 關閉
show slave status\G;
Slave_IO_Running
、Slave_SQL_Running
都爲YES
時表示主從同步設置成功。
注意事項
修改mycat配置文件schema.xml
,配置邏輯庫
dataHost
裏的writeNode
dataHost
裏的readNode
<mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 邏輯庫配置 --> <schema name="DB1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/> <!-- 節點配置 --> <dataNode name="dn1" dataHost="host01" database="testdb" /> <!-- 數據庫實例:讀寫分離的配置 --> <dataHost name="host01" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native"> <heartbeat>select user()</heartbeat> <!-- 主庫 master 配置,可多個--> <writeHost host="hostM1" url="192.168.20.113:3306" user="test" password="!QAZ2wsx"> <!-- 從庫 slave 配置,可多個 --> <readHost host="hostS1" url="192.168.20.107:3306" user="test" password="!QAZ2wsx" /> </writeHost> <!--主故障,頂替寫節點,主正常是分擔讀壓力--> <!-- <writeHost host="hostS2" url="" user="root" password="" > </writeHost> --> </dataHost> </mycat:schema>
修改mycat配置文件server.xml
,添加 mycat 用戶
<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">DB1</property> </user> <user name="user"> <property name="password">user</property> <property name="schemas">DB1</property> <property name="readOnly">true</property> </user>
使用徹底與mysql相同。(PS:注意mycat默認端口號是8066
)
鏈接時報錯 ERROR 1129 (00000): #HY000Host ‘192.168.31.242’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
緣由是同一個ip
在短期內產生太多中斷的數據庫鏈接而致使阻塞。在mysql終端執行 mysqladmin -u root -p flush-hosts
清除緩存後可進行鏈接。(致使緣由需自行查找解決)
報錯 ... connect error MySQLConnection ... Unknown charsetIndex:255
修改mycat字符集配置文件index_to_charset.properties
,添加255=utf8mb4
,重啓服務。
報錯 ... Access denied for user ...
檢查用戶權限;檢查 dataNode
上配置實體庫(database
值)是否存在;
sharding-jdbc
:朋友推薦的輕量級組件,需集成到程序中,待研究。