# MySQL

本主題說明如何使用 MySQL 目標連接器設定與 MySQL 目標的連線。MySQL 只能在複寫任務中用作目標資料庫。在連線到 MySQL 目標之前，您需要在資料庫上設定 [必要權限](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Permissi)。如果您透過 資料移動閘道 連線到 MySQL，您還需要安裝驅動程式，如 [驅動程式設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Driver) 中所述。

如需有關使用 MySQL 連接器時的限制和注意事項的資訊，請參閱 [限制和注意事項](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/mysql-target.htm#Limitati)。

## 設定連線屬性

若要設定連接器，請執行下列操作：

1. 在 連線 中，按一下 建立連線。

2. 選取 MySQL 目標連接器，然後提供下列設定：

### 資料目標

* 資料閘道：使用 資料移動閘道 時，選取將用於測試與 MySQL 目標連線的資料閘道。這應該與用於存取資料來源的閘道相同。

  資訊備註

  * 此欄位不適用於 Qlik Talend Cloud 啟動器 訂閱，因為此訂閱層級不支援 資料移動閘道。

  * 您還需要在 資料移動閘道 機器上安裝適當的驅動程式。如需詳細資訊，請參閱下方的 [驅動程式設定](https://help.qlik.com/zh-TW/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-TW/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 或更高版本安裝於 Data Movement 閘道伺服器。

  Python 會預先安裝在大部分的 Linux 發行版。您可以執行下列命令，以查看哪個 Python 版本安裝在您的系統上：

  python3 --version

安裝 driver

若要下載並安裝 driver：

1. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

2. 執行下列命令：

   語法：

   ./install mysql

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 install mysql 命令。

   否則，就會顯示 driver 的 EULA。

3. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

4. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。

   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。

   * 輸入「v」並按下 [Enter] 以再次檢視 EULA。

   將會安裝 driver。

更新 driver

若您想要在安裝提供的 driver 之前解除安裝先前的 driver 版本，請執行更新命令。

若要下載並更新 driver：

1. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

2. 執行下列命令：

   語法：

   ./update mysql

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 update mysql 命令。

   否則，就會顯示 driver 的 EULA。

3. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

4. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。
   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。
   * 輸入「v」並按下 [Enter] 以從頭檢閱 EULA。

   將會解除安裝舊版 driver，並安裝新版 driver。

解除安裝 driver

若您想要解除安裝 driver，請執行解除安裝命令。

若要解除安裝 driver：

1. 停止設定為使用此連接器的所有任務。

2. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

3. 執行下列命令：

   語法：

   ./uninstall mysql

   將會解除安裝 driver。

### 手動安裝驅動程式

只有在自動驅動程式安裝無法成功完成時，才能嘗試手動安裝 driver。

安裝 資料移動閘道 後，下載 mysql-connector-odbc-&lt;version&gt;.x86\_64.rpm 驅動程式。您可以在 /opt/qlik/gateway/movement/drivers/manifests/mysql.yaml 的 binary-artifacts 之下找到支援版本的直接下載連結。下載完成後，將 RPM 複製到 資料移動閘道 機器。

在 Data Movement gateway 伺服器上，開啟 shell prompt 並進行以下項目：

1. 停止 Data Movement gateway 服務：

   sudo systemctl stop repagent

2. 可自選，確認服務已停止：

   sudo systemctl status repagent

   狀態應如下所示：

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

3. 將驅動程式安裝在 Data Movement gateway 機器。

4. 變更任務目錄至 &lt;Data Movement gateway-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. 開始 Data Movement gateway 服務：

   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-TW/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 |
| 位元組 | 若長度為 =&gt; 1 且 =&lt; 8095，則：<br><br>VARBINARY (長度)<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 |
| 日期 | 日期 |
| 時間 | 時間 |
| 日期時間 | 若刻度為 =&gt; 0 且 =&lt; 6，則：<br><br>小數點 (p,s)<br><br>若刻度為 =&gt; 7 且 =&lt; 12，則：<br><br>VARCHAR (37) |
| INT1 | TINYINT |
| INT2 | SMALLINT |
| INT4 | 整數 |
| INT8 | BIGINT |
| 數字 | 若刻度為 =&gt; 0 且 =&lt; 30，則：<br><br>小數點 (p,s)<br><br>若刻度為 =&gt; 31 且 =&lt; 100，則：<br><br>VARCHAR (45) |
| REAL4 | 浮動 |
| REAL8 | 雙重 |
| 字串 | 若長度為 =&gt; 1 且 =&lt; 8095，則：<br><br>VARCHAR (長度)<br><br>若長度為 =&gt; 8096 且 =&lt; 65535，則：<br><br>文字<br><br>若長度為 =&gt; 65536 且 =&lt; 16777215，則：<br><br>MEDIUMTEXT<br><br>若長度為 =&gt; 16777216 且 =&lt; 2147483647，則：<br><br>LONGTEXT |
| UINT1 | 未簽署 TINYINT |
| UINT2 | 未簽署 SMALLINT |
| UINT4 | 未簽署整數 |
| UINT8 | 未簽署 BIGINT |
| WSTRING | 若長度為 =&gt; 1 且 =&lt; 8095，則：<br><br>VARCHAR (長度)<br><br>若長度為 =&gt; 8096 且 =&lt; 65535，則：<br><br>文字<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-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |
| NCLOB | 若啟用允許無限 LOB 大小選項：<br><br><ul> <li>文字</li> </ul><br><br>若啟用限制 LOB 大小為選項：<br><br><ul> <li> <p>若指定的值為 63 KB 或更小，則：</p> <p>文字</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-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |
| CLOB | 若啟用允許無限 LOB 大小選項：<br><br><ul> <li>文字字元集 UTF-16</li> </ul><br><br>若啟用限制 LOB 大小為選項：<br><br><ul> <li> <p>若指定的值為 63 KB 或更小，則：</p> <p>文字字元集 UTF-16</p> </li> </ul><br><br><ul> <li> <p>若指定的值為 64 KB 或更大，則：</p> <p>LONGTEXT 字元集 UTF-16</p> </li> </ul><br><br>如需更多關於限制 LOB 大小的資訊，請參閱 [Metadata](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings-metadata.htm#ar_tasks_custom_1624443382_1693100)。 |