mycat高可用 ER分片的2種場景詳細分析
阿新 • • 發佈:2019-01-30
1,ER分片關係簡介
有一類業務,例如訂單(ORDER)跟訂單明細表(ORDER_DETAIL),明細表會依賴二訂單,就是該會存在表的主從關係,這類似業務的切分可以抽象出合適的切分規則,比如根據使用者ID切分,其它相關的表都依賴於使用者ID,再或者根據訂單ID進行切分,總之部分業務總會可以抽象出父子關係的表。這類表適用於ER分片表,子表的記錄與所關聯的父表記錄存放在同一個資料分片上,避免資料Join跨庫操作,以order與order_detail例子為例,schema.xml中定義合適的分片配置,order,order_detail 根據order_id迕行資料切分,保證相同order_id的資料分到同一個分片上,在進行資料插入操作時,Mycat會獲取order所在的分片,然後將order_detail也插入到order所在的分片。
2, 父表按照主鍵ID分片,字表的分片欄位與主表ID關聯,配置為ER分片
2.1 在schema.xml新增如下配置配置檔案修改
<table name="ORDER1" dataNode="dn21,dn22" rule="mod-long"> <childTable name="ORDER_DETAIL" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>
在rule.xml裡面設定分片規則
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
然後重啟mycat或者重新載入mycat
2.2 先建表, ORDER 和 ORDER_DETAIL 表,有主外來鍵關係
CREATE TABLE ORDER1(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,SN VARCHAR(64),CREATE_TIME DATETIME);
CREATE TABLE ORDER_DETAIL(ID INT AUTO_INCREMENT PRIMARY KEY, ORDER_ID INT,ORD_STATUS CHAR(1),ADDRESS VARCHAR(128),CREATE_TIME DATETIME,CONSTRAINT FK_ORDID11 FOREIGN KEY (ORDER_ID) REFERENCES ORDER1 (ID));
mysql> CREATE TABLE ORDER1(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,SN VARCHAR(64),CREATE_TIME DATETIME);
Query OK, 0 rows affected (0.06 sec)
mysql>
mysql> CREATE TABLE ORDER_DETAIL(ID INT AUTO_INCREMENT PRIMARY KEY, ORDER_ID INT,ORD_STATUS CHAR(1),ADDRESS VARCHAR(128),CREATE_TIME DATETIME,CONSTRAINT FK_ORDID FOREIGN KEY (ORDER_ID) REFERENCES ORDER1 (ID));
Query OK, 0 rows affected (0.02 sec)
mysql>
3.3 錄入資料:
mysql>
mysql> explain INSERT INTO ORDER1(SN,CREATE_TIME) VALUES('BJ0001',NOW());
ERROR 1064 (HY000): bad insert sql (sharding column:ID not provided,INSERT INTO ORDER1 (SN, CREATE_TIME)
VALUES ('BJ0001', NOW())
mysql> explain INSERT INTO ORDER1(SN,CREATE_TIME) VALUES('BJ0001',NOW());
ERROR 1064 (HY000): bad insert sql (sharding column:ID not provided,INSERT INTO ORDER1 (SN, CREATE_TIME)
VALUES ('BJ0001', NOW())
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(1,'BJ0001',NOW());
Query OK, 1 row affected (0.03 sec)
mysql>
錄入資料,一組組錄入,涉及到外來鍵關係:
第一組北京的訂單
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(1,'BJ0001',NOW());
Query OK, 1 row affected (0.03 sec)
mysql>
mysql> INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (1,1,'1','test data of ORDER1(ID=1,BJ001) ',NOW());
Query OK, 1 row affected (0.00 sec)
mysql>
第二組上海的訂單:
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (3,3,'1','test data of ORDER1(ID=3,SHH001) ',NOW());
mysql>
第三組廣州的訂單:
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(4,'GZH004',NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (4,4,'1','test data of ORDER1(ID=4,GZH004) ',NOW());
mysql>
第四組 武漢的訂單,這裡故意將order_id設定成4,看看效果,是否隨id為4的廣州的那組分片:
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(5,'WUHAN005',NOW());
ERROR 1064 (HY000): Index: 2, Size: 2
mysql> INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(6,'WUHAN006',NOW());
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (6,4,'1','test data of ORDER1(ID=6,WUHAN005) ',NOW());
2.4 驗證子表是否隨父表分片,果然驗證如下,大家看到訂單詳細表ORDER_DETAIL的資料的分片都是隨ORDER_ID所在外來鍵的父表的分片:
[[email protected]_1_11logs]# /usr/local/mysql56s1/bin/mysql -uroot -p -P3317 --socket=/usr/local/mysql56s1/mysql.sock -e "select @@port;select * from db3.ORDER1; select * from db3.ORDER_DETAIL";
Enter password:
+--------+
| @@port |
+--------+
| 3327 |
+--------+
+----+--------+---------------------+
| ID | SN | CREATE_TIME |
+----+--------+---------------------+
| 1 | BJ0001 | 2016-02-11 22:54:26 |
| 4 | GZH004 | 2016-02-11 22:57:49 |
+----+--------+---------------------+
+----+----------+------------+--------------------------------------+---------------------+
| ID | ORDER_ID | ORD_STATUS | ADDRESS | CREATE_TIME |
+----+----------+------------+--------------------------------------+---------------------+
| 1 | 1 | 1 | test data of ORDER1(ID=1,BJ001) | 2016-02-11 23:07:05 |
| 4 | 4 | 1 | test data of ORDER1(ID=4,GZH004) | 2016-02-11 23:09:48 |
| 6 | 4 | 1 | test data of ORDER1(ID=6,WUHAN005) | 2016-02-11 23:10:18 |
+----+----------+------------+--------------------------------------+---------------------+
[[email protected]_1_11logs]#
[[email protected]_1_11logs]#
[[email protected]_1_11logs]# /usr/local/mysql56s1/bin/mysql -uroot -p -P3327 --socket=/usr/local/mysql56m1/mysql.sock -e "select @@port;select * from db3.ORDER1; select * from db3.ORDER_DETAIL";
Enter password:
+--------+
| @@port |
+--------+
| 3317 |
+--------+
+----+----------+---------------------+
| ID | SN | CREATE_TIME |
+----+----------+---------------------+
| 3 | SHH001 | 2016-02-11 22:57:26 |
| 6 | WUHAN006 | 2016-02-11 23:04:39 |
+----+----------+---------------------+
+----+----------+------------+------------------------------------+---------------------+
| ID | ORDER_ID | ORD_STATUS | ADDRESS | CREATE_TIME |
+----+----------+------------+------------------------------------+---------------------+
| 3 | 3 | 1 | test data of ORDER1(ID=3,SHH001) | 2016-02-11 23:09:02 |
+----+----------+------------+------------------------------------+---------------------+
[[email protected]_1_11logs]#
2.5 有日誌為列,看到SHH001這個訂單的資料錄入都在埠為3317的分片mysql例項上,如下驗證:
[[email protected]_1_11logs]# more mycat.log|grep SHH001
02/11 22:56:58.477 DEBUG [$_NIOREACTOR-3-RW] (ServerQueryHandler.java:56) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(2,'SHH001',NOW())
02/11 22:56:58.478 WARN [$_NIOREACTOR-3-RW] (ServerConnection.java:209) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(2,'SHH001',NOW()) err:java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
02/11 22:57:22.476 DEBUG [$_NIOREACTOR-3-RW] (ServerQueryHandler.java:56) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(2,'SHH001',NOW())
02/11 22:57:22.477 WARN [$_NIOREACTOR-3-RW] (ServerConnection.java:209) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(2,'SHH001',NOW()) err:java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
02/11 22:57:26.988 DEBUG [$_NIOREACTOR-3-RW] (ServerQueryHandler.java:56) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW())
02/11 22:57:26.989 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW()), route={
1 -> dn21{INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW())}
02/11 22:57:26.999 DEBUG [$_NIOREACTOR-0-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=4, lastTime=1455202646984, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=91, charset=latin1, txIsolation=3, autocommit=true, attachment=dn21{INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW())}, respHandler=SingleNodeHandler [node=dn21{INSERT INTO ORDER1(ID,SN,CREATE_TIME) VALUES(3,'SHH001',NOW())}, packetId=0], host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]
02/11 23:09:02.690 DEBUG [$_NIOREACTOR-3-RW] (ServerQueryHandler.java:56) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (3,3,'1','test data of ORDER1(ID=3,SHH001) ',NOW())
VALUES (3, 3, '1', 'test data of ORDER1(ID=3,SHH001) ', NOW())
02/11 23:09:02.692 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]INSERT INTO ORDER_DETAIL(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (3,3,'1','test data of ORDER1(ID=3,SHH001) ',NOW()), route={
VALUES (3, 3, '1', 'test data of ORDER1(ID=3,SHH001) ', NOW())}
VALUES (3, 3, '1', 'test data of ORDER1(ID=3,SHH001) ', NOW())}, respHandler=SingleNodeHandler [node=dn21{INSERT INTO ORDER_DETAIL (ID, ORDER_ID, ORD_STATUS, ADDRESS, CREATE_TIME)
VALUES (3, 3, '1', 'test data of ORDER1(ID=3,SHH001) ', NOW())}, packetId=0], host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]
[[email protected]_1_11logs]#
【】看到直接22:57:26.988時間點處有資料錄入,22:57:26.989處有路由分配 route={dn21了,直接走父表的路由了**
2.6 查詢路由
mycat命令列裡面執行:
mysql> explain select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID;
+-----------+-----------------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+-----------------------------------------------------------------------------------------------------------+
| dn21 | select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID |
| dn22 | select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID |
+-----------+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID;
+----+--------+---------------------+----+----------+------------+-----------------------------------+---------------------+
| ID | SN | CREATE_TIME | ID | ORDER_ID | ORD_STATUS | ADDRESS | CREATE_TIME |
+----+--------+---------------------+----+----------+------------+-----------------------------------+---------------------+
| 1 | BJ0001 | 2016-02-12 17:51:24 | 1 | 1 | 1 | test data of ORDER1(ID=1,BJ001) | 2016-02-12 17:51:30 |
+----+--------+---------------------+----+----------+------------+-----------------------------------+---------------------+
1 row in set (0.01 sec)
mysql>
【】mycat.log後臺日誌debug資訊,看到走的route路由是dn21和dn22,所有的節點路由都走了:
02/12 18:22:51.444 DEBUG [$_NIOREACTOR-2-RW] (ServerQueryHandler.java:56) -ServerConnection [id=3, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]explain select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID
02/12 18:22:51.444 DEBUG [$_NIOREACTOR-2-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDB select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID
02/12 18:22:51.448 DEBUG [$_NIOREACTOR-2-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDB select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID value:select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID, route={
1 -> dn21{select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID}
2 -> dn22{select t1.*,t2.* from ORDER1 t1,ORDER_DETAIL t2 where t2.ORD_STATUS='1' and t2.ID=1 and t1.ID=t2.ORDER_ID}
}
02/12 18:23:01.214 DEBUG [Timer0] (ConnectionHeartBeatHandler.java:52) -do heartbeat for con MySQLConnection [id=18, lastTime=1455272581207, user=root, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=false, threadId=18, charset=latin1, txIsolation=0, autocommit=true, attachment=null, respHandler=null, host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
02/12 18:23:01.215 DEBUG [Timer0] (ConnectionHeartBeatHandler.java:52) -do heartbeat for con MySQLConnection [id=22, lastTime=1455272581207, user=root, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=false, threadId=21, charset=latin1, txIsolation=0, autocommit=true, attachment=null, respHandler=null, host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
圖片1.jpg
2.7 總結:當子表與父表的關聯欄位正好是父表的分片欄位時,子表直接根據父表規則進行分片,在資料錄入的時候子表直接放在父表的分片上面,在進行關聯查詢join的時候,走的是
3 .父表的分片欄位為其他欄位,以PROVINCE欄位分片,字表的分片欄位與主表ID關聯,配置為ER分片
3.1 各種配置
在schema.xml裡面新增表配置
<table name="ORDER2" primaryKey="ID" dataNode="dn21,dn22" rule="province-str"> <childTable name="ORDER_DETAIL2" primaryKey="ID" joinKey="ORDER_ID" parentKey="ID" /> </table>
在rule.xml裡面設定分片規則
<tableRule name="province-str">
<rule>
<columns>PROVINCE</columns>
<algorithm>province-str-split</algorithm>
</rule>
</tableRule> </tableRule>
<function name="province-str-split" class="org.opencloudb.route.function.PartitionByFileMap">
<property name="type">1</property>
<property name="mapFile">partition-hash-str-pro.txt</property>
<property name="defaultNode">0</property>
</function>
新新增partition-hash-str-pro.txt
[root@test_1_11conf]# more partition-hash-str-pro.txt
beijing=0
shanghai=1
tianjing=2
[root@test_1_11conf]#
然後重啟mycat或者重新載入mycat
3.2 建表
CREATE TABLE ORDER2(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,PROVINCE VARCHAR(16),SN VARCHAR(64),CREATE_TIME DATETIME);
CREATE TABLE ORDER_DETAIL2(ID INT AUTO_INCREMENT PRIMARY KEY, ORDER_ID INT,ORD_STATUS CHAR(1),ADDRESS VARCHAR(128),CREATE_TIME DATETIME,CONSTRAINT FK_ORDID21 FOREIGN KEY (ORDER_ID) REFERENCES ORDER2 (ID));
mysql> CREATE TABLE ORDER2(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,SN VARCHAR(64),CREATE_TIME DATETIME);
Query OK, 0 rows affected (0.05 sec)
mysql> CREATE TABLE ORDER_DETAIL2(ID INT AUTO_INCREMENT PRIMARY KEY, ORDER_ID INT,ORD_STATUS CHAR(1),ADDRESS VARCHAR(128),CREATE_TIME DATETIME,CONSTRAINT FK_ORDID21 FOREIGN KEY (ORDER_ID) REFERENCES ORDER2 (ID));
Query OK, 0 rows affected (0.02 sec)
mysql>
3.2 錄入資料,一組組錄入,涉及到外來鍵關係:
INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(1,'beijing','2BJ0001',NOW());
INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (1,1,'1','test data of ORDER1(ID=1,2BJ0001) ',NOW());
mysql> INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(1,'beijing','2BJ0001',NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (1,1,'1','test data of ORDER1(ID=1,2BJ0001) ',NOW());
Query OK, 1 row affected (0.21 sec)
mysql>
INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(3,'shanghai','2SHH001',NOW());
INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (3,3,'1','test data of ORDER1(ID=3,2SHH001) ',NOW());
mysql> INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(3,'shanghai','2SHH001',NOW());
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (3,3,'1','test data of ORDER1(ID=3,2SHH001) ',NOW());
Query OK, 1 row affected (0.41 sec)
mysql>
INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(4,'beijing','2GZH004',NOW());
INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (4,4,'1','test data of ORDER1(ID=4,2GZH004) ',NOW());
mysql> INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(4,'beijing','2GZH004',NOW());
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (4,4,'1','test data of ORDER1(ID=4,2GZH004) ',NOW());
Query OK, 1 row affected (0.21 sec)
mysql>
INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(6,'shanghai','2WUHAN006',NOW());
INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (6,4,'1','test data of ORDER1(ID=6,2WUHAN006) ',NOW());
mysql> INSERT INTO ORDER2(ID,PROVINCE,SN,CREATE_TIME) VALUES(6,'shanghai','2WUHAN006',NOW());
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (6,4,'1','test data of ORDER1(ID=6,2WUHAN006) ',NOW());
Query OK, 1 row affected (0.22 sec)
mysql>
mysql> INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (6,9,'1','test data of ORDER1(ID=6,2WUHAN006) ',NOW());
ERROR 1064 (HY000): can't find (root) parent sharding node for sql:INSERT INTO ORDER_DETAIL2(ID,ORDER_ID,ORD_STATUS,ADDRESS,CREATE_TIME) VALUES (6,9,'1','test data of ORDER1(ID=6,2WUHAN006) ',NOW())
mysql>
3.3 資料驗證
[[email protected]_1_11~]# /usr/local/mysql56s1/bin/mysql -uroot -p --socket=/usr/local/mysql56s1/mysql.sock -e "select @@port;select * from db3.ORDER2; select * from db3.ORDER_DETAIL2";
Enter password:
+--------+
| @@port |
+--------+
| 3327 |
+--------+
+----+----------+-----------+---------------------+
| ID | PROVINCE | SN | CREATE_TIME |
+----+----------+-----------+---------------------+
| 3 | shanghai | 2SHH001 | 2016-02-12 17:24:00 |
| 6 | shanghai | 2WUHAN006 | 2016-02-12 17:24:14 |
+----+----------+-----------+---------------------+
+----+----------+------------+-------------------------------------+---------------------+
| ID | ORDER_ID | ORD_STATUS | ADDRESS | CREATE_TIME |
+----+----------+------------+-------------------------------------+---------------------+
| 3 | 3 | 1 | test data of ORDER1(ID=3,2SHH001) | 2016-02-12 17:24:04 |
+----+----------+------------+-------------------------------------+---------------------+
[[email protected]_1_11~]#
[[email protected]_1_11~]# /usr/local/mysql56s1/bin/mysql -uroot -p --socket=/usr/local/mysql56m1/mysql.sock -e "select @@port;select * from db3.ORDER2; select * from db3.ORDER_DETAIL2";
Enter password:
+--------+
| @@port |
+--------+
| 3317 |
+--------+
+----+----------+---------+---------------------+
| ID | PROVINCE | SN | CREATE_TIME |
+----+----------+---------+---------------------+
| 1 | beijing | 2BJ0001 | 2016-02-12 17:23:46 |
| 4 | beijing | 2GZH004 | 2016-02-12 17:24:07 |
+----+----------+---------+---------------------+
+----+----------+------------+---------------------------------------+---------------------+
| ID | ORDER_ID | ORD_STATUS | ADDRESS | CREATE_TIME |
+----+----------+------------+---------------------------------------+---------------------+
| 1 | 1 | 1 | test data of ORDER1(ID=1,2BJ0001) | 2016-02-12 17:23:50 |
| 4 | 4 | 1 | test data of ORDER1(ID=4,2GZH004) | 2016-02-12 17:24:11 |
| 6 | 4 | 1 | test data of ORDER1(ID=6,2WUHAN006) | 2016-02-12 17:24:17 |
+----+----------+------------+---------------------------------------+---------------------+
[[email protected]_1_11~]#
3.4 mycat.log中debug日誌顯示,通過關鍵字2BJ0001來檢索父子資料記錄的錄入情況
vim mycat.log
02/12 17:23:50.530 DEBUG [$_NIOREACTOR-2-RW] (RouterUtil.java:1188) -find root parent's node sql select order2.id from order2 where order2.id=1
02/12 17:23:50.531 DEBUG [BusinessExecutor3] (EnchachePool.java:76) -ER_SQL2PARENTID miss cache ,key:TESTDB:select order2.id from order2 where order2.id=1
02/12 17:23:50.531 DEBUG [BusinessExecutor3] (FetchStoreNodeOfChildTableHandler.java:73) -find child node with sql:select order2.id from order2 where order2.id=1
02/12 17:23:50.531 DEBUG [BusinessExecutor3] (FetchStoreNodeOfChildTableHandler.java:81) -execute in datanode dn21
02/12 17:23:50.531 DEBUG [BusinessExecutor3] (PhysicalDBPool.java:452) -select read source hostM2 for dataHost:m1
02/12 17:23:50.532 DEBUG [$_NIOREACTOR-0-RW] (FetchStoreNodeOfChildTableHandler.java:154) -received rowResponse response,1 from MySQLConnection [id=8, lastTime=1455269030515, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=15, charset=latin1, txIsolation=0, autocommit=true, attachment=dn21, respHandler=org.opencloudb.mysql.nio.handler[email protected], host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
02/12 17:23:50.533 DEBUG [$_NIOREACTOR-0-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=8, lastTime=1455269030515, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=15, charset=latin1, txIsolation=0, autocommit=true, attachment=null, respHandler=null, host=12.23.2.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
02/12 17:23:50.732 DEBUG [BusinessExecutor4] (RouterUtil.java: