1. 程式人生 > 其它 >六、mycat全域性自增

六、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資料庫上建立goobal_master表
注:建表指令碼見:資料庫環境及使用者名稱密碼見mycat實驗資料.sql
   
   
2、162上進入本地的mysql(而不是mycat)建立名為mycat的database   
  >mysql -h 192.168.0.1 -P 3306 -uroot -p123456 
   mysql> create database mycat;
   
3、執行指令碼檔案dbseq.sql
   cd /usr/local/mycat/conf 
   
    vi dbseq.sql 
	開頭部位增加: use mycat;
	
   [mycat@zhu conf]$ mysql -h 192.168.0.1 -P 3306 -uroot -p <dbseq.sql  
    Enter password: 

4、檢視許可權
   mysql -h 192.168.0.1 -P 3306 -uroot -p
   mysql> use mysql;
Database changed
mysql> select user,host from user;
+---------------+-------------+
| user          | host        |
+---------------+-------------+
| root          | %           |	

mysql> show grants for root@'%';
+-------------------------------------------------------------+
| Grants for root@%                                           |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+

注:這裡如果不是root使用者需要增加執行儲存過程的許可權
例如:grant execute on *.* to 'root'@'%';
 
5、配置 service.xml.xml 
    將之前<property name="sequnceHandlerType">2</property>
	改為:
    <property name="sequnceHandlerType">1</property>


6、配置 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"  />
			  <table name="shipping_info" primaryKey="ship_id" dataNode="dn163_sp,dn164_sp"  rule="mod-long" />   
			  
			  <!--這是水全域性自增表-->
			  <table name="goobal_master" primaryKey="goobal_id" dataNode="dn163_sp,dn164_sp"  rule="rule1"  autoIncrement="true"/>   
         </schema>
 
        <dataNode name="dn163" dataHost="mysql163" database="order_db" />
        <dataNode name="dn164" dataHost="mysql164" database="customer_db" />
		
		
		<dataNode name="dn163_sp" dataHost="mysql163" database="ship_db_01" />
		<dataNode name="dn164_sp" dataHost="mysql164" database="ship_db_02" />
		
		<dataNode name="dn162" dataHost="mysql162" database="mycat" />
        

		<!--這是水全域性自增資料庫begin-->
		<dataHost name="mysql162" maxCon="1000" minCon="10" balance="3"   writeType="0" dbType="mysql" dbDriver="native" switchType="1" >
                <heartbeat>select user()</heartbeat>
                <writeHost host="192.168.0.1" url="192.168.0.1:3306" user="root"   password="123456">
                </writeHost>
        </dataHost>
		<!--這是水全域性自增資料庫end-->
		
        <dataHost name="mysql163" maxCon="1000" minCon="10" balance="0"   writeType="0" dbType="mysql" dbDriver="native" switchType="1" >
                <heartbeat>select user()</heartbeat>
                <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>


7、配置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>
		
		<tableRule name="rule1">
                <rule>
                        <columns>goobal_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>

7、修改配置檔案
 vi /usr/local/mycat/conf/sequence_db_conf.properties
 #sequence stored in datanode
 GLOBAL=dn162
 GOOBAL_MASTER=dn162
 注:mycat就是在192.168.0.1上建立的資料庫,GOOBAL_MASTER是需要用全域性自增逐漸的表(表名一定要大寫)
 
8、192.168.0.1的mycat庫裡新增 GOOBAL_MASTER表自增的資訊
   mysql> use mycat
Database changed
mysql> show tables;
+-----------------+
| Tables_in_mycat |
+-----------------+
| MYCAT_SEQUENCE  |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from MYCAT_SEQUENCE;
+--------+---------------+-----------+
| name   | current_value | increment |
+--------+---------------+-----------+
| GLOBAL |             1 |         1 |
+--------+---------------+-----------+
1 row in set (0.00 sec)

mysql> insert into MYCAT_SEQUENCE values('GOOBAL_MASTER',1,1);
Query OK, 1 row affected (0.01 sec)

mysql>    commit;
Query OK, 0 rows affected (0.00 sec)

9、重啟mycat 進入mycat插入資料測試
   mycat@zhu ~]$ mycat restart
   
   >mysql -h 192.168.0.1 -P 8066 -umycat_user -p123456 
   mysql> show databases;
+----------+
| DATABASE |
+----------+
| demo_db  |
+----------+
1 row in set (0.01 sec)

mysql> use demo_db
Database changed
mysql> show tables;
+-------------------+
| Tables in demo_db |
+-------------------+
| customer_inf      |
| goobal_master     |
| order_master      |
| region_info       |
| shipping_info     |
+-------------------+
5 rows in set (0.00 sec)
   
   
insert into goobal_master(order_status )values(0);
insert into goobal_master(order_status )values(1);
insert into goobal_master(order_status )values(2);
insert into goobal_master(order_status )values(3);
insert into goobal_master(order_status )values(4);
insert into goobal_master(order_status )values(5);
insert into goobal_master(order_status )values(6);
insert into goobal_master(order_status )values(7);
insert into goobal_master(order_status )values(8);
insert into goobal_master(order_status )values(9);

   
10、 登入192.168.0.1上的mycat 以及192.168.0.2,192.168.0.3上的mysql檢視自增id是否符合預期
192.168.0.1:
   [root@zhu logs]# mysql -h 192.168.0.1 -P 8066 -umycat_user -p123456 
   mysql> use demo_db
   mysql> select * from goobal_master order by goobal_id asc;
+-----------+--------------+
| goobal_id | order_status |
+-----------+--------------+
|         5 |            0 |
|         6 |            1 |
|         7 |            2 |
|         8 |            3 |
|         9 |            4 |
|        10 |            5 |
|        11 |            6 |
|        12 |            7 |
|        13 |            8 |
|        14 |            9 |
+-----------+--------------+
10 rows in set (0.03 sec)

192.168.0.2:
mysql> select * from goobal_master order by goobal_id asc;
+-----------+--------------+
| goobal_id | order_status |
+-----------+--------------+
|         6 |            1 |
|         8 |            3 |
|        10 |            5 |
|        12 |            7 |
|        14 |            9 |
+-----------+--------------+
5 rows in set (0.00 sec)

192.168.0.3:
mysql> select * from goobal_master order by goobal_id asc;
+-----------+--------------+
| goobal_id | order_status |
+-----------+--------------+
|         5 |            0 |
|         7 |            2 |
|         9 |            4 |
|        11 |            6 |
|        13 |            8 |
+-----------+--------------+
5 rows in set (0.00 sec)