开始上clickhouse的时候比较脑残,服务器上有三个大的盘,每个盘15T, 但是我把最大的几分日志数据都弄到了其中一个盘上了。所以最近磁盘高静,不得不开始考虑数据的重新分布。还好clickhouse提供了比较好的数据移动的支持参照clickhouse的 single page 文档 的 Manipulations with partitions and parts 这个部分。从这方面来讲,clickhouse 让我感觉到 从磁盘文件到服务接口 是衔接的那么自然, 以至于你可以在规则以内,操作磁盘文件实现数据的拷贝、移动、删除、恢复、备份等你想要的手动挡数据库。
转入正题,这次要做的事情目的很简单,就是要实现一个database DB0中的tables 拆开。把table分散到三个磁盘上去。
首先说明一下如何实现在三个盘上创建三个database DB1 DB2 DB3(我的方法可能比较土,有其他方法欢迎拍砖):
首先直接执行三次创建database的语句:
Create database DB1;
Create database DB2;
Create database DB3;
然后查看你的/Path/to/clickhouse/data/ 下面会出现三个空文件夹 DB1 DB2 DB3, 然后把这三个文件夹全部删掉。 创建一个软连接指向/data1/Path/to/DB1/real/directory, 其余数据库一样处理,这样 ok了 在三个数据库的数据 就分不到不同的磁盘上了。
接下来说一下如何从DB0 中把数据转移到其他表中:
以table1 为例说明
1. 停止数据导入;
2.直接拷贝/Path/to/clickhouse/data/DB0/table1 到/Path/to/clickhouse/data/DB1(注意这里是软件连接)下,即数据库DB1下面
3.找到/Path/to/clickhouse/metadata/DB0/table1.sql; 登陆本机的clickhouse 切到DB1数据库,执行一下table1.sql中的sql语句(注意这个sql语句应该是ATTACH操作)。
执行成功即OK了。