Navicat 部落格

2018 年 1 月 9 日,由 Robert Gravelle 撰寫

與同步(使兩個資料庫的結構描述和資料同步的一次性程序)不同,複寫是一個連續(自動)在兩個資料庫之間複製資料的程序(儘管結構描述更新也是可能的)。複寫可以非同步地完成,因此不需要永久連接兩個資料庫,或者可以在非高峰時間,資料庫伺服器少流量時進行,例如在深夜時間。

複寫的主要作用是建立所有使用者資料庫的合併儲存庫和/或在所有使用者之間傳播相同層級的資訊。在任何一種情況下,結果資料庫都是一個分散式資料庫,使用者可以在其中存取與其工作相關的資料,而不會干擾其他人的工作。資料庫複寫稱為正規化,為了消除使用者之間的資料模稜兩可或不一致的情況。

在 Database Synchronization Strategies(資料庫同步策略)白皮書中,我們使用 Navicat Premium 資料庫管理系統探索了同步兩個相同和不同類型的資料庫的策略。在今天的文章中,我們將介紹如何使用 Navicat Premium 的新「自動執行」工具自動執行資料庫複寫。

複寫類型

資料庫複寫有至少三種不同的方式:

  • 快照式複寫:一部伺服器上的資料複製至同一部或到不同伺服器上的另一個資料庫。
  • 合併式複寫:將來自兩個或多個資料庫的資料合併到一個資料庫中。
  • 異動複寫:使用者收到資料庫的完整初始複本,然後在資料變更時接收定期更新。

在分散式資料庫管理系統(DDBMS)中,變更、加入和刪除一個位置的資料會自動反映在儲存在所有其他位置的資料中。這樣做可確保每個使用者存取的資料集與所有其他使用者相同。

與同步一樣,複寫可以是同質的也可以是異質的:

  • 同質:相同的來源和目標資料庫,即 Percona 到 Percona,MariaDB 到 MariaDB,MySQL 到 MySQL。
  • 異質:不同的來源和目標資料庫,即 Oracle 到 Microsoft SQL Server,PostgreSQL 到 Amazon DynamoDB,MySQL 到 Amazon Aurora。

當一個或多個外部業務夥伴使用與我們自己不同的資料庫類型的情況出現時,就需要使用異質複寫。兩種環境之間的自動定期資料複寫通常是這種按排的不可或缺的部分。

Navicat Premium 的自動執行工具

Navicat Premium 的新自動執行工具在版本 12 中引入,具有易於使用且直覺的介面,可用於建立自動的批次作業。就像 Windows 工作排程器一樣,自動執行是在一個或多個固定間隔期執行一個程序,並可在特定日期和時間開始和結束。除了複寫之外,它還可用於各種工作,包括備份、查詢和報表。

圖 1:Windows 中的 Navicat Premium 12 自動執行工具

圖 2:macOS 中的 Navicat Premium 12 自動執行工具

使用者資料庫

我們將使用 Sakila 範例 MySQL 資料庫作為我們的使用者資料庫。它由 MySQL AB 文件團隊的前成員 Mike Hillyer 開發,專門用於提供用於書籍、教學、文章等的標準結構描述。

該資料庫以電影業為主題,涵蓋了演員和電影製片廠以至影碟出租店的所有內容。如果你有興趣,可以在 MySQL Dev 網站上檢視完整的結構描述。

如需使用 Navicat 設定 Sakila 資料庫的說明,請參閱 databasejournal.com 上的 Generating Reports on MySQL Data(產生 MySQL 資料的報表)一文。


Navicat Premium 12 中的 Sakila MySQL 資料庫結構

快照式複寫

如上所述,快照式複寫透過將資料從一個資料庫複製到同一部或不同伺服器上的另一個資料庫,使兩個資料庫同步。這是三種類型中最簡單的一種。

建立資料同步工作

首先必須建立資料同步設定檔,以便自動執行複寫程序。在 Database Synchronization Strategies 白皮書中描述了在 Navicat Premium 12 中實行同質和異質同步的步驟。出於本教學的目的,我們將在 sakila 和 sakila2 資料庫之間進行同質同步作為第一個範例。

提示:建立 sakila 資料庫後,可以在導覽窗格中的連線上按一下滑鼠右鍵並選取「新增資料庫」來建立 sakila2 資料庫。然後在彈出窗口中輸入資料庫名稱(「sakila2」)。

開啟資料同步精靈:

  • 從功能表列中選擇「工具」->「資料同步」
  • 資料同步的「選項」索引標籤只有幾個比對選項的核取方塊。我們可以保留原樣:
  • 資料同步精靈的下一步是對應資料表。可以透過下拉式清單選取目標資料表。在此例子中,我們不需要提供任何對應指令,因為兩個資料庫中的資料表是相同的:
  • 比對資料後,視窗顯示將在目標資料表中插入、更新或刪除的記錄數目。如果你不想包含具有相同資料的資料表或具有不同結構的資料表(即換句話說,不會更新的資料表),則可以取消勾選「顯示相同的資料表和其他」選項。還有一些核取方塊可取消選取資料表或你不希望套用於目標的操作。

    在清單中選取一個資料表將在底部窗格顯示來源資料表和目標資料表的資料。來源和目標之間不同的值會突顯。與在頂部窗格中一樣,你可以取消勾選你不想套用於目標的記錄。

「不同」選項

可以從下拉式清單中選取要顯示的差異類型。以下是可用的選項:

  • 不同:顯示來源資料表和目標資料表中所有不同的記錄。
  • 插入:僅顯示目標資料表中不存在的記錄。
  • 更新:僅顯示來源資料表和目標資料表中存在但具有不同值的記錄。
  • 刪除:僅顯示來源資料表中不存在的記錄。
  • 相同:顯示來源資料表和目標資料表中存在並具有相同值的記錄。
  • 全部列:顯示來源資料表和目標資料表中的所有記錄。

在我們的例子中,選取「更新」或「相同」將顯示零行,因為沒有要更新的列(僅插入)而且沒有相同的列:

和之前一樣,按一下「部署」按鈕會產生並顯示「部署指令碼」:

此畫面與之前的畫面一樣,都有「儲存設定檔」按鈕,可讓你儲存設定以供將來使用。此特定畫面還有一個用於儲存「部署指令碼」的按鈕。

你仍可以「重新比對」這兩個資料庫,或繼續「執行」部署指令碼。這裡有一個「遇到錯誤時繼續」核取方塊。當勾選了這個方塊,在遇到錯誤時部署不會停止。

在指令碼執行時,你可以在「訊息記錄」中檢視其進度。它顯示已處理的記錄數目和已完成的百分比:

關閉對話方塊後,我們可以確認 sakila2 資料庫的資料表中有資料:


不要忘記儲存設定檔,因為批次作業將使用它。

建立批次作業

我們現在將使用 Navicat 的自動執行工具設定在 sakila 和 sakila2 資料庫之間的週期性複寫。

  • 首先,按一下主要工具列中的「自動執行」按鈕。
  • 然後按一下「物件」工具列中的「新增批次作業」以開啟新增批次作業索引標籤。
  • 在「物件」窗格中瀏覽來源連線、資料庫和/或結構描述。該資料庫的已儲存的工作會顯示在底部的「可用的工作」窗格中。
    在「可用的工作」窗格中,選取「資料同步」工作類型,然後按兩下或拖動工作將它從「可用的工作」清單移動到上面的「已選取的工作」清單中。(你可以以相同的方式從「已選取的工作」清單中刪除工作。)
  • 按一下自動執行工具列上的「儲存」按鈕,並在「儲存」對話方塊中提供描述性名稱。

這將啟用「設定工作排程」和「刪除工作排程」按鈕。

「一般」索引標籤

在「排程工作」對話方塊的「一般」索引標籤中,你可以提供該工作的說明。此索引標籤更提供多個執行選項。

  • 在「安全性選項」方塊中,你可以配置要在其下執行工作的使用者或群組帳號。有一個選項是無論使用者是否登入都會執行工作。如果選擇該選項,你需要在儲存排程時,在「Windows 工作排程器」中提供作業系統使用者的密碼。
  • 你還可以選擇將工作作為「隱藏」執行,並將其配置為在特定作業系統上執行。

觸發工作

「觸發器」索引標籤列出了工作的排程。可以將工作配置為以各種排程執行,包括一次、每天、每週、每月,以及每種排程的任何排列。

按一下「新增...」按鈕以顯示「新增觸發器」對話方塊:

相同的工作可以根據多個排程執行。例如,我們可以安排在每個月的第一天以及每個第二個星期日執行我們的資料庫同步工作:

設定電子郵件通知

Navicat 讓你產生並傳送具有排程傳回的結果的個人電子郵件。結果可以傳送到多個收件者。在「進階」索引標籤中勾選「傳送郵件」選項並輸入所需的資訊。

寄件者

指定寄件者的電子郵件地址。例如:「Email住址會使用灌水程式保護機制。你需要啟動Javascript才能觀看它。」

收件者, 副本

指定每一個收件者的電子郵件地址,以逗號或分號 (;) 分隔。

主旨

以自訂格式指定電子郵件的主旨。

主體

填寫電子郵件的內容。

主機 (SMTP 伺服器)

為出去的訊息輸入簡單郵件傳輸協定(SMTP)伺服器。

輸入連線出去的電子郵件(SMTP)伺服器的埠號。

使用驗證

如果你的 SMTP 伺服器需要驗證以傳送電子郵件,可勾選這個選項,並輸入「使用者名稱」和「密碼」。

安全連線

指定連線使用「TLS」、「SSL」安全連線或「永不」。

傳送測試郵件

Navicat 將會傳送一個測試郵件給你顯示是成功或失敗。

完成自動工作的配置後,可以按一下「自動執行」工具列中的「開始」按鈕進行測試。

合併式複寫

顧名思義,合併式複寫將來自兩個或多個資料庫的資料組合到一個資料庫中。作為練習,我們將 sakila 和 sakla2 資料庫的內容合併到名為「sakila_merged」的第三個資料庫中,該資料庫將儲存合併的資料集。

所需的資料同步工作

合併複寫工作將要求我們建立並儲存兩個資料同步設定檔:每個來源資料庫一個。這些步驟與上面的「建立資料同步工作」部分完全相同,因此我們在此不再重複了。

建立批次作業

批次作業可能由來源資料庫或目標資料庫觸發,就像我們在上一節「快照式複寫」中所做的那樣。但是,通常從目標資料庫觸發批次作業是最容易的,因為它們將處於同一伺服器上。我們也會這樣做。

  • 按一下主要工具列中的「自動執行」按鈕。
  • 然後,按一下「物件」工具列中的「新增批次作業」以開啟新的批次作業索引標籤。
  • 在「物件」窗格中瀏覽來源連線、資料庫和/或結構描述。該資料庫的已儲存的工作會顯示在底部的「可用的工作」窗格中。
  • 在「可用的工作」窗格中,選取「資料同步」工作類型,然後按兩下或拖動工作將它從「可用的工作」清單移動到上面的「已選取的工作」清單中。
  • 按一下自動執行工具列上的「儲存」按鈕,並在「儲存」對話方塊中提供描述性名稱。這將啟用「設定工作排程」和「刪除工作排程」按鈕。
  • 在「排程工作」對話方塊的「一般」索引標籤中,你可以提供該工作的說明。此索引標籤更提供多個執行選項。
  • 在「觸發器」索引標籤中,工作可以配置為以各種排程執行,包括一次、每天、每週、每月以及每種排程的任何排列。這次將執行兩個工作而不是一個。
  • 完成自動工作的配置後,可以按一下「自動執行」工具列中的「開始」按鈕進行測試。

異動複寫

在「合併式複寫」中,只有合併的資料庫包含所有最新資料。而每個來源資料庫僅包含基準資料,以及自首次填入以來插入的內容。在異動複寫中,使用者會收到資料庫的完整初始複本,然後在資料變更時接收定期更新,以便所有資料庫都使用相同的資料集。保持多個資料庫同步使異動複寫成為最複雜的複寫類型。

所需的資料同步工作

使用異動複寫所需的資料同步工作數量會大幅增加,因為必須橫跨所有使用者資料庫複製資料。例如,假設我們有三個名為 sakila、sakila2 和 sakila3 的資料庫。我們可以使用總共六個資料同步工作在所有使用者資料庫中合併和傳播完整資料集:有三個用於合併使用者資料庫,另外三個使用合併資料集更新它們。

這是包含所有六個工作的自動執行精靈:

為了有足夠的時間完成資料合併,最好將工作分成兩部分,第一部分為合併資料,第二部分在指定的延遲時間後用完整的資料集更新使用者資料庫。

以下是將合併資料集傳播到使用者資料庫的自動執行工作的例子:

在執行第一次工作的兩個小時後執行這工作應該有足夠的時間來完成合併。因此,如果第一次工作排程在午夜執行,我們會將此工作設定為凌晨 2 點開始:

總結

在 Database Synchronization Strategies 白皮書的後續內容中,我們介紹了如何使用 Navicat Premium 12 的自動執行工具自動執行資料庫複寫。與它的同步工具結合使用,DBA 能設定預先定義的排程,自動執行各種類型的複寫。

如需 Navicat Premium 12 的詳細資訊,請瀏覽 產品頁面

Navicat 文章
頻道記錄
分享
部落格封存檔