五、mycat水平分库
系列导航
一、实验环境
垂直分库
实验环境 服务内容 dataNode
192.168.0.1 mycat dn162
192.168.0.2 mysql dn163
192.168.0.3 mysql dn164
二、实验内容
1、192.168.0.2 、192.168.0.3上分别创建 ship_db_01和ship_db_02数据库,在ship_db上创建shipping_info表 注:建表脚本见:数据库环境及用户名密码见mycat实验数据 192.168.0.2 mysql> create database ship_db_01; 192.168.0.3 mysql> create database ship_db_02; 2、配置 schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="demo_db" checkSQLschema="false" sqlMaxLimit="100"> <table name="order_master" primaryKey="order_id" dataNode="dn163" /> <table name="customer_inf" primaryKey="customer_inf_id" dataNode="dn164" /> <!--这是水平分库的配置部分begin--> <table name="shipping_info" primaryKey="ship_id" dataNode="dn163_sp,dn164_sp" rule="mod-long" /> <!--这是水平分库的配置部分end--> </schema> <dataNode name="dn163" dataHost="mysql163" database="order_db" /> <dataNode name="dn164" dataHost="mysql164" database="customer_db" /> <!--这是水平分库的配置部分begin--> <dataNode name="dn163_sp" dataHost="mysql163" database="ship_db_01" /> <dataNode name="dn164_sp" dataHost="mysql164" database="ship_db_02" /> <!--这是水平分库的配置部分end--> <dataHost name="mysql163" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" > <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="192.168.0.2" url="192.168.0.2:3306" user="im_mycat" password="123456"> </writeHost> </dataHost> <dataHost name="mysql164" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" > <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="192.168.0.3" url="192.168.0.3:3306" user="im_mycat" password="123456"> </writeHost> </dataHost> </mycat:schema> 3、配置rule.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://io.mycat/"> <tableRule name="mod-long"> <rule> <columns>ship_id</columns> <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> </function> </mycat:rule> 4、启动mycat看是否正确 [mycat@zhu ~]$ mycat restart 192.168.0.1上使用root和mycat用户都可以 >mysql -h 192.168.0.1 -P 8066 -umycat_user -p123456 mysql> use demo_db Database changed mysql> show tables; +-------------------+ | Tables in demo_db | +-------------------+ | customer_inf | | order_master | | region_info | | shipping_info | +-------------------+ 4 rows in set (0.01 sec) 插入数据 在162上插入数据 insert into shipping_info(ship_id,ship_name )values(0,'第1公司'); insert into shipping_info(ship_id,ship_name )values(1,'第1公司'); insert into shipping_info(ship_id,ship_name )values(2,'第2公司'); insert into shipping_info(ship_id,ship_name )values(3,'第3公司'); insert into shipping_info(ship_id,ship_name )values(4,'第4公司'); insert into shipping_info(ship_id,ship_name )values(5,'第5公司'); insert into shipping_info(ship_id,ship_name )values(6,'第6公司'); insert into shipping_info(ship_id,ship_name )values(7,'第7公司'); insert into shipping_info(ship_id,ship_name )values(8,'第8公司'); insert into shipping_info(ship_id,ship_name )values(9,'第9公司'); commit; 192.168.0.2上查看刚插入的数据 mysql> select * from shipping_info; +---------+------------+ | ship_id | ship_name | +---------+------------+ | 0 | 第1公司 | | 2 | 第2公司 | | 4 | 第4公司 | | 6 | 第6公司 | | 8 | 第8公司 | +---------+------------+ 5 rows in set (0.00 sec) 192.168.0.3上查看刚插入的数据 mysql> select * from shipping_info; +---------+------------+ | ship_id | ship_name | +---------+------------+ | 1 | 第1公司 | | 3 | 第3公司 | | 5 | 第5公司 | | 7 | 第7公司 | | 9 | 第9公司 | +---------+------------+ 5 rows in set (0.00 sec) 分片成功