1. 程式人生 > >如何在MySQL中設定主從複製

如何在MySQL中設定主從複製

原作者:Etel Sverdlov 轉載&翻譯:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql

 

如何在MySQL中設定主從複製

 

關於MySQL複製

MySQL複製是一個允許您通過將MySQL資料從主資料庫自動複製到從資料庫來輕鬆維護MySQL資料的多個副本的過程。這可能有很多原因,包括為資料設定備份,在不使用主資料庫的情況下對其進行分析,或僅僅作為向外擴充套件的方法。

本教程將介紹一個非常簡單的mysql複製示例 - 一個master將向單個slave傳送資訊。要使程序正常工作,您需要兩個IP地址:一個主伺服器和一個從伺服器。

本教程將使用以下IP地址:

12.34.56.78-主資料庫

12.23.34.45-從屬資料庫

PS:請自行更改IP地址 , 並事先配置好主從伺服器的網段Subnet、閘道器GateWay、地址IPAdress、DNS。

 

建立

本文假設您擁有具有sudo許可權的使用者並安裝了MySQL。如果您沒有mysql,可以使用以下命令安裝它:

sudo apt-get install mysql-server mysql-client

RHEL/Fedora/CentOS/Oracle系統的使用下面命令:

# 預設包管理命令,這裡沒有寫版本號,目前來看預設是mysql8.0,如果需要安裝特定版本,請 yum search mysql-server 查詢
sudo yum install mysql-server mysql-client

# 如果您已經安裝了dnf包管理器,也可以使用下面命令:
sudo dnf install mysql-server mysql-client

第一步 - 配置主資料庫

開啟主伺服器上的mysql配置檔案。

sudo nano /etc/mysql/my.cnf

進入該檔案後,我們需要進行一些更改。

第一步是找到看起來像這樣的部分,將伺服器繫結到本地主機:

bind-address = 127.0.0.1

將標準IP地址替換為伺服器的IP地址。

bind-address = 12.34.56.78

下一個配置更改是指位於[mysqld]部分中的server-id。您可以為此位置選擇任意數字(從1開始可能更容易),但該數字必須是唯一的,並且不能與複製組中的任何其他伺服器ID匹配。我要繼續設定為 1號 節點。

# 確保取消註釋此行。

server-id = 1

轉到log_bin行。這是保留複製的真實細節的地方。從站將複製日誌中註冊的所有更改。對於此步驟,我們只需要取消註釋引用log_bin的行:

log_bin = /var/log/mysql/mysql-bin.log

最後,我們需要指定將在從屬伺服器上覆制的資料庫。您可以通過為所需的所有資料庫重複此行來包含多個數據庫。

binlog_do_db = newdatabase

完成所有更改後,繼續儲存並退出配置檔案。

重新整理MySQL。

sudo service mysql restart

接下來的步驟將在MySQL shell中進行。

開啟MySQL shell。

mysql -u root -p

我們需要為奴隸授予特權。您可以使用此行命名您的從站並設定其密碼。該命令應採用以下格式:

GRANT REPLICATION SLAVE ON *。* to'slave_user'@'%'  Identified by  'password' ;

接著輸入下列命令:

flush privileges;

下一部分有點挑剔。要完成此任務,您需要開啟一個新視窗或選項卡,以及您已經使用了幾步的新視窗或選項卡

當前選項卡中 切換到“newdatabase”。

use newdatabase;

然後,鎖定資料庫以防止任何新的更改:

  FLUSH TABLES WITH READ LOCK;

然後鍵入:

  SHOW MASTER STATUS;

你會看到一個看起來像這樣的表:

mysql> SHOW MASTER STATUS; 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
| mysql-bin.000001 | 107 | newdatabase | | 
+ ------------------ + ---------- + -------------- + ---- -------------- + 
1行(0.00秒)

這是從資料庫開始複製的位置。記錄這些數字,它們將在以後有用。

如果在同一視窗中進行任何新更改,資料庫將自動解鎖。因此,您應該開啟新選項卡或視窗,然後繼續執行後續步驟。

繼續使用資料庫仍然鎖定,在新視窗中使用mysqldump匯出資料庫(確保在bash shell中輸入此命令,而不是在MySQL中)。

mysqldump -u root -p --opt newdatabase> newdatabase.sql

現在,返回到原始視窗,解鎖資料庫(使其再次可寫)。完成退出shell。

  UNLOCK TABLES;
  QUIT;

現在,您已完成master資料庫的配置。

 

第二步 - 配置從屬資料庫

配置master資料庫後。您可以擱置一段時間,我們現在將開始配置從屬資料庫。

登入到從屬伺服器,開啟MySQL shell並建立將從主伺服器複製的新資料庫(然後退出):

CREATE DATABASE newdatabase;
  EXIT;

匯入先前從master資料庫匯出的資料庫。

mysql -u root -p newdatabase </path/to/newdatabase.sql

現在我們需要以與主伺服器相同的方式配置從伺服器配置:

sudo nano /etc/mysql/my.cnf

我們必須確保在此配置中設定了一些內容。第一個是server-id。如前所述,這個數字必須是唯一的。由於它是預設設定(仍為1),因此請務必更改它的不同之處。

server-id = 2

在此之後,請確保您已正確填寫以下三個條件:

relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = newdatabase

您將需要新增relay-log行:預設情況下不存在。完成所有必要的更改後,儲存並退出從屬配置檔案。

再次重啟MySQL:

sudo service mysql restart 

下一步是從MySQL shell中啟用複製。

再次開啟MySQL shell並輸入以下詳細資訊,替換值以匹配您的資訊:

CHANGE MASTER TO MASTER_HOST='12.34.56.78',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;

該命令同時完成了幾件事:

  1. 它將當前伺服器指定為主伺服器的從屬伺服器。
  2. 它為伺服器提供正確的登入憑據
  3. 最後,它讓從伺服器知道從哪裡開始複製; 主日誌檔案和日誌位置來自我們之前寫下的數字。

有了這個 ,您已經配置了主伺服器和從伺服器,啟用從伺服器:

  START SLAVE;

您可以通過鍵入此命令來檢視從複製的詳細資訊。\ G重新排列文字以使其更具可讀性。

  SHOW SLAVE STATUS\G

如果在連線時出現問題,您可以嘗試使用命令啟動slave以跳過它:

  SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START; 

全部完成。

 

看更多

MySQL複製有很多不同的選擇,這只是一個簡短的概述。

 

英文原作者:Etel Sverdlov  翻譯作者:Miazzy Chaos 英文原文:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql