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;