返回部落格

在 Ubuntu 上設定 MySQL 複製

在 Ubuntu 上設定 MySQL 複製

MySQL 複製 是一個有趣的功能,允許使用者管理一個或多個 MySQL 資料庫的多個複本。資料會自動從 來源 複製到 副本 資料庫。這在許多情況下都很有用,例如在不影響主資料庫的情況下處理資料、進行資料備份或擴展資料庫存取等。

在本指南中,我們將逐步介紹在一台伺服器上設定 MySQL 執行個體作為來源資料庫,然後在另一台伺服器上設定 MySQL 執行個體以作為其副本的步驟.

先決條件

本指南將示範一個非常簡單的 MySQL 複製範例。它涉及一個 來源 和一個 副本 資料庫。該 來源 資料庫是資料庫的主要複本,而 副本 資料庫將是 來源 資料庫的複本。在我們的示範中,兩台伺服器配置了以下 IP 地址:

  • 來源伺服器:31.171.240.179
  • 副本伺服器:31.171.250.139

每台伺服器都配置了最新的 Ubuntu 20.04 server 配置。首先,請按照教學中的步驟,該教學展示了 如何設定您的 Ubuntu 伺服器。請注意,副本資料庫的數量可以更多。本指南假設您已經安裝並配置了 MySQL。需要安裝 MySQL 的協助嗎?本指南深入示範了 MySQL 安裝與基本使用方法.

簡而言之,以下是您需要的套件:

兩台系統上的防火牆都應配置為允許來自兩台系統在連接埠 3306 上的流量。這是 MySQL 的預設連接埠。您可以從我們的部落格文章中了解更多關於 UFW 基本概念與示範 的資訊。

來源資料庫配置

  • 微調 MySQL 配置

MySQL 使用 my.cnf 作為主要配置檔案。我們將更新 my.cnf 以將該伺服器指定為 來源。首先,使用文字編輯器開啟配置檔案:

然後,在 mysqld 區段下新增以下行:

Replication in MySQL 4

這些行是什麼意思?

  • bind-address: 這是定義服務與 IP 地址之間關聯的項目。預設情況下,該值可能是 127.0.0.1 (localhost)。新值將是伺服器的 IP 地址。
  • server-id: 在 MySQL 複製中,每台伺服器都必須有一個唯一的伺服器 ID。它可以是任何數字。為了簡單起見,它被設置為 1.
  • log_bin: 它儲存複製的實際詳細資訊。副本資料庫將複製日誌中記錄的所有內容。
  • binlog_do_db: 此項目指定將在副本伺服器上進行複製的資料庫。可以有多個資料庫。在這裡,範例資料庫是 newdatabase.

進行變更後,儲存配置檔案。MySQL 需要重新啟動才能將變更載入到 my.cnf:

  • 授予副本使用者權限

下一步是建立副本使用者並授予適當的權限。這需要從 MySQL shell 中進行。首先,啟動 MySQL shell:

接下來,為副本資料庫建立一個專用使用者。請適當變更使用者名稱和密碼:

現在,向該使用者授予適當的權限:

您可以從我們的部落格文章中了解更多關於 MySQL 使用者與權限 的資訊。接下來,重新載入授權表以使變更生效:

FLUSH PRIVILEGES

  • 微調資料庫

我們需要在副本上複製一份來源資料庫。手動建立結構是可行的。然而,在大多數情況下,這相當不便。這就是為什麼直接匯出資料庫是最理想的解決方案。在此範例中,來源資料庫是 newdatabase。變更目前的資料庫:

以下指令將鎖定資料庫,以防止任何新的變更:

然後,檢查資料庫狀態:

Replication in MySQL 3

從這個位置開始,副本資料庫將開始從來源進行複製。這些數字稍後會很有用,因此請將它們記錄下來。如果從同一個視窗進行任何變更,MySQL 將會自動解鎖資料庫。因此,建議在不同的終端機分頁或視窗中執行以下步驟。資料庫目前仍處於鎖定狀態。將其匯出為可攜式 SQL 檔案:

任務現已完成。接下來,解鎖資料庫:

最後,退出 shell:

副本設定

現在是設定副本資料庫的時候了。

  • 匯入來源資料庫

我們需要在副本伺服器上複製一份來源資料庫。我們將使用先前匯出的 SQL 檔案來執行此操作。啟動 MySQL shell:

之後,使用相同的資料庫名稱建立一個空白資料庫:

接下來,退出 shell:

現在,將 SQL 檔案匯入資料庫:

sudo mysql -u

  • 微調 MySQL 設定

在 MySQL 設定檔中需要宣告幾件事。在文字編輯器中開啟設定檔:

以下項目將放在 mysqld 區段下。否則,它將無法運作。第一個是伺服器 ID。如前所述,它在來源-副本複製設定中的所有伺服器中必須是唯一的。為了進行示範,它被設定為 2:

接下來,新增以下幾行:

Replication in MySQL 2

在這裡,只有 relay-log 是新項目。它是副本伺服器在複製期間建立的記錄檔。記錄檔格式與二進位記錄檔相同。儲存設定檔,然後重新啟動 MySQL:

  • 啟用複製

最後,我們準備好在 MySQL 中啟用複製。啟動 MySQL shell:

執行以下指令。首先,相應地變更 IP 位址、使用者名稱和密碼:

CHANGE MASTER TO MASTER_HOST

該指令完成了以下操作:

  • 目前的伺服器被標記為來源伺服器的副本。
  • 副本伺服器具有正確的登入憑證。
  • 副本伺服器知道從哪裡開始進行複製。還記得我們在來源伺服器上檢查的資料庫狀態嗎?來源記錄檔和記錄位置就是從那裡來的。

最後,啟用副本伺服器:

START REPLICA

  • 其他

需要檢查副本目前狀態的詳細資訊嗎?在 MySQL shell 中執行以下指令。結尾的 \G 是為了重新排列文字,使其更具可讀性:

Replication in MySQL 1

如果存在連線問題,請嘗試啟動副本伺服器以跳過它:

結論

MySQL 複寫涉及許多層面。這只是其基本形式的簡短示範。然而,它可以輕鬆擴展到多個來源-複寫配置。相同的步驟也適用於任何更高階的複雜配置。在完成後測試任何配置始終是個好主意。嘗試執行一些 insertdeleteupdate 指令於來源資料庫。如果設定正常運作,則複寫資料庫應該要能正確同步所有內容。

此外,您可以查看我們部落格中的更多資源,了解您可以使用 MySQL 做些什麼:

祝您運算愉快!

 

author

Hark Labs

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。