
# 通过数据文件备份恢复ClickHouse数据
#### 操作场景
本章节主要介绍通过把ClickHouse中的表数据导出到CSV文件进行备份，后续可以通过备份的CSV文件数据再进行恢复操作。
#### 前提条件
- 已安装ClickHouse客户端。
- 在Manager已创建具有ClickHouse相关表权限的用户。
- 已准备好备份服务器。
 
#### 备份数据
1. 以客户端安装用户，登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   
   
3. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
4. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户，当前用户需要具有创建ClickHouse表的权限。如果当前集群未启用Kerberos认证，则无需执行本步骤。 
   1. 如果是MRS 3.1.0版本集群，则需要先执行： **export CLICKHOUSE_SECURITY_ENABLED=true**
      
   
   2. **kinit** *组件业务用户*
      例如，**kinit**clickhouseuser。
      
   
   
   
   
5. 执行ClickHouse组件的客户端命令，将要备份ClickHouse表数据导出到指定目录下。 
   **clickhouse client --host** *主机名/实例IP* **--secure --port 9440 --query=** "*表查询语句* " \> *输出的csv格式文件路径*
   例如，如下是在ClickHouse实例10.244.225.167下备份test表数据到default_test.csv文件中。
   **clickhouse client --host 10.244.225.167 --secure --port 9440 --query="select \* from default.test FORMAT CSV" \> /opt/clickhouse/default_test.csv**
   
   
6. 将导出的csv数据文件上传至备份服务器。
 
#### 恢复数据
1. 将备份服务器上的备份数据文件上传到ClickHouse客户端所在目录。 
   例如，上传default_test.csv备份文件到：/opt/clickhouse目录下。
   
   
2. 以客户端安装用户，登录安装客户端的节点。
3. 执行以下命令，切换到客户端安装目录。 
   **cd /opt/client**
   
   
4. 执行以下命令配置环境变量。 
   **source bigdata_env**
   
   
5. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户，当前用户需要具有创建ClickHouse表的权限。如果当前集群未启用Kerberos认证，则无需执行本步骤。 
   1. 如果是MRS 3.1.0版本集群，则需要先执行**：**
      **export CLICKHOUSE_SECURITY_ENABLED=true**
      
   
   2. **kinit** ***组件业务用户***
      例如，**kinit**clickhouseuser。
      
   
   
   
   
6. 执行ClickHouse组件的客户端命令，登录ClickHouse集群。 
   **clickhouse client --host** *主机名/实例IP* **--secure** **--port 9440**
   
   
7. 创建与CSV备份数据文件格式对应的表。
   
   **CREATE TABLE \[IF NOT EXISTS\]** *\[database_name.\]table_name* **\[ON CLUSTER** *Cluster名* **\]**
   **(**
   *name1* **\[** *type1* **\] \[DEFAULT\|** *materialized* **\|ALIAS** *expr1* **\],**
   *name2* **\[** *type2* **\] \[DEFAULT\|** *materialized* **\|ALIAS** *expr2* **\],**
   **...**
   **)** *ENGINE* = *engine*
   
   
8. 将备份数据文件中的内容导入到[7]创建的表中进行数据恢复。
   
   **clickhouse client --host** *主机名/实例IP* **--secure --port 9440 --query=** "**insert into** *表信息* **F** **ORMAT CSV** " **\<** *csv文件路径*
   例如，如下在ClickHouse实例10.244.225.167中，恢复default_test.csv备份文件数据到test_cpy表中。
   **clickhouse client --host** **10.244.225.167** **--secure --port 9440 --query=** **"insert into default.test_cpy FORMAT CSV" \< /opt/clickhouse/default_test.csv**
   
   
 
