什么是水平切分?
水平切分是按照某个字段的某种规则,把数据切分到多张数据表,或者存到归档数据库,起到缩表的效果,提高数据库查询速度。
那么,如何进行水平切分?
废话不多说,上干货!推荐一个工具 “pt-archiver”,它是"Percona Toolkit" 工具集的一个子工具。用于将MySQL 进行水平切分。可归档至另一个mysql或 dump 成一个符合LOAD DATA INFILE 的文件。The website for pt-archiverwww.percona.com
如果没有安装pt-archiver
For Mac OS
brew install percona-toolkit
For liunx
sudo apt-get install percona-toolkit
一、归档至另一个MySQL。
执行语句
pt-archiver --source h=$SIP,P=$SPORT,u=$SUSER,p=$SPASS,D=$SDATABASE,t=$STABLE,A=utf8 --dest h=$AIP,P=$APORT,u=$AUSER,p=$APASS,D=$ADATABASE,t=$ATABLE,A=utf8 --charset=utf8 --where "$WHERE" --progress=10000 --txn-size=10000 --statistics --limit=10000参数详解
--source 源数据选项
h = 服务ip
P = 端口
u = 用户名
p = 密码
D = 数据库
t = 表
A = 编码
-- dest 目标数据库选项
参数同上
--where 查询条件
--progress 每指定行数输出处理信息
--txn-size 每指定行数提交一次事务
--statistics 输出最终分析
--limit 每次取出指定行数交给pt-archiver 处理。
二、归档至文件
只需将 “--dest” 相关参数换成 “--file”,详见下文
pt-archiver --source h=$SIP,P=$SPORT,u=$SUSER,p=$SPASS,D=$SDATABASE,t=$STABLE,A=utf8 --file '/var/log/archive/%Y-%m-%d-%D.%t' --charset=utf8 --where "$WHERE" --progress=10000 --txn-size=10000 --statistics --limit=10000
其他参数请参阅上文提到的官方文档,如阅读英文有困难,可在知乎或其他搜索引擎搜索“pt-archiver 参数”
另:写了一份自动同步脚本,可以放入“crond” 内自动化同步。写的不好,如有指教,请提出建议。感谢~shell 自动化脚本文件github.com