Mycat及MySQL執行個體部署情況:
Mycat(版本:5.6.29):
IP:192.168.227.6,Port:3310/3311
MySQL(版本:5.6.29) :注意MySQL版本最好5,6以上,剛開始yum安裝預設版本5.1.73版本總報錯
userHost1,IP:192.168.227.3,Port:3306
userHost2,IP:192.168.227.4,Port:3306
userHost3,IP:192.168.227.5,Port:3306
架構圖:

1,MySQL主從複制配置
主IP:192.168.227.3
從IP:192.168.227.5
首先:修改mysql的配置檔案,使其支援二進制日志功能。
打開主伺服器的mysql配置檔案:my.conf
vim /etc/my.cnf 加上:
server-id = 3 //為伺服器設定一個獨一無二的id便于區分,這裡使用ip位址的最後一位充當server-id
log-bin=mysql-bin //将mysql二進制日志取名為mysql-bin
binlog_format=mixed //二進制日志的格式,有三種:statement/row/mixed,具體分别不多做解釋,這裡使用mixed
replicate-do-db = db_store //需要複制的資料庫名,如果複制多個資料庫,重複設定這個選項即可
replicate-ignore-db = mysql //不需要複制的資料庫名,如果複制多個資料庫,重複設定這個選項即可
replicate-ignore-db = information_schema
儲存重新開機資料庫
同樣進入從資料庫修改
server-id = 5
log-bin=mysql-bin
binlog_format=mixed
replicate-do-db = db_store
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
截圖:
其次:在主伺服器上為從伺服器配置設定一個賬号,就像一把鑰匙,從伺服器拿着這個鑰匙,才能到主伺服器上來共享主伺服器的日志檔案。
進入主伺服器的mysql界面,
指令: # mysql -u root -p password //我這裡mysql賬号是root,密碼是password
在mysql操作界面下,輸入下面一行指令:
GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY 'password';
檢視主伺服器BIN日志的資訊(執行完之後記錄下這兩值,然後在配置完從伺服器之前不要對主伺服器進行任何操作,因為每次操作資料庫時這兩值會發生改變).
再次:設定從伺服器
進入從伺服器
關閉slave(如果你以前配置過主從的話,一定要先關閉)
指令:stop slave;
開始配置:
輸入下面代碼即可:
CHANGE MASTER TO
MASTER_HOST="192.168.227.3",
MASTER_USER="root",
MASTER_PASSWORD="password",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=311;
注意:MASTER_LOG_FILE和MASTER_LOG_POS值看主伺服器日志資訊
從伺服器配置完成,啟動從伺服器:
指令: start slave;
2,配置Mycat
server.xml:
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">1</property>
<property name="useGlobleTableCheck">0</property>
<property name="defaultSqlParser">druidparser</property>
<property name="sequnceHandlerType">2</property>
<property name="processorBufferPoolType">0</property>
<property name="serverPort">3310</property> <!-- mycat的使用端口 -->
<property name="managerPort">3311</property> <!-- mycat的管理端口 -->
<property name="handleDistributedTransactions">0</property>
<property name="useOffHeapForMerge">1</property>
<property name="memoryPageSize">1m</property>
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<property name="systemReserveMemorySize">389m</property>
</system>
<user name="root"><!--登陸mycat使用者名-->
<property name="password">123456</property><!--登陸mycat密碼-->
<!--資料庫名,這裡會和schema.xml中的配置關聯,多個用逗号分開,例如需要這個使用者需要管理兩個資料庫db1,db2,則配置db1,dbs-->
<property name="schemas">db_store,db_user</property>
<property name="readOnly">false</property>
</user>
</mycat:server>
schema.xml:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 資料庫配置,與server.xml中的資料庫對應 -->
<schema name="db_user" checkSQLschema="false" sqlMaxLimit="100">
<table name="data_dictionary" type="global" dataNode="db_user_dataNode1,db_user_dataNode2" primaryKey="dataDictionaryID"/>
<table name="users" dataNode="db_user_dataNode$1-2" rule="mod-userID-long" primaryKey="userID"> <!-- 對2取模,詳見rule.xml -->
<childTable name="user_address" joinKey="userID" parentKey="userID" primaryKey="addressID"/>
</table>
</schema>
<schema name="db_store" checkSQLschema="false" sqlMaxLimit="100">
<table name="store" dataNode="db_store_dataNode" primaryKey="storeID"/>
<table name="employee" dataNode="db_store_dataNode" primaryKey="employeeID"/>
</schema>
<!-- 分片配置 -->
<!-- db_user -->
<dataNode name="db_user_dataNode1" dataHost="db_userHOST1" database="db_user" />
<dataNode name="db_user_dataNode2" dataHost="db_userHOST2" database="db_user" />
<!-- 節點配置 -->
<!-- db_store -->
<dataNode name="db_store_dataNode" dataHost="db_storeHOST" database="db_store" />
<!-- 配置db_user的節點主機 -->
<dataHost name="db_userHOST1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="userHost1" url="192.168.227.3:3306" user="root" password="password">
</writeHost>
</dataHost>
<dataHost name="db_userHOST2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="userHost2" url="192.168.227.4:3306" user="root" password="password">
</writeHost>
</dataHost>
<!-- 配置db_store的節點主機 -->
<dataHost name="db_storeHOST" 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="hostM1" url="192.168.227.3:3306" user="root" password="password">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.227.5:3306" user="root" password="password" />
</writeHost>
</dataHost>
</mycat:schema>
修改rule.xml中下列配置項:
<tableRule name="mod-long">
<rule>
<columns>id</columns> <!-- t1的分片列 -->
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">2</property> <!-- count值與分片個數相同 -->
</function>
db_store建表語句:
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`employeeID` int(11) NOT NULL,
`userName` varchar(16) COLLATE utf8_bin DEFAULT NULL,
`phoneNum` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`createTime` datetime DEFAULT NULL,
`lastUpdate` datetime DEFAULT NULL,
PRIMARY KEY (`employeeID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ----------------------------
-- Table structure for store
-- ----------------------------
DROP TABLE IF EXISTS `store`;
CREATE TABLE `store` (
`storeID` int(11) NOT NULL,
`storeName` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`storeAddress` varchar(256) COLLATE utf8_bin DEFAULT NULL,
`createTime` datetime DEFAULT NULL,
`lastUpdate` datetime DEFAULT NULL,
PRIMARY KEY (`storeID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;