ClickHouse 管理与运维(用户配置&权限配置&备份)
分析用户配置文件结构
打开配置文件 /etc/clickhouse-server/users.xml
<?xml version="1.0"?>
<yandex>
<profiles><!-- 类似于角色的作用,支持继承-->
<default><!-- 自定义名称,默认角色-->
<max_memory_usage>10000000000</max_memory_usage>
<load_balancing>random</load_balancing>
</default>
<test1> <!-- 自定义名称,默认角色-->
<allow_experimental_live_view>1</allow_experimental_live_view>
<distributed_product_mode>allow</distributed_product_mode>
</test1>
</profiles>
<users><!-- 定义用户信息 -->
<default>
<password></password>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</default>
<user_demo>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<password>123</password>
<profile>default</profile>
<quota>default</quota>
</user_demo>
<root>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<password_sha256_hex>4813494d137e1631bba301d5acab6e7bb7aa74ce1185d456565ef51d737677b2</password_sha256_hex>
<profile>default</profile>
<quota>default</quota>
</root>
</users>
<quotas> <!-- 配置熔断信息 -->
<default>
<interval>
<duration>3600</duration>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
</yandex>
用户创建
找到 users 标签, profile是用户所用的profile配置,直接引用相应的名称即可。quota是设置该用户能使用的资源限额,可以理解为一种熔断机制。ip是限制用户登录的ip地址,也可以用 host 标签
如下图所示
- default 是默认用户,没有配置密码,即不需要填写用户名和密码就可以连接ck
- user_demo 是使用的明文密码
- root 使用的是 SHA256 加密
#生成 SHA256 加密字符串,root 是你要加密的字符串
echo -n root | openssl dgst -sha256
# 使用用户名密码登录 ck
clickhouse-client -n root --password root;
clickhouse-client -n user_demo --password 123;
角色权限
networks
- 使用 ip 标签来限制客户端登录的 ip 地址
<ip>127.0.0.1</ip>
- 使用 host 标签来限制客户端登录的 host 名称
<host>xxx.xxx.com</host>
- 正则匹配 host 标签
<host>正则匹配内容</host>
allow_databases,allow_dictionaries
配置用户访问数据库和字典的权限
<allow_databases>
<database>xxx</database>
<database>xxx2</database>
</allow_databases>
<allow_dictionaries>
<dictionariy>xxx</dictionariy>
</alow_dictionaries>
查询权限
- 读权限 select, exists, show, describe
- 写权限 insert, optimize
- 设置权限 set
- DDL权限 create, drop, alter, rename, attach, detach, truncate
- 其他权限 kill, use 此类权限任何用户都拥有
readonly 设置读权限,写权限,设置权限
- 0:不进行任何限制(默认值)
- 1:只拥有读权限
- 2:拥有读权限和设置权限
allow_ddl 设置 ddl 权限
- 0:不允许 DDL 查询
- 1: 允许 DDL 查询(默认值)
测试:新增两个角色 role1 和 role2
<profiles>
...
<role1> <!-- 只有读权限 -->
<readonly>1</readonly>
<allow_ddl>0</allow_ddl>
</role1>
<role2> <!-- 有读权限和设置参数权限 -->
<readonly>2</readonly>
<allow_ddl>0</allow_ddl>
</role2>
</profiles>
databases
数据行级权限,可以通过条件进行过滤
<role1>
...
<databases>
<default><!--默认数据库-->
<test_row_level><!--表名称-->
<filter>id < 10</filter>
</test_row_level>
<!--支持组合条件 <test_query_all>
<filter>id <= 100 or repo >= 100</filter>
</test_query_all> -->
</default>
</databases>
</role1>
熔断机制
当使用的资源数量达到阈值,那么正在进行的操作就会中断
根据时间周期的累计用量熔断
<quotas>
<default> <!-- 自定义名称 -->
<interval>
<duration>3600</duration><!-- 时间周期 单位:秒 -->
<queries>0</queries>
<errors>0</errors>
<result_rows>0</result_rows>
<read_rows>0</read_rows>
<execution_time>0</execution_time>
</interval>
</default>
</quotas>
- default: 自定义名称,全局唯一,类似于id
- duration:表示累积的时间周期,单位秒
- queries:周期内允许执行的查询次数,0表示不限制
- errors:周期内允许发生的异常次数,0表示不限制
- result_row:表示周期内允许查询返回的结果行数,0表示不限制
- read_rows:表示周期内在分布式查询中,允许远端节点读取的数据行数,0表示不限制
- execution_time:表示周期内允许执行的查询时间,单位是秒,0表示不限制
数据备份
导出文件备份
适用于数据体量较小
- 导出
clickhouse-client --query="SELECT * FROM table_name" > /chbase/table_name.tsv
- 将备份数据导入
cat /chbase/table_name.tsv | clickhouse-client --query "INSERT INTO table_name FORMAT TSV"
优势:
- 利用select查询筛选列,按需备份
快照表备份
就是一张普通表,按照一定的频率备份业务表数据,然后使用 INSERT INTO SELECT 插入数据
CREATE TABLE table_backup_01_01 as table_backup;
INSERT INTO TABLE table_backup_01_01 SELECT * FROM table_backup;
按分区备份
- 使用 FREEZE 备份
ALTER TABLE tb_name FREEZE PARTITION xxxx
- 使用 FETCH 备份
只支持 ReplicatedMergeTreee
ALTER TABLE tb_name FETCH PARTITION xxx FROM zk_path
具体备份操作可以查看
ClickHouse 备份与恢复 -万能修实验室