MySQL
本主题说明如何使用 MySQL 目标连接器配置到 MySQL 目标的连接。MySQL 只能在复制任务中用作目标数据库。在连接到 MySQL 目标之前,您需要在数据库上配置 所需权限。如果您通过 数据移动网关 连接到 MySQL,您还需要按照 驱动程序设置 中的说明安装驱动程序。
有关使用 MySQL 连接器时的限制和注意事项的信息,请参阅 限制和注意事项。
设置连接属性
要配置连接器,请执行以下操作:
-
在连接中,单击创建连接。
-
选择 MySQL 目标连接器,然后提供以下设置:
数据目标
-
数据网关:使用 数据移动网关 时,选择将用于测试到 MySQL 目标的连接的数据网关。这应与用于访问数据源的网关相同。
信息注释- 此字段在 Qlik Talend Cloud Starter 订阅中不可用,因为此订阅层级不支持 数据移动网关。
-
您还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息,请参阅下面的 驱动程序设置。
-
云提供商:根据需要选择以下选项之一:
-
无
- 适用于本地 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 的新模式中。有关控制表的更多信息,请参阅 控制表。
- 最大文件大小 (KB):选择或键入 CSV 文件在加载到 MySQL 目标数据库之前的最大大小(以 KB 为单位)。默认值为 32000 KB。
- 并行加载线程:将数据加载到 MySQL 目标数据库时,增加线程数可能会提高性能。请注意,设置大量线程可能会对数据库性能产生不利影响,因为每个线程都需要一个单独的连接。
内部属性
内部属性用于特殊用例,因此不会在对话框中公开。只有在 Qlik 支持部门的指示下,您才应该使用它们。
使用字段右侧的 和
按钮可以根据需要添加或删除特性。
名称
连接的显示名称。
先决条件
所需权限
必须向连接器设置中指定的用户授予:
- 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 :
-
在 数据移动 网关计算机上,将工作目录更改为:
opt/qlik/gateway/movement/drivers/bin
-
然后运行以下命令:
语法:
./install mysql
如果无法下载 driver(由于访问限制或技术问题),将显示一条消息,为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后,请再次运行 install mysql 命令。
否则,将显示 driver 的 EULA。
-
执行以下选项之一:
- 重复按 [Enter] 可在 EULA 中缓慢滚动。
- 重复按空格键可快速滚动 EULA。
- 按 q 退出许可证文本并显示 EULA 接受选项。
-
执行以下选项之一:
- 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
- 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
-
键入“v”并按 [Enter] 以再次查看 EULA。
将会安装 driver。
更新 driver
如果要在安装提供的 driver 之前卸载以前版本的 driver,请运行 update 命令。
下载并更新 driver:
-
在 数据移动 网关计算机上,将工作目录更改为:
opt/qlik/gateway/movement/drivers/bin
-
然后运行以下命令:
语法:
./update mysql
如果无法下载 driver(由于访问限制或技术问题),将显示一条消息,为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后,请再次运行 update mysql 命令。
否则,将显示 driver 的 EULA。
-
执行以下选项之一:
- 重复按 [Enter] 可在 EULA 中缓慢滚动。
- 重复按空格键可快速滚动 EULA。
- 按 q 退出许可证文本并显示 EULA 接受选项。
-
执行以下选项之一:
- 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
- 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
- 键入“v”并按 [Enter] 可从头开始查看 EULA。
将卸载旧的 driver,并安装新的 driver。
卸载 driver
如果要卸载 driver,请运行 uninstall 命令。
卸载 driver:
-
停止所有配置为使用此连接器的任务。
-
在 数据移动 网关计算机上,将工作目录更改为:
opt/qlik/gateway/movement/drivers/bin
-
然后运行以下命令:
语法:
./uninstall mysql
将卸载 driver。
手动安装驱动程序
只有在自动驱动程序安装未成功完成的情况下,才应尝试手动安装 driver。
安装 数据移动网关 后,下载 mysql-connector-odbc-<版本>.x86_64.rpm 驱动程序。您可以在此路径下面找到受支持版本的直接下载链接:binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/mysql.yaml。下载完成后,将 RPM 复制到 数据移动网关 机器上。
在 数据移动网关 服务器上,打开 shell 提示符并执行以下操作:
-
停止 数据移动网关 服务:
sudo systemctl stop repagent
-
可选择确认服务已停止:
sudo systemctl status repagent
状态应如下所示:
Active: inactive (dead) since <timestamp> ago
- 在 数据移动网关 计算机上安装驱动程序。
-
将工作目录更改为 <数据移动网关_Install_Dir>/bin.
-
将驱动程序位置复制到 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 文件中的驱动程序位置。
-
可选择确认已将驱动程序位置复制:
cat site_arep_login.sh -
确保 /etc/odbcinst.ini 文件包含 MySQL 的条目,如以下示例所示:
[MySQL ODBC 8.0 Unicode Driver]Driver = /usr/lib64/libmyodbc8w.soUsageCount = 1 -
启动 数据移动网关 服务:
sudo systemctl start repagent
-
可选择确认服务已启动:
sudo systemctl status repagent
状态应如下所示:
Active: active (running) since <timestamp> 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 应用程序源时,此错误在运行时发生。使用数据库等其他源类型时,此错误在任务准备期间发生。要解决此限制,请使用以下任一方法:
-
推荐方法:摄取数据后,删除目标上不需要的列。有关如何执行此操作的信息,请参阅 删除列。如果仍然遇到该错误,请删除更多列。
-
替代缓解措施:如果需要将所有源列包含在目标表中,某些 MySQL 数据库配置可以允许这样做。其中之一是增加 MySQL 页面大小,使其足以容纳该行大小。
信息注释对于行大小超过 65,535 字节限制的源,必须将源字段转换为支持更大行大小的数据类型。这是由于最大行记录大小的已知限制。有关详细信息,请参阅 有关行大小限制的 MySQL 文档。
-
数据类型
本机数据类型信息将被保留,并显示在数据集视图的本机数据类型列中。如果列不可见,则需要打开数据集视图的列选择器,然后选择本机数据类型列。
| Qlik Cloud 数据类型 | MySQL 数据类型 |
|---|---|
|
BOOL |
BOOL |
|
BYTES |
如果长度 =>1 且 =< 8095,则为: VARBINARY (Length) 如果长度 =>8096 且 =< 65535,则为: BLOB 如果长度 =>65536 且 =< 16777215,则为: MEDIUMBLOB 如果长度 =>16777216 且 =< 2147483647,则为: LONGBLOB |
|
DATE |
DATE |
|
TIME |
TIME |
|
DATETIME |
如果刻度 => 0 且 =< 6,那么: DECIMAL (p,s) 如果刻度 => 7 且 =< 12,那么: VARCHAR (37) |
|
INT1 |
TINYINT |
|
INT2 |
SMALLINT |
|
INT4 |
INTEGER |
|
INT8 |
BIGINT |
|
NUMERIC |
如果刻度 => 0 且 =< 30,那么: DECIMAL (p,s) 如果刻度 => 31 且 =< 100,那么: VARCHAR (45) |
|
REAL4 |
FLOAT |
|
REAL8 |
DOUBLE |
|
STRING |
如果长度 =>1 且 =< 8095,则为: VARCHAR(长度) 如果长度 =>8096 且 =< 65535,则为: TEXT 如果长度 =>65536 且 =< 16777215,则为: MEDIUMTEXT 如果长度 =>16777216 且 =< 2147483647,则为: LONGTEXT |
|
UINT1 |
UNSIGNED TINYINT |
|
UINT2 |
UNSIGNED SMALLINT |
|
UINT4 |
UNSIGNED INTEGER |
|
UINT8 |
UNSIGNED BIGINT |
|
WSTRING |
如果长度 =>1 且 =< 8095,则为: VARCHAR(长度) 如果长度 =>8096 且 =< 65535,则为: TEXT 如果长度 =>65536 且 =< 16777215,则为: MEDIUMTEXT 如果长度 =>16777216 且 =< 2147483647,则为: LONGTEXT |
|
BLOB |
启用允许无限制 LOB 大小选项时:
启用限制 LOB 大小为选项时:
有关限制 LOB 大小的信息,请参见Metadata。 |
|
NCLOB |
启用允许无限制 LOB 大小选项时:
启用限制 LOB 大小为选项时:
有关限制 LOB 大小的信息,请参见Metadata。 |
|
CLOB |
启用允许无限制 LOB 大小选项时:
启用限制 LOB 大小为选项时:
有关限制 LOB 大小的信息,请参见Metadata。 |