# 使用LOAD DATA导入本地数据
此章节介绍如何通过LOAD DATA将本地数据导入TaurusDB。
![](https://support.huaweicloud.com/taurusdb_faq/public_sys-resources/caution_3.0-zh-cn.png)
1. 数据导入阶段会在一定程度上影响TaurusDB实例性能，请选择在业务低峰时间导入。
2. 建议不要同时发起多个LOAD DATA请求。多个LOAD DATA同时进行，数据高并发写入，表锁竞争以及系统IO抢占会影响总体效率，可能会出现SQL事务超时现象，导致LOAD DATA全部失败。
 
#### 语法
```
LOAD DATA LOCAL
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
    ]
    [LINES
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
```
#### 参数
- file_name ：要导入的本地文件的路径。
- REPLACE \| IGNORE : 指定遇到重复记录是替换还是忽略。
- tbl_name ：要导入的目标表名。
- CHARACTER SET charset_name ：指定文件的编码，建议和TaurusDB实例上的编码一致，否则可能乱码。
- FIELDS TERMINATED BY 'string' ：用来指定每列之间的分隔符号，默认值为 \\t 。
- \[OPTIONALLY\] ENCLOSED BY 'char' ：用来忽略数据源字段中的符号。
- LINES TERMINATED BY 'string' ：可以指定行之间的换行符，默认值为 \\n 。
  ![](https://support.huaweicloud.com/taurusdb_faq/public_sys-resources/note_3.0-zh-cn.png)
  有些windows上的文本文件的换行符可能为\\r\\n，由于是不可见字符，请仔细检查。
  
 
- IGNORE number LINES ：设置导入数据时忽略开始的某几行。
- (column_name_or_user_var,...) ：设置导入的列，如果不设置，默认按照列的顺序来导入数据。
- 更多参数参考MySQL的[load data infile](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)官方文档说明。其他参数的先后顺序不能乱，顺序参考[官方说明](https://dev.mysql.com/doc/refman/8.0/en/load-data.html)。
 #### 标准示例
前提条件：
- 服务端必须开启local_infile开关，在目标实例概览页面，进入参数修改页面里将此参数修改为ON。
- 客户端必须开启local_infile开关，在my.cnf中配置local_infile或连接数据库使用 --local_infile=1 参数。
  ```
  [mysql]
  local_infile
  ```
  
1. 将本地文件qq.txt中的数据导入test表中，qq.txt文件共有5行数据，列分隔符为','，行分隔符'\\n'，内容如下：
   ```
   1,a
   2,b
   3,c
   4,d
   5,"e"
   ```
   
2. 创建对应表test，SQL如下：
   ```
   CREATE TABLE test (
   `id` int NOT NULL,
   `a` varchar(4) NOT NULL, 
   PRIMARY KEY (`id`) 
   );
   ```
   
3. 在客户端中执行LOAD DATA命令将qq.txt文件中的数据导入到test表中，设置字符集为 utf8，忽略数据源字段中的双引号。
   ```
   mysql> LOAD DATA LOCAL INFILE '/data/qq.txt' IGNORE INTO TABLE test CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
   Query OK, 5 rows affected, 1 warning (0.00 sec)
   Records: 5  Deleted: 0  Skipped: 0  Warnings: 1
   mysql> select * from test;
   +----+---+
   | id | a |
   +----+---+
   |  1 | a |
   |  2 | b |
   |  3 | c |
   |  4 | d |
   |  5 | e |
   +----+---+
   5 rows in set (0.00 sec)
   ```
   
 
#### 常见问题
执行LOAD DATA显示错误码3948或2068，如何处理？
表1错误码及解决方案 
| 错误码                                                                                                           | 解决方案                                                                                   |
|:---|:---|
| ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides | 需要按照[标准示例]开启服务端local_infile开关。 |
| ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.               | 需要按照[标准示例]开启客户端local_infile开关。  |
   
