如何在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;
該命令同時完成了幾件事:
- 它將當前伺服器指定為主伺服器的從屬伺服器。
- 它為伺服器提供正確的登入憑據
- 最後,它讓從伺服器知道從哪裡開始複製; 主日誌檔案和日誌位置來自我們之前寫下的數字。
有了這個 ,您已經配置了主伺服器和從伺服器,啟用從伺服器:
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