MySQL主從復制(Master-Slave Replication)是一種常見的解決方案,通過將主數(shù)據(jù)庫(Master)的數(shù)據(jù)復制到一個或多個從數(shù)據(jù)庫(Slave)來實現(xiàn)數(shù)據(jù)同步和負載均衡。小編將詳細介紹如何配置MySQL主從復制,以實現(xiàn)高可用性和數(shù)據(jù)同步。
1. 主從復制的基本概念
主數(shù)據(jù)庫(Master)
主數(shù)據(jù)庫是數(shù)據(jù)的源頭,所有寫操作(如INSERT、UPDATE、DELETE)都在主數(shù)據(jù)庫上執(zhí)行。主數(shù)據(jù)庫將這些操作記錄到二進制日志(Binary Log)中。
從數(shù)據(jù)庫(Slave)
從數(shù)據(jù)庫通過讀取主數(shù)據(jù)庫的二進制日志來復制數(shù)據(jù)。從數(shù)據(jù)庫可以用于讀操作(如SELECT),從而分擔主數(shù)據(jù)庫的負載。
二進制日志(Binary Log)
二進制日志是MySQL記錄所有更改數(shù)據(jù)庫數(shù)據(jù)的操作的文件。主從復制依賴于二進制日志來實現(xiàn)數(shù)據(jù)同步。
2. 配置主從復制的步驟
環(huán)境準備
假設我們有兩臺服務器:
主服務器(Master):192.168.1.1
從服務器(Slave):192.168.1.2
確保兩臺服務器上都安裝了MySQL,并且網(wǎng)絡互通。
配置主數(shù)據(jù)庫(Master)
修改主數(shù)據(jù)庫配置文件
在主服務器的MySQL配置文件(通常是my.cnf或my.ini)中添加或修改以下配置:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
server-id:主服務器的唯一標識,必須為1。
log-bin:啟用二進制日志,并指定日志文件的前綴。
binlog-format:指定二進制日志的格式,推薦使用ROW格式。
重啟MySQL服務
保存配置文件后,重啟MySQL服務以使配置生效:
sudo systemctl restart mysql
創(chuàng)建復制用戶
在主數(shù)據(jù)庫上創(chuàng)建一個用于復制的用戶,并授予復制權(quán)限:
CREATE USER 'repl'@'192.168.1.2' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2';
FLUSH PRIVILEGES;
獲取主數(shù)據(jù)庫狀態(tài)
在主數(shù)據(jù)庫上執(zhí)行以下命令,記錄File和Position的值,后續(xù)在從數(shù)據(jù)庫配置時會用到:
SHOW MASTER STATUS;
配置從數(shù)據(jù)庫(Slave)
修改從數(shù)據(jù)庫配置文件
在從服務器的MySQL配置文件(通常是my.cnf或my.ini)中添加或修改以下配置:
[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=1
server-id:從服務器的唯一標識,必須為2。
relay-log:指定中繼日志文件的前綴。
read-only:設置從數(shù)據(jù)庫為只讀模式,防止誤操作。
重啟MySQL服務
保存配置文件后,重啟MySQL服務以使配置生效:
sudo systemctl restart mysql
配置從數(shù)據(jù)庫復制
在從數(shù)據(jù)庫上執(zhí)行以下命令,配置復制:
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
MASTER_HOST:主數(shù)據(jù)庫的IP地址。
MASTER_USER和MASTER_PASSWORD:主數(shù)據(jù)庫上創(chuàng)建的復制用戶的用戶名和密碼。
MASTER_LOG_FILE和MASTER_LOG_POS:主數(shù)據(jù)庫上SHOW MASTER STATUS命令輸出的File和Position值。
啟動復制
在從數(shù)據(jù)庫上啟動復制:
START SLAVE;
檢查復制狀態(tài)
在從數(shù)據(jù)庫上執(zhí)行以下命令,檢查復制狀態(tài):
SHOW SLAVE STATUS\G
確保Slave_IO_Running和Slave_SQL_Running的值都為Yes,表示復制已成功啟動。
3. 驗證主從復制
在主數(shù)據(jù)庫上創(chuàng)建測試數(shù)據(jù)
在主數(shù)據(jù)庫上創(chuàng)建一個測試數(shù)據(jù)庫和表,并插入一些數(shù)據(jù):
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table (id, name) VALUES (1, 'Alice'), (2, 'Bob');
在從數(shù)據(jù)庫上查詢數(shù)據(jù)
在從數(shù)據(jù)庫上查詢測試數(shù)據(jù),驗證數(shù)據(jù)是否已同步:
USE test_db;
SELECT * FROM test_table;
如果數(shù)據(jù)已同步,您應該能夠看到與主數(shù)據(jù)庫相同的數(shù)據(jù)。
MySQL主從復制是實現(xiàn)高可用性和數(shù)據(jù)同步的有效方案。通過這篇文章整理的步驟,您可以成功配置MySQL主從復制,并驗證數(shù)據(jù)的同步。在實際應用中,您還可以根據(jù)需求進一步優(yōu)化和擴展主從復制架構(gòu),以滿足更高的性能和可用性要求。