您好,登錄后才能下訂單哦!
本篇內容介紹了“MyCat怎么分庫分表”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
項目環境:
192.168.8.30 mycat
192.168.8.31 node1
192.168.8.32 node2
192.168.8.33 node3
三個節點MySQL均為單實例
一、創建測試庫
node1
create database testdb01; create database testdb02; create database testdb03;
node2
create database testdb13; create database testdb14; create database testdb15;
node3
create database testdb25; create database testdb26; create database testdb27;
二、配置schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"> <table name="user03" dataNode="dn$1-3,dn$13-15,dn$25-27" rule="auto-sharding-long"></table> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <dataNode name="dn1" dataHost="node1" database="testdb01" /> <dataNode name="dn2" dataHost="node1" database="testdb02" /> <dataNode name="dn3" dataHost="node1" database="testdb03" /> <dataNode name="dn4" dataHost="node1" database="testdb04" /> <dataNode name="dn5" dataHost="node1" database="testdb05" /> <dataNode name="dn6" dataHost="node1" database="testdb06" /> <dataNode name="dn7" dataHost="node1" database="testdb07" /> <dataNode name="dn8" dataHost="node1" database="testdb08" /> <dataNode name="dn9" dataHost="node1" database="testdb09" /> <dataNode name="dn10" dataHost="node1" database="testdb10" /> <dataNode name="dn11" dataHost="node1" database="testdb11" /> <dataNode name="dn12" dataHost="node1" database="testdb12" /> <dataNode name="dn13" dataHost="node2" database="testdb13" /> <dataNode name="dn14" dataHost="node2" database="testdb14" /> <dataNode name="dn15" dataHost="node2" database="testdb15" /> <dataNode name="dn16" dataHost="node2" database="testdb16" /> <dataNode name="dn17" dataHost="node2" database="testdb17" /> <dataNode name="dn18" dataHost="node2" database="testdb18" /> <dataNode name="dn19" dataHost="node2" database="testdb19" /> <dataNode name="dn20" dataHost="node2" database="testdb20" /> <dataNode name="dn21" dataHost="node2" database="testdb21" /> <dataNode name="dn22" dataHost="node2" database="testdb22" /> <dataNode name="dn23" dataHost="node2" database="testdb23" /> <dataNode name="dn24" dataHost="node2" database="testdb24" /> <dataNode name="dn25" dataHost="node3" database="testdb25" /> <dataNode name="dn26" dataHost="node3" database="testdb26" /> <dataNode name="dn27" dataHost="node3" database="testdb27" /> <dataNode name="dn28" dataHost="node3" database="testdb28" /> <dataNode name="dn29" dataHost="node3" database="testdb29" /> <dataNode name="dn30" dataHost="node3" database="testdb30" /> <dataNode name="dn31" dataHost="node3" database="testdb31" /> <dataNode name="dn32" dataHost="node3" database="testdb32" /> <dataNode name="dn33" dataHost="node3" database="testdb33" /> <dataNode name="dn34" dataHost="node3" database="testdb34" /> <dataNode name="dn35" dataHost="node3" database="testdb35" /> <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" /> <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> <dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" /> <dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> --> <dataHost name="node1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="192.168.8.31" url="192.168.8.31:3306" user="root" password="mysql"></writeHost> </dataHost> <dataHost name="node2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="192.168.8.32" url="192.168.8.32:3306" user="root" password="mysql"></writeHost> </dataHost> <dataHost name="node3" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="192.168.8.33" url="192.168.8.33:3306" user="root" password="mysql"></writeHost> </dataHost> </mycat:schema>
三、配置rule.xml
<mycat:rule xmlns:mycat="http://io.mycat/"> <tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>autopartition-long-user03</algorithm> </rule> </tableRule> <function name="autopartition-long-user03" class="io.mycat.route.function.AutoPartitionByLong"> <property name="mapFile">autopartition-long-user03.txt</property> <property name="defaultNode">0</property> </function> </mycat:rule>
四、配置autopartition-long-user03.txt
1-10=0 11-20=1 21-30=2 31-40=3 41-50=4 51-60=5 61-70=6 71-80=7 81-10000=8
五、配置server.xml
<user name="root" defaultAccount="true"> <property name="password">mysql</property> <property name="schemas">mycatdb</property> </user>
六、啟動mycat
/usr/local/mycat/bin/mycat start
查看mycat日志
STATUS | wrapper | 2018/11/22 15:27:14 | --> Wrapper Started as Daemon STATUS | wrapper | 2018/11/22 15:27:14 | Launching a JVM... INFO | jvm 1 | 2018/11/22 15:27:14 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0 INFO | jvm 1 | 2018/11/22 15:27:16 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org INFO | jvm 1 | 2018/11/22 15:27:16 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved. INFO | jvm 1 | 2018/11/22 15:27:16 | INFO | jvm 1 | 2018/11/22 15:27:20 | MyCAT Server startup successfully. see logs in logs/mycat.log
七、登錄MySQL并查看邏輯表
mysql> use mycatdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------+ | Tables in mycatdb | +-------------------+ | order01 | | orderdetail01 | | user01 | | user02 | | user03 | +-------------------+ 5 rows in set (0.00 sec) mysql> mysql> mysql> drop table if exists user03; Query OK, 0 rows affected, 1 warning (0.23 sec) mysql> create table user03 ( -> id int not null auto_increment, -> name varchar(64), -> primary key (id) -> ); Query OK, 0 rows affected (0.43 sec)
八、插入測試數據
共插入50條數據
insert into user03(id,name) values(1,'steven'); insert into user03(id,name) values(2,'steven'); insert into user03(id,name) values(3,'steven'); insert into user03(id,name) values(4,'steven'); insert into user03(id,name) values(5,'steven'); insert into user03(id,name) values(11,'steven'); insert into user03(id,name) values(12,'steven'); insert into user03(id,name) values(13,'steven'); insert into user03(id,name) values(14,'steven'); insert into user03(id,name) values(15,'steven'); insert into user03(id,name) values(21,'steven'); insert into user03(id,name) values(22,'steven'); insert into user03(id,name) values(23,'steven'); insert into user03(id,name) values(24,'steven'); insert into user03(id,name) values(25,'steven'); insert into user03(id,name) values(31,'steven'); insert into user03(id,name) values(32,'steven'); insert into user03(id,name) values(33,'steven'); insert into user03(id,name) values(34,'steven'); insert into user03(id,name) values(35,'steven'); insert into user03(id,name) values(41,'steven'); insert into user03(id,name) values(42,'steven'); insert into user03(id,name) values(43,'steven'); insert into user03(id,name) values(44,'steven'); insert into user03(id,name) values(45,'steven'); insert into user03(id,name) values(51,'steven'); insert into user03(id,name) values(52,'steven'); insert into user03(id,name) values(53,'steven'); insert into user03(id,name) values(54,'steven'); insert into user03(id,name) values(55,'steven'); insert into user03(id,name) values(61,'steven'); insert into user03(id,name) values(62,'steven'); insert into user03(id,name) values(63,'steven'); insert into user03(id,name) values(64,'steven'); insert into user03(id,name) values(65,'steven'); insert into user03(id,name) values(71,'steven'); insert into user03(id,name) values(72,'steven'); insert into user03(id,name) values(73,'steven'); insert into user03(id,name) values(74,'steven'); insert into user03(id,name) values(75,'steven'); insert into user03(id,name) values(81,'steven'); insert into user03(id,name) values(82,'steven'); insert into user03(id,name) values(83,'steven'); insert into user03(id,name) values(84,'steven'); insert into user03(id,name) values(85,'steven'); insert into user03(id,name) values(91,'steven'); insert into user03(id,name) values(92,'steven'); insert into user03(id,name) values(93,'steven'); insert into user03(id,name) values(94,'steven'); insert into user03(id,name) values(95,'steven');
九、數據驗證
三個node只在testdb01-03,testdb13-15,testdb25-27,所以除了這9個物理庫之外,其他庫查不到分片。
下面在三個node分別驗證出分片信息:
node1
mysql> select count(*) from testdb01.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb02.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb03.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec)
node2
mysql> select count(*) from testdb13.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb14.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb15.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec)
node3
mysql> select count(*) from testdb25.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb26.user03; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from testdb27.user03; +----------+ | count(*) | +----------+ | 10 | +----------+ 1 row in set (0.00 sec)
“MyCat怎么分庫分表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。