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

  1. 使用 ip 標簽來限制客戶端登錄的 ip 地址
<ip>127.0.0.1</ip>
  1. 使用 host 標簽來限制客戶端登錄的 host 名稱
<host>xxx.xxx.com</host>
  1. 正則匹配 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;

按分區備份

  1. 使用 FREEZE 備份
ALTER TABLE tb_name FREEZE PARTITION xxxx
  1. 使用 FETCH 備份
    只支持 ReplicatedMergeTreee
ALTER TABLE tb_name FETCH PARTITION xxx FROM zk_path

具體備份操作可以查看
ClickHouse 備份與恢復 -萬能修實驗室


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM