分析用戶配置文件結構
打開配置文件 /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 備份與恢復 -萬能修實驗室