
# 添加MySQL数据源
#### 操作场景
HetuEngine支持配置MySQL数据源实现对MySQL数据源的接入与查询功能。本章节指导用户在集群的HSConsole界面添加MySQL类型的JDBC数据源。
#### 添加MySQL数据源前提条件
- 数据源与HetuEngine集群节点网络互通。
- 集群已启用Kerberos认证（安全模式）创建HetuEngine管理员用户，集群未启用Kerberos认证（普通模式）创建HetuEngine业务用户，并为其赋予HDFS管理员权限，即创建用户时需同时加入"hadoop"和"hadoopmanager"用户组，创建用户可参考[创建HetuEngine权限角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1714.html)。
- 已创建HetuEngine计算实例，可参考[创建HetuEngine计算实例](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1731.html)。
- 已获取MySQL数据库所在的IP地址，端口号，用户名及密码。
 
#### 约束与限制
本章节适用于MRS 3.3.0及之后的版本。
#### HetuEngine对接MySQL数据源约束
- HetuEngine支持对接MySQL操作的SQL语法：SHOW CATALOGS/SCHEMAS/TABLES/COLUMNS、DESCRIBE、USE、SELECT表/视图。
- HetuEngine支持的MySQL数据源的Schema和Table名称不区分大小写。
- 不支持在具有CHAR或VARCHAR等文本类型的列上下推任何谓词。 例如：由于name是VARCHAR类型的列，因此如下两个查询的谓词均不会下推。
  ```
  SELECT * FROM nation WHERE name>'abcd';
  SELECT * FROM nation WHERE name='abcd';
  ```
  
 
#### 配置MySQL数据源操作步骤
**安装集群客户端**
1. 安装包含HetuEngine服务的集群客户端，例如安装目录为"/opt/client"。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
**准备MySQL驱动**
2. 从MySQL官网获取MySQL驱动文件，格式为"*xxx*.jar"，支持版本为MySQL 5.7，MySQL 8.0及以后版本。
3. 上传MySQL驱动文件至HetuEngine所在集群。 
   可通过如下两种方式：
   - 通过Manager界面上传至HDFS：
     1. 使用HetuEngine管理员用户登录Manager界面，选择"集群 \> 服务 \> HDFS"，进入HDFS服务页面。
     
     2. 在"概览"页签下的"基本信息"区域，单击"NameNode Web UI"后的链接，进入NameNode Web UI界面。
     
     3. 选择"Utilities \> Browse the file system"，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001910116312.png)，创建"/user/hetuserver/fiber/extra_file/driver/mysql"目录。
     
     4. 进入"/user/hetuserver/fiber/extra_file/driver/mysql"目录，单击![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001944035525.png)上传[2]获取的MySQL驱动文件。
     
     5. 单击驱动文件所在行的"Permission"列的值，勾选"User"列的"Read"和"Write"，"Group"列的"Read"和"Other"列的"Read"，单击"Set"。
      
   
   - 通过使用HDFS命令直接上传：
     1. 登录HDFS服务客户端所在节点，切换到客户端安装目录，如"/opt/client"。
        ```
        cd /opt/hadoopclient
        ```
        
     
     2. 执行以下命令配置环境变量。
        ```
        source bigdata_env
        ```
        
     
     3. 如果集群已启用Kerberos认证（安全模式），执行以下命令进行用户认证。集群未启用Kerberos认证（普通模式）无需执行用户认证。
        ```
        kinit HetuEngine管理员用户
        ```
        根据回显提示输入密码。
        
     
     4. 执行如下命令创建目录"/user/hetuserver/fiber/extra_file/driver/mysql"，并上传[2]获取的MySQL驱动，然后修改对应的权限。
        ```
        hdfs dfs -mkdir -p /user/hetuserver/fiber/extra_file/driver/mysql
        hdfs dfs -put ./MySQL驱动文件  /user/hetuserver/fiber/extra_file/driver/mysql
        hdfs dfs -chmod -R 644 /user/hetuserver/fiber/extra_file/driver/mysql
        ```
        
      
    
   
   
**配置MySQL数据源**
4. 使用HetuEngine管理员用户登录Manager界面，选择"集群 \> 服务 \> HetuEngine"，进入HetuEngine服务页面。
5. 在"概览"页签下的"基本信息"区域，单击"HSConsole WebUI"后的链接，进入HSConsole界面。
6. 选择"数据源"，单击"添加数据源"。在"添加数据源"页面填写参数。 
   1. 配置"基本配置"，填写数据源名称，"数据源类型"选择"JDBC \> MySQL"。
   
   2. 配置"MySQL配置"，参数配置请参考[表1]。
       表1MySQL配置 
      | 参数       | 描述                                                                                                                                        | 取值样例                                                                                                                                                                                                                                         |
      |:---|:---|:---|
      | 驱动       | 默认为"mysql"。                                                                                                                               | mysql                                                                                                                                                                                                                                        |
      | 驱动名称     | 选择[2]中已提前上传的待使用的MySQL驱动，格式为*xxx*.jar。                                                                     | mysql-connector-java-8.0.11.jar                                                                                                                                                                                                              |
      | JDBC URL | 连接MySQL的JDBC URL地址。 格式：jdbc:mysql://*MySQL数据库所在的IP地址* :*端口号*。 端口号默认为3306。 | - IPV4：jdbc:mysql://10.10.10.11:3306  - IPV6：jdbc:mysql://\[10:10::10:11\]:3306   |
      | 用户名      | 连接MySQL数据源的MySQL用户名。                                                                                                                      | -                                                                                                                                                                                                                                            |
      | 密码       | 连接MySQL数据源的MySQL用户密码。                                                                                                                     | -                                                                                                                                                                                                                                            |
         
      
   
   3. （可选）自定义配置。
      单击"增加"可以增加自定义配置参数。配置MySQL数据源自定义参数，参考[表2]。
       表2MySQL数据源自定义配置参数 
      | 参数                                       | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 取值样例      |
      |:---|:---|:---|
      | mysql.auto-reconnect                     | 是否自动重连。 - true（默认值）：开启自动重连。  - false：关闭自动重连。                                                                                                                                                                                                                                                                                                                      | true      |
      | mysql.max-reconnects                     | 最大重连次数，默认值：3。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 3         |
      | mysql.jdbc.use-information-schema        | 驱动程序是否应该使用INFORMATION_SCHEMA来派生"DatabaseMetaData"使用的信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | true      |
      | use-connection-pool                      | 是否使用JDBC连接池，默认值：false。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | false     |
      | jdbc.connection.pool.maxTotal            | JDBC连接池中最大连接数，默认值：8。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 8         |
      | jdbc.connection.pool.maxIdle             | JDBC连接池中最大空闲连接数，默认值：8。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 8         |
      | jdbc.connection.pool.minIdle             | JDBC连接池中最小空闲连接数，默认值：0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 0         |
      | case-insensitive-name-matching           | HetuEngine支持的MySQL数据源的Schema和Table名称大小写格式敏感。 - false（默认值）：仅支持查询全小写的Schema和Table。  - true： - 忽略大小写后无同名的Schema和Table：支持查询该Schema和Table。  - 忽略大小写后存在同名的Schema和Table：不支持查询该Schema和Table。     | false     |
      | case-insensitive-name-matching.cache-ttl | MySQL数据源的大小写敏感的Schema和Table名称缓存超时时长，默认值：1m（1分钟）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 1m        |
      | dynamic-filtering.enabled                | 是否将动态过滤器下推到JDBC查询中。 - true（默认值）：开启下推。  - false：关闭下推。                                                                                                                                                                                                                                                                                                                | true      |
      | dynamic-filtering.wait-timeout           | 在启动 JDBC 查询之前，HetuEngine将等待从连接的构建端收集动态过滤器的最大持续时间。使用较大的超时可能会导致更详细的动态过滤器。但是也会增加某些查询的延迟，默认值：20s。                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 20s       |
      | unsupported-type-handling                | 当连接器不支持此数据类型时，是否将其转换为VARCHAR，从而避免失败。 - CONVERT_TO_VARCHAR：将不支持的类型转为VARCHAR类型，并且只支持对它们的读操作。  - IGNORE（默认值）：不支持的类型将不在查询结果中显示。                                                                                                                                                                                                                                        | IGNORE    |
      | join-pushdown.enabled                    | 是否启用Join下推。 - true（默认值）：开启Join下推。  - false：关闭Join下推。                                                                                                                                                                                                                                                                                                                 | true      |
      | join-pushdown.strategy                   | 用于评估Join操作是否被下推的策略。默认值：AUTOMATIC - AUTOMATIC（默认值）：启用基于成本的连接下推。  - EAGER：尽可能下推Join。即使表统计信息不可用， EAGER也可以下推Join，这可能会导致查询性能下降，因此仅建议将EAGER用于测试和故障排除场景。                                                                                                                                                                                                                     | AUTOMATIC |
         
      单击"删除"可以删除已增加的自定义配置参数。
      
   
   4. 单击"确定"。
   
   
   
   
7. 登录集群客户端所在节点，执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。 
   ```
   cd /opt/client
   ```
   执行以下命令配置环境变量。
   ```
   source bigdata_env
   ```
   执行以下命令，进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤）
   ```
   kinit HetuEngine组件操作用户
   ```
   
   
8. 执行以下命令，登录数据源的catalog。 
   ```
   hetu-cli --catalog 数据源名称 --schema 数据库名
   ```
   例如执行以下命令：
   ```
   hetu-cli --catalog mysql_1 --schema mysql
   ```
   
   
9. 执行以下命令，可正常查看数据库表信息或不报错即表示连接成功。 
   ```
   show tables;
   ```
   
   
 
#### MySQL与HetuEngine数据类型映射
表3MySQL数据类型到HetuEngine数据类型映射 
| MySQL类型                                                 | HetuEngine类型      |
|:---|:---|
| BIT                                                     | BOOLEAN           |
| BOOLEAN                                                 | TINYINT           |
| TINYINT                                                 | TINYINT           |
| SMALLINT                                                | SMALLINT          |
| INTEGER                                                 | INTEGER           |
| BIGINT                                                  | BIGINT            |
| DOUBLE PRECISION                                        | DOUBLE            |
| FLOAT                                                   | REAL              |
| REAL(m, d)                                              | REAL(m, d)        |
| DECIMAL(p, s)                                           | DECIMAL(p, s)     |
| CHAR(n)                                                 | CHAR(n)           |
| VARCHAR(n)                                              | VARCHAR(n)        |
| TINYTEXT                                                | VARCHAR(255)      |
| TEXT                                                    | VARCHAR(65535)    |
| MEDIUMTEXT                                              | VARCHAR(16777215) |
| LONGTEXT                                                | VARCHAR           |
| ENUM(n)                                                 | VARCHAR(n)        |
| BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | VARBINARY         |
| JSON                                                    | JSON              |
| DATE                                                    | DATE              |
| TIME(n)                                                 | TIME(n)           |
| DATETIME(n)                                             | TIMESTAMP(n)      |
| TIMESTAMP(n)                                            | TIMESTAMP(n)      |
   
