配置好JRE,安裝好MYCAT
在mysql主庫創建表,會同步到從庫
CREATE TABLE `user` ( `id` int(11) NOT NULL, `user` varchar(255) NOT NULL COMMENT '名稱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mycat schema.xml
balance="3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
switchType='-1'意味着當主掛掉的時候,不進行自動切換,即hostS1和hostS2並不會被提升為主,仍只提供讀的功能。
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="slavetest" checkSQLschema="false" sqlMaxLimit="10000"> <!-- 測試表 --> <table name="user" primaryKey="id" dataNode="dn1" /> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> --> <dataNode name="dn1" dataHost="localhost1" database="slavetest" /> <dataHost name="localhost1" maxCon="1000" minCon="1000" balance="3" 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.1.9:3306" user="root" password="masterpwd"> <!-- can have multi read hosts --> <readHost host="hostS2" url="192.168.1.9:3307" user="slave" password="slavepwd" /> </writeHost> </dataHost> </mycat:schema>
mycat server.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://io.mycat/"> <system> <property name="useSqlStat">0</property> <!-- 1為開啟實時統計、0為關閉 --> <property name="useGlobleTableCheck">0</property> <!-- 1為開啟全加班一致性檢測、0為關閉 --> <property name="sequnceHandlerType">2</property> <property name="processorBufferPoolType">0</property> <property name="handleDistributedTransactions">0</property> <!-- off heap for merge/order/group/limit 1開啟 0關閉 --> <property name="useOffHeapForMerge">1</property> <!-- 單位為m --> <property name="memoryPageSize">1m</property> <!-- 單位為k --> <property name="spillsFileBufferSize">1k</property> <property name="useStreamOutput">0</property> <!-- 單位為m --> <property name="systemReserveMemorySize">384m</property> <!--是否采用zookeeper協調切換 --> <property name="useZKSwitch">true</property> </system> <user name="root"> <property name="password">123456</property> <property name="schemas">slavetest</property> </user> </mycat:server>
修改mycat log4j.xml 方便查看讀寫分離是否生效
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d [%-5p][%t] %m %throwable{full} (%C:%F:%L) %n"/> </Console> <RollingFile name="RollingFile" fileName="${sys:MYCAT_HOME}/logs/mycat.log" filePattern="${sys:MYCAT_HOME}/logs/$${date:yyyy-MM}/mycat-%d{MM-dd}-%i.log.gz"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy/> <SizeBasedTriggeringPolicy size="250 MB"/> <TimeBasedTriggeringPolicy/> </Policies> </RollingFile> </Appenders> <Loggers> <asyncRoot level="debug" includeLocation="true"> <AppenderRef ref="FILE" /> <AppenderRef ref="RollingFile"/> </asyncRoot> </Loggers> </Configuration>
重啟mycat 登錄mycat
root@0b763a8d1ddd:/# mysql -uroot -p123456 -h192.168.1.9 -P8066
插入測試數據
mysql> insert into user values(1,"laizhenwei"); Query OK, 1 row affected (0.01 sec) mysql> select * from user limit 1; +----+------------+ | id | user | +----+------------+ | 1 | laizhenwei | +----+------------+ 1 row in set (0.00 sec)
查看mycat日志