MySQL
本主题介绍如何使用 MySQL 目标连接器配置与 MySQL 目标的连接。MySQL 只能在复制任务中用作目标数据库。在连接到 MySQL 目标之前,您需要在数据库上配置 所需的权限。如果您通过 数据移动网关 连接到MySQL,还需要安装驱动程序设置中所述的驱动程序。
有关使用 MySQL 连接器时的限制和注意事项的信息,请参阅限制和考虑事项。
设置连接属性
要配置连接器,请执行以下操作:
-
在连接中单击创建连接。
-
选择 MySQL 目标连接器,然后提供以下设置:
数据目标
-
数据网关:当使用 数据移动网关时,选择将用于测试与 MySQL 目标的连接的数据网关。这应该是用于访问数据源的同一网关。
信息注释- 此字段不适用于 Qlik Talend Cloud 启动器 订阅,因为此订阅层不支持 数据移动网关。
-
您还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息,请参阅下文的驱动程序设置。
-
云提供者:根据需要选择以下项之一:
-
无
- 对于 MySQL 内部部署、MariaDB、Amazon Aurora 或 Microsoft Azure Database for MySQL - Flexible Server。
- 当不使用 数据移动网关 时
-
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 数据库的用户的用户名和密码。
数据库属性
- 目标数据库类型:选择以下项之一:
- 特定数据库:选择此选项后,所有源架构都将加载到指定的数据库中。
- 多个数据库:选择此选项后,每个源模式都将加载到其相应的数据库中。此外,默认情况下,所有控制表都将复制到一个名为 attrep_control 的新模式中。有关控制表的更多信息,请参阅控制表。
- 最大文件大小 (KB):在将 CSV 文件加载到 MySQL 目标数据库之前,选择或键入其最大大小(以 KB 为单位)。默认值为 32000 KB。
- 平行加载线程:当将数据加载到 MySQL 目标数据库时,增加线程数量可能会提高性能。请注意,设置大量线程可能会对数据库性能产生不利影响,因为每个线程都需要单独的连接。
内部属性
内部属性用于特殊用例,因此不会在对话框中公开。只有在 Qlik 支持部门的指示下,您才应该使用它们。
使用字段右侧的 和 按钮可以根据需要添加或删除特性。
名称
连接的显示名称。
先决条件
所需的权限
必须授予连接器设置中指定的用户:
- MySQL 帐户访问权限
- MySQL 数据库中的读/写权限
- 复制中涉及的每个目标模式的以下权限:
- ALTER
- 创建
- 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.so
UsageCount = 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.
-
由于 MySQL 5.7 的一个问题(已在 8.0 版本中解决),当满负载使用 CSV 文件时,无法将多字节字符插入 TEXT 列。因此,如果目标端点是 MySQL 5.7,并且复制的表包含具有 UTF-8 多字节字符的 TEXT 列,则目标表可能为空。
解决方法:
在连接器设置中,将 loadUsingCSV 内部参数设置为 FALSE。请注意,这可能会影响性能。
-
如果需要复制 4 字节表情符号字符,则必须将目标模式字符集设置为 utf8mb4。
数据类型
本机数据类型信息将被保留,并显示在数据集视图的本机数据类型列中。如果列不可见,则需要打开数据集视图的列选择器,然后选择本机数据类型列。
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。 |