目錄
零:MyCat 單庫分表,事實證明是個坑,不能 join 不知道能用來幹嘛。
三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係
零:MyCat 單庫分表,事實證明是個坑,不能 join 不知道能用來幹嘛。
具體的操作流程如下:
ー:下載
目前只有 1.6.5版本 以上支持單庫分表。
下載,解壓使用即可。
解壓後,修改配置文件,在 mycat/conf 下
二:修改 server.xml MyCat 服務級別的配置
MyCat 的配置文件,設置賬號、參數等
<!-- mycat的8066 端口連接的用戶名,密碼,邏輯數據庫名 -->
<user name="lsq" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mydb</property>
</user>
設置 user name,password 及 schemas; 主要做的功能就是 邏輯庫與用戶 做映射。
name 和 password 在連接代理數據庫 MyCat 時使用;
schemas 是邏輯庫,要和 schema.xml 裏的 schema name 對應。
三:修改 schema.xml 邏輯庫的配置 主要配置的是邏輯庫,邏輯表,數據節點,和實際數據源之間的關係
MyCat 邏輯數據庫、表的映射關係,MySQL 數據節點、所屬物理數據庫的映射關係。
MyCat 對應的物理數據庫和數據庫表的配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- name: 邏輯數據庫名 -->
<schema name="mydb" checkSQLschema="false" sqlMaxLimit="100">
<!-- name: 表名,分表主鍵,子表,數據節點,分表規則 -->
<table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>
</schema>
<!-- database:物理數據庫名 -->
<dataNode name="dn1" dataHost="localhost1" database="mydb" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.85.128:3306" user="lsq" password="********">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.85.130:3306" user="lsq" password="********" />
</writeHost>
</dataHost>
</mycat:schema>
schema name 要和 server.xml 對應上,既多個用戶擁有對該邏輯庫的權限。
<schema name="mydb">
city表 設置分表三張,單庫多表只能設置一個 datanote,rule 採用取模模式 mod-long 取模分片。
<table name="submeter" primaryKey="id" autoIncrement="true" subTables="submeter$1-3" dataNode="dn1" rule="modlong"/>
writeHost 和 readHost 可以設爲同一數據庫。上述配置爲主從庫。相關配置詳見:MySQL 配置主從
四:修改 rule.xml
MyCat 分片(分庫分表)規則. mod-long 取模分片 取模列爲 id 取模算法爲 mod-long
<tableRule name="mod-long">
<rule>
<columns>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">3</property>
</function>
此次選用默認的 mod-long 規則,只需修改 count 數,修改 property count 等於 3。這樣,配置已經完成。
五:修改 MySQL 數據庫
先在 MySQL 庫上,建 3 張表,submeter1-3。如下圖,從庫中也創建了三張一樣的表。
六:啓動 MyCat
啓動:
./mycat start
查看啓動狀態:
./mycat status
停止:
./mycat stop
重啓(改變上面的 xml 配置不用重啓,管理端可以重新載入):
./mycat restart
查看 logs/ 下的 wrapper.log 和 mycat.log 可以查看運行時問題和異常。
MyCat 啓動日誌:
cat ./logs/wrapper.log
MyCat應用日誌:
cat ./logs/mycat.log
七:測試
mysql 創建 mydb 數據庫,submeter1, submeter2, submeter3 三張表。
連接 mycat, 端口:8066,賬號:lsq, 密碼:******** // 對應 server 表中的 user 標籤
執行 sql 語句,查看執行過程。
EXPLAIN
insert into submeter(id, l, s, q) VALUES (3, 'l3', 's3','q3')
可查看執行過程路由到物理表 submeter1 表上:
打開 mysql 中的 mydb 數據庫 submeter1 表可看到數據:
其他:錯誤
運行 MyCat 時提示以下錯誤:
代理拋出異常錯誤: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: server1: server1: nodename nor servname provided, or not known
解決辦法:
linux 環境下
vim /etc/hosts
win 環境下
C:\Windows\System32\drivers\etc 替換方案, 複製修改, 替換
將 127.0.0.1 localhost 改成 127.0.0.1 localhost server1