五、mycat水平分库

系列导航

一、Mycat实战---为什么要用mycat

二、Mycat安装

三、mycat实验数据

四、mycat垂直分库

五、mycat水平分库

六、mycat全局自增

七、mycat-ER分片

一、实验环境

垂直分库
实验环境      服务内容    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)
分片成功

 
 
资源丰富的的网盘资源:网盘资源大全! 推荐一个适合零基础学习SQL的网站:不用安装数据库,在线轻松学习SQL!
posted @ 2021-08-16 19:31  万笑佛  阅读(297)  评论(0编辑  收藏  举报