前言
本章主要整理 MyCat核心配置說明
核心配置文件說明
文件名 | 說明 | 功能 |
---|---|---|
server.xml | 虛擬MySQL | 配置系統相關參數 配置用戶訪問權限 配置SQL防火牆及SQL攔截功能 |
schema.xml | 數據庫配置 | 配置邏輯庫及邏輯表 配置邏輯表所存儲的數據節點 配置數據節點所對應的物理數據庫服務信息 |
rule.xml | 切片規則 | 配置水平分片的分片規則 配置分片規則所對應的分片函數 |
log4j2.xml | 日誌文件 | 配置輸出日誌的格式 配置輸出日誌的級別 |
核心配置 - server.xml
完整配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="nonePasswordLogin">0</property>
<property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">2048</property>
<property name="charset">utf8</property>
<property name="txIsolation">2</property>
<property name="processors">8</property>
<property name="idleTimeout">1800000</property>
<property name="sqlExecuteTimeout">300</property>
<property name="useSqlStat">0</property>
<property name="useGlobleTableCheck">0</property>
<property name="sequnceHandlerType">1</property>
<property name="defaultMaxLimit">100</property>
<property name="maxPacketSize">104857600</property>
</system>
<!-- 全局SQL防火牆設置 -->
<!--白名單可以使用通配符%或着*-->
<!--例如<host host="127.0.0.*" user="root"/>-->
<!--例如<host host="127.0.*" user="root"/>-->
<!--例如<host host="127.*" user="root"/>-->
<!--例如<host host="1*7.*" user="root"/>-->
<!--這些配置情況下對於127.0.0.1都能以root賬戶登錄-->
<firewall>
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">book_db</property>
</user>
<!-- 只讀用戶 -->
<user name="admin">
<property name="password">123456</property>
<property name="schemas">book_db</property>
<property name="readOnly">true</property>
</user>
<!-- 訪問用戶權限配置 -->
<user name="test">
<property name="password">123456</property>
<property name="schemas">book_db</property>
<property name="readOnly">true</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" showTables="custome/mysql">
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic" dml="1111"></table>
</schema>
</privileges>
</user>
</mycat:server>
system配置說明
屬性 | 說明 |
---|---|
serverPort | MyCat 服務端口 |
managerPort | MyCat 管理端口 |
nonePasswordLogin | 0 需要密碼登錄 (默認) 1 不需要密碼登錄(需要指定默認賬戶) |
bindIp | 在哪個IP上監控 |
frontWriteQueueSize | 前端寫隊列的大小 |
charset | 默認字符集 (前端鏈接到後端MySQL的字符集需要保持一致) |
txIsolation | 事務隔離級別 <下面有完整介紹> |
processors | MyCat的進程數量,通常等於cpu核數就好 |
idleTimeout | 前端連接MyCat空閒超時時間 (單位:毫秒) |
sqlExecuteTimeout | SQL 執行超時(單位:秒) |
useSqlStat | 1 開啓實時統計 0 關閉 |
useGlobleTableCheck | 1 開啓全局表一致性檢測 0 關閉 |
sequnceHandlerType | 指定使用 Mycat 全局序列的類型. <下面有完整介紹> |
defaultMaxLimit | MyCat默認返回數據值的大小 |
maxPacketSize | 運行最大包的大小 |
事務隔離級別 txIsolation
隔離級別 | 值 |
---|---|
讀未提交(READ UNCOMMITTED) | 1 |
讀已提交(READ COMMITTED) | 2 |
可重複讀(REPEATABLE READ) - 默認 | 3 |
順序讀 (SERIALIZABLE) | 4 |
全局序列的類型 sequnceHandlerType
值 | 描述 |
---|---|
0 | 爲本地文件方式 |
1 | 爲數據庫方式 |
2 | 爲時間戳序列方式 |
3 | 爲分佈式ZKID生成器 |
4 | 爲 zk 遞增Id 方式 |
user配置說明
定義默認賬號,用戶名 user
密碼 123456
,可以登錄mycat並可訪問邏輯庫 book_db
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">book_db</property>
</user>
定義只讀賬號,用戶名 admin
密碼 123456
, 可以登錄mycat並可訪問邏輯庫 book_db
<user name="admin" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">book_db</property>
<property name="readOnly">true</property>
</user>
訪問用戶權限配置,限制邏輯表 TESTDB
參數 | 說明 | 事例(禁止增刪改查) |
---|---|---|
Dml | insert,update,select,delete | 0000 |
<user name="test">
<property name="password">123456</property>
<property name="schemas">book_db</property>
<privileges check="false">
<schema name="TESTDB" dml="0010" showTables="custome/mysql">
<table name="tbl_user" dml="0110"></table>
<table name="tbl_dynamic" dml="1111"></table>
</schema>
</privileges>
</user>
密碼加密
得到最後一行,加密串
$ cd usr/local/mycat/lib
$ java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:123456
<user name="root" defaultAccount="true">
<property name="usingDecrypt">1</property>
<property name="password">上面輸出的密碼</property>
<property name="schemas">book_db,order_db</property>
</user>
重啓 mycat
mycat restart
防火牆
白名單配置
<firewall>
<whitehost>
<!-- ip 白名單 用戶對應的可以訪問的 ip 地址 -->
<host user="admin" host="192.168.1.5"></host>
</whitehost>
</firewall>
非白名單的主機登錄 MyCat
mysql -uadmin -p123456 -h192.168.1.2 -P8066
ERROR 1045 (HY000): Access denied for user 'admin' with host '192.168.1.2'
黑名單設置
<blacklist check="true">
<!-- 是否允許非以上基本語句的其他語句,缺省關閉,通過這個選項就能夠屏蔽 DDL。 -->
<property name="noneBaseStatementAllow">true</property>
<!-- 檢查 DELETE 語句是否無 where 條件,如果沒有拒絕 -->
<property name="deleteWhereNoneCheck">true</property>
</blacklist>
測試 delete 不輸入where的情況
# 執行delete 但不輸入 where
delete from order_master;
ERROR 3012 (HY000): The statement is unsafe SQL, reject for user 'admin'