MyHub是一个由Go开发高性能MySQL代理中间件项目,MyHub在满足基本的读写分离的功能上,致力于简化MySQL分库分表操作。 MyHub和其它数据库中间件相比最大特点是做到最大限度的仿真MySql,用管理工具连接到Myhub就如同连接接Mysql一样。 MyHub能自动停用故障节点数据库,在故障节点数据库恢重启后,Myhub能自动发现并启用节点。 请从release页面获取最新版的RPM安装包
RPM安装
下载、安装
wget https://github.com/sgoby/myhub/releases/download/0.0.1/myhub-0.0.1-1.x86_64.rpm
rpm -ivh myhub-0.0.1-1.x86_64.rpm
启动
service myhub start
编译安装
安装Golang、git
Linux 上安装(build_linux.sh)
dir=`pwd`
git clone https://github.com/sgoby/myhub src/github.com/sgoby/myhub
export GOPATH=$dir
echo $GOPATH
go build -o bin/myhub src/github.com/sgoby/myhub/cmd/myhub/main.go
echo Congratulations. Build success!
Windows 上安装(build_windows.bat)
git clone https://github.com/sgoby/myhub src/github.com/sgoby/myhub
set dir=%cd%
set GOPATH=%GOPATH%;%dir%
go build -o bin/myhub.exe src/github.com/sgoby/myhub/cmd/myhub/main.go
echo Congratulations. Build success!
启动参数 --cnf 配置文件存放配置文件, 默认'conf/myhub.xml' 如:myhub.exe --cnf conf/myhub.xml
<serveListen>0.0.0.0:8520</serveListen>
MyHub 监听的host和端口,默认端口:8520
<workerProcesses>0</workerProcesses>
工作进程数,默认是0,表示取当前主机的CPU核心数
<maxConnections>2048</maxConnections>
最大连接数,默认是2048
<logPath>logs</logPath>
配置路径,默认是Myhub当前目录下的logs目录
<logLevel>warn</logLevel>
日志级别:[debug|info|warn|error] 默认error
<logSql>on</logSql>
是否开启sql语句输出[on|off] 默认off
<slowLogTime>100</slowLogTime>
开启慢日志(时间单位:毫秒),默认是0不开启
<users>
<!-- db1,db2,ip1,ip2 * means any database or ip -->
<user name="root" passwrod="123456" charset="utf-8" db="db1" ip="*"/>
</users>
参数说明:
添加两个节点主机:host_1,host_2
<node>
<hosts>
<!-- write only(master) 写库(主库) --->
<host type="write" name="host_1" address="127.0.0.1:3306" user="root" password="123456">
<!-- read only(slave) 只读库(从库) --->
<!-- <host type="read" name="host_1_1" address = "192.168.31.231:3306" user = "root" password = "123456" weight="1"/> -->
</host>
<host type="write" name="host_2" address="192.168.31.231:3306" user="root" password="123456"/>
</hosts>
<dataBases>
<dataBase name="test" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
<dataBase name="shard_01" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
<dataBase name="shard_02" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
<dataBase name="lb_ss" host="host_1" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
<dataBase name="lb_livegame" host="host_2" maxOpenConns="16" maxIdleConns="4" maxIdleTime="30"/>
</dataBases>
</node>
参数说明:
添加两个逻辑数库:db1,test_1; 其中db1中添加了三个逻辑表:dealer_info,cash_record,api_log;
<schema>
<dataBase name="db1" proxyDataBase="lb_ss" blacklistSql="blacklist/db1.sql">
<!-- rule: hash | range | date_month | date_day -->
<table name="dealer_info" ruleKey="id" rule="rang_1" createSql="dealer_info.sql"/>
<table name="cash_record" ruleKey="add_time" rule="rang_2" createSql="cash_record.sql"/>
<table name="api_log" ruleKey="id" rule="hash_1" createSql="api_log.sql"/>
</dataBase>
<!-- 直接代理 -->
<dataBase name="test_1" proxyDataBase="test"/>
</schema>
参数说明:
Myhub 目前支持三种分片规则:
此规则根据rowLimit参数求模运算,可以把相邻的数据分到同一分片,减少插入事务控制难度。如果分片字段(ruleKey)的类型是数字类型,则直接求模;如果是字符类型,先计hashCode再求模。
此规则适用于,提前规划好分片字段某个范围属于哪个分片,start <= range < end。
此规则可以按(年、月、日)分片,支持多个日期周期,如: 可以把每7天(rowLimit="7d")作为的一个分片,其它同理,start <= date < end。
<rules>
<rule name="rang_1" ruleType="range" format="%04d">
<!-- tableRowLimit : 2d,m,y,h-->
<shard nodeDataBase="test" rowLimit="10000" between="1-8" />
<shard nodeDataBase="shard_01" rowLimit="10000" between="8-10" />
</rule>
<rule name="rang_2" ruleType="date" format="ym">
<!-- tableRowLimit : 2d,m,y,h-->
<shard nodeDataBase="test" rowLimit="1m" between="201801-201901" />
</rule>
<!-- 'maxLen' represents the count of hash shard total, default 1024 -->
<rule name="hash_1" ruleType="hash" format="%04d" maxLen = "12">
<!-- 'rowLimit' represents every shard table continuous rows count split by 'ruleKey', default 1;
'between' represents the hash mod value range. ex:'between="0-3",ruleKey's value is 10,
and 'maxlen'= 10, 10%3 = 1,it menas in the between 0-3 -->
<shard nodeDataBase="test" rowLimit="2" between="0-6" />
<shard nodeDataBase="shard_01" rowLimit="2" between="6-12" />
</rule>
</rules>
参数说明:
'rule' 规则
'name' (必需) 规则名称,在逻辑库表配置会用到
'ruleType' (必需) 分片规则[range|hash|date]
'format' (可选) 自动创建分表的后缀名,
(1. 如果分片规则是range|hash 格式为%d 如:format="%04d" 生成的表名是 table_0001;
(2. 如果分片规则是date 格式为[y|m|d] 分别表示年/月/日 可以是组合 如:format="ym" 生成的表名是 table_201805;
'maxLen' (可选) 仅在hash 规则中有用, hash 取模中的被模数
'shard' 规则分片
'shard' -> 'nodeDataBase' 节点数据库名称,对应节点配置中的 'dataBase' -> 'name'
'shard' -> 'rowLimit' 每个分表的行数限制,具体对每个分片规则其含义如下:
(1. range 规则表示每个分表的行数,值类型为数字 如:rowLimit = "100000" 表示每个分表最大行数为100000 条
(2. date 规则表示每个分表按时间划分的行数,值为数字和[y|m|d]组合 如:rowLimit = "1ym" 表示每个分表存的数据是一个月
(3. hash 规则表示每个分表按hash取模的余数,值类型为数字 如:rowLimit = "2" 10 % 0 和 10 % 1 是存在同一个表中
'shard' -> 'between' 分片所在节点数据的限制范围
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型