# MySQL

本主题说明如何使用 MySQL 目标连接器配置到 MySQL 目标的连接。MySQL 只能在复制任务中用作目标数据库。在连接到 MySQL 目标之前，您需要在数据库上配置 [所需权限](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Permissi)。如果您通过 数据移动网关 连接到 MySQL，您还需要按照 [驱动程序设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Driver) 中的说明安装驱动程序。

有关使用 MySQL 连接器时的限制和注意事项的信息，请参阅 [限制和注意事项](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Limitati)。

## 设置连接属性

要配置连接器，请执行以下操作：

1. 在连接中，单击创建连接。

2. 选择 MySQL 目标连接器，然后提供以下设置：

### 数据目标

* 数据网关：使用 数据移动网关 时，选择将用于测试到 MySQL 目标的连接的数据网关。这应与用于访问数据源的网关相同。

  信息注释

  * 此字段在 Qlik Talend Cloud Starter 订阅中不可用，因为此订阅层级不支持 数据移动网关。

  * 您还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息，请参阅下面的 [驱动程序设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Driver)。

* 云提供商：根据需要选择以下选项之一：

  * 无

    * 适用于本地 MySQL、MariaDB、Amazon Aurora 或 Microsoft Azure Database for MySQL - 灵活服务器。
    * 在不使用 数据移动网关 的情况下工作时

  * Amazon RDS

    适用于 Amazon RDS for MariaDB 或 Amazon RDS for MySQL。

  * Google Cloud

    适用于 Google Cloud SQL for MySQL。

  * Microsoft Azure

    适用于 Microsoft Azure Database for MySQL。

* 服务器：安装了 MySQL 数据库的计算机的主机名或 IP 地址。

* 端口：连接到数据库时使用的端口。默认值为 3306。

### 帐户属性

用户名和密码：授权访问 MySQL Server 数据库的用户的用户名和密码。

### 数据库属性

* 目标数据库类型：选择以下选项之一：
  * 特定数据库：选择此选项时，所有源模式都将加载到指定的数据库中。
  * 多个数据库：选择此选项时，每个源模式都将加载到其相应的数据库中。此外，默认情况下，所有控制表都将复制到名为 attrep\_control 的新模式中。有关控制表的更多信息，请参阅 [控制表](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/control_tables.htm)。
* 最大文件大小 (KB)：选择或键入 CSV 文件在加载到 MySQL 目标数据库之前的最大大小（以 KB 为单位）。默认值为 32000 KB。
* 并行加载线程：将数据加载到 MySQL 目标数据库时，增加线程数可能会提高性能。请注意，设置大量线程可能会对数据库性能产生不利影响，因为每个线程都需要一个单独的连接。

### 内部属性

内部属性用于特殊用例，因此不会在对话框中公开。只有在 Qlik 支持部门的指示下，您才应该使用它们。

使用字段右侧的 the 新建 icon 和 the 取消 icon 按钮可以根据需要添加或删除特性。

### 名称

连接的显示名称。

## 先决条件

### 所需权限

必须向连接器设置中指定的用户授予：

* MySQL 帐户访问权限
* MySQL 数据库中的读/写权限
* 复制中涉及的每个目标模式的以下权限：
  * ALTER
  * CREATE
  * CREATE TEMPORARY TABLES
  * DELETE
  * DROP
  * INSERT
  * SELECT
  * UPDATE

### 驱动程序设置

本部分介绍如何安装所需的 driver。这个过程包括运行一个脚本，该脚本将自动下载、安装和配置所需的 driver。您还可以根据需要运行脚本来更新和卸载 driver。

准备安装

* 请确保在 数据移动 网关服务器上安装了 Python 3.6 或更高版本。

  Python 预装在大多数 Linux 发行版上。您可以通过运行以下命令来检查系统上安装了哪个 Python 版本。

  python3 --version

安装 driver

下载并安装 driver ：

1. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

2. 然后运行以下命令：

   语法：

   ./install mysql

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 install mysql 命令。

   否则，将显示 driver 的 EULA。

3. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

4. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。

   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。

   * 键入“v”并按 [Enter] 以再次查看 EULA。

   将会安装 driver。

更新 driver

如果要在安装提供的 driver 之前卸载以前版本的 driver，请运行 update 命令。

下载并更新 driver：

1. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

2. 然后运行以下命令：

   语法：

   ./update mysql

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 update mysql 命令。

   否则，将显示 driver 的 EULA。

3. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

4. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
   * 键入“v”并按 [Enter] 可从头开始查看 EULA。

   将卸载旧的 driver，并安装新的 driver。

卸载 driver

如果要卸载 driver，请运行 uninstall 命令。

卸载 driver：

1. 停止所有配置为使用此连接器的任务。

2. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

3. 然后运行以下命令：

   语法：

   ./uninstall mysql

   将卸载 driver。

### 手动安装驱动程序

只有在自动驱动程序安装未成功完成的情况下，才应尝试手动安装 driver。

安装 数据移动网关 后，下载 mysql-connector-odbc-&lt;版本&gt;.x86\_64.rpm 驱动程序。您可以在此路径下面找到受支持版本的直接下载链接：binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/mysql.yaml。下载完成后，将 RPM 复制到 数据移动网关 机器上。

在 数据移动网关 服务器上，打开 shell 提示符并执行以下操作：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动网关 计算机上安装驱动程序。

4. 将工作目录更改为 &lt;数据移动网关\_Install\_Dir&gt;/bin.

5. 将驱动程序位置复制到 `site_arep_login.sh` 文件：

   `echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/lib64" >> site_arep_login.sh`

   这将把驱动程序添加到 "LD\_LIBRARY\_PATH" 并更新 site\_arep\_login.sh 文件中的驱动程序位置。

6. 可选择确认已将驱动程序位置复制：

   ```
   cat site_arep_login.sh
                           
   ```

7. 确保 /etc/odbcinst.ini 文件包含 MySQL 的条目，如以下示例所示：

   ` [MySQL ODBC 8.0 Unicode Driver]
                            ` ` Driver   = /usr/lib64/libmyodbc8w.so
                            ` ` UsageCount  = 1
                            `

8. 启动 数据移动网关 服务：

   sudo systemctl start repagent

9. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

## 限制和注意事项

将 MySQL 用作复制目标时，适用以下限制：

* 复制到 MariaDB 目标数据库时，如果 DATETIME 值设置为零，则需要定义一个将 DATETIME 替换为有效值的转换。例如：

  `replace($datetime_column,'9999-12-31 23:59:59','2000-01-01 22:00:00')`

  信息注释此限制不适用于 Microsoft Azure Database for MySQL。

* 由于 MySQL 的运行方式，在全量加载任务期间将数据加载到 MySQL 目标时，重复键错误将不会报告到日志中。

* 将列的值更新为其现有值时，MySQL 将返回受影响的行数为零（这与执行一行更新的 Oracle 和 Microsoft SQL Server 不同）。

  这会在 `attrep_apply_exceptions Control Table` 中生成一个条目，并显示以下警告：

  ` Some changes from the source database had no impact when applied to the target database. See attrep_apply_exceptions table for details.  `

* 如果需要复制 4 字节的表情符号字符，则必须将目标架构字符集设置为 utf8mb4。

* 当源表包含大量列时，MySQL 可能会返回 `Row size too large (> 8126)` 错误，因为 8126 字节是 MySQL 中的默认最大行大小。使用 SaaS 应用程序源时，此错误在运行时发生。使用数据库等其他源类型时，此错误在任务准备期间发生。要解决此限制，请使用以下任一方法：

  * **推荐方法：**摄取数据后，删除目标上不需要的列。有关如何执行此操作的信息，请参阅 [删除列](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Managing-datasets.htm#Removing)。如果仍然遇到该错误，请删除更多列。

  * **替代缓解措施：**如果需要将所有源列包含在目标表中，某些 MySQL 数据库配置可以允许这样做。其中之一是增加 MySQL 页面大小，使其足以容纳该行大小。

    信息注释对于行大小超过 65,535 字节限制的源，必须将源字段转换为支持更大行大小的数据类型。这是由于最大行记录大小的已知限制。有关详细信息，请参阅 [有关行大小限制的 MySQL 文档](https://dev.mysql.com/doc/refman/8.4/en/column-count-limit.html)。

## 数据类型

本机数据类型信息将被保留，并显示在数据集视图的本机数据类型列中。如果列不可见，则需要打开数据集视图的列选择器，然后选择本机数据类型列。

支持的数据类型

| Qlik Cloud 数据类型 | MySQL 数据类型 |
| --- | --- |
| BOOL | BOOL |
| BYTES | 如果长度 =&gt;1 且 =&lt; 8095，则为：<br><br>VARBINARY (Length)<br><br>如果长度 =&gt;8096 且 =&lt; 65535，则为：<br><br>BLOB<br><br>如果长度 =&gt;65536 且 =&lt; 16777215，则为：<br><br>MEDIUMBLOB<br><br>如果长度 =&gt;16777216 且 =&lt; 2147483647，则为：<br><br>LONGBLOB |
| DATE | DATE |
| TIME | TIME |
| DATETIME | 如果刻度 =&gt; 0 且 =&lt; 6，那么：<br><br>DECIMAL (p,s)<br><br>如果刻度 =&gt; 7 且 =&lt; 12，那么：<br><br>VARCHAR (37) |
| INT1 | TINYINT |
| INT2 | SMALLINT |
| INT4 | INTEGER |
| INT8 | BIGINT |
| NUMERIC | 如果刻度 =&gt; 0 且 =&lt; 30，那么：<br><br>DECIMAL (p,s)<br><br>如果刻度 =&gt; 31 且 =&lt; 100，那么：<br><br>VARCHAR (45) |
| REAL4 | FLOAT |
| REAL8 | DOUBLE |
| STRING | 如果长度 =&gt;1 且 =&lt; 8095，则为：<br><br>VARCHAR（长度）<br><br>如果长度 =&gt;8096 且 =&lt; 65535，则为：<br><br>TEXT<br><br>如果长度 =&gt;65536 且 =&lt; 16777215，则为：<br><br>MEDIUMTEXT<br><br>如果长度 =&gt;16777216 且 =&lt; 2147483647，则为：<br><br>LONGTEXT |
| UINT1 | UNSIGNED TINYINT |
| UINT2 | UNSIGNED SMALLINT |
| UINT4 | UNSIGNED INTEGER |
| UINT8 | UNSIGNED BIGINT |
| WSTRING | 如果长度 =&gt;1 且 =&lt; 8095，则为：<br><br>VARCHAR（长度）<br><br>如果长度 =&gt;8096 且 =&lt; 65535，则为：<br><br>TEXT<br><br>如果长度 =&gt;65536 且 =&lt; 16777215，则为：<br><br>MEDIUMTEXT<br><br>如果长度 =&gt;16777216 且 =&lt; 2147483647，则为：<br><br>LONGTEXT |
| BLOB | 启用允许无限制 LOB 大小选项时：<br><br><ul> <li>LONGBLOB</li> </ul><br><br>启用限制 LOB 大小为选项时：<br><br><ul> <li> <p>如果指定的值为 63 KB 或更小，则为：</p> <p>BLOB</p> </li> </ul><br><br><ul> <li> <p>如果指定的值为 64 KB 或更大，则为：</p> <p>LONGBLOB</p> </li> </ul><br><br>有关限制 LOB 大小的信息，请参见[Metadata](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |
| NCLOB | 启用允许无限制 LOB 大小选项时：<br><br><ul> <li>TEXT</li> </ul><br><br>启用限制 LOB 大小为选项时：<br><br><ul> <li> <p>如果指定的值为 63 KB 或更小，则为：</p> <p>TEXT</p> </li> </ul><br><br><ul> <li> <p>如果指定的值为 64 KB 或更大，则为：</p> <p>LONGTEXT</p> </li> </ul><br><br>有关限制 LOB 大小的信息，请参见[Metadata](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |
| CLOB | 启用允许无限制 LOB 大小选项时：<br><br><ul> <li>TEXT CHARACTER SET UTF-16</li> </ul><br><br>启用限制 LOB 大小为选项时：<br><br><ul> <li> <p>如果指定的值为 63 KB 或更小，则为：</p> <p>TEXT CHARACTER SET UTF-16</p> </li> </ul><br><br><ul> <li> <p>如果指定的值为 64 KB 或更大，则为：</p> <p>LONGTEXT CHARACTER SET UTF-16</p> </li> </ul><br><br>有关限制 LOB 大小的信息，请参见[Metadata](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |