MariaDB 的主從複製(Master-Slave Replication)是一種用來在多個伺服器之間複製資料的技術。這可以用來實現讀取負載均衡、數據備份以及故障轉移等目的。使用 MariaDB 複製(replication)有以下幾個主要原因
1. 高可用性和故障轉移:
透過設置主從(master-slave)或主主(master-master)複製架構,可以確保即使主資料庫發生故障,從資料庫也能快速接管,提供服務的連續性。
2. 負載均衡:
將讀寫操作分開,主資料庫負責寫操作,從資料庫負責讀操作,可以有效分散負載,提升整體性能。
3. 備份:
從資料庫可以用來執行備份操作,而不影響主資料庫的運行。這樣可以確保資料的安全性和一致性。
4. 資料分發:
透過複製,可以將資料分發到地理上分散的不同位置,提升資料的可用性和響應速度。
5. 測試和開發:
可以使用從資料庫進行開發和測試,避免直接在生產環境操作,降低風險。
6. 數據倉儲:
從資料庫可以作為數據倉儲的來源,進行數據分析和報表生成,而不影響主資料庫的性能。
MariaDB 複製的基本概念
1. 主從複製(Master-Slave Replication):
主資料庫處理所有寫操作,並將這些操作複製到從資料庫。從資料庫處理讀操作。
2. 主主複製(Master-Master Replication):
每個資料庫都是彼此的主資料庫,可以同時處理讀寫操作,適合於需要高可用性和負載均衡的環境。
3. 異步複製(Asynchronous Replication):
主資料庫在處理完寫操作後,不會等待從資料庫確認,適合於對一致性要求不高但要求高性能的場景。
4. 半同步複製(Semi-Synchronous Replication):
主資料庫在處理完寫操作後,會等待至少一個從資料庫確認接收到操作日誌,適合於需要一定程度一致性保障的場景。
5. 同步複製(Synchronous Replication):
主資料庫在處理完寫操作後,會等待所有從資料庫確認接收到操作日誌,適合於對一致性要求非常高的場景。
以下是 MariaDB 主從複製的基本步驟:
1. 設定主伺服器(Master)
- 編輯配置文件:
打開 MariaDB 的配置文件(通常是/etc/mysql/my.cnf
或/etc/my.cnf
),在[mysqld]
部分新增以下參數:
[mysqld]
server-id=1
log-bin=mysql-bin
server-id
必須是唯一的整數,log-bin
指定二進制日誌文件的名稱前綴。
- 重啟 MariaDB:
sudo systemctl restart mariadb
- 創建複製用戶:
登錄到 MariaDB,創建一個具有 REPLICATION SLAVE 權限的用戶:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
- 鎖定數據庫(可選,防止數據變動):
FLUSH TABLES WITH READ LOCK;
- 導出數據庫(可選):
mysqldump -u root -p --all-databases --master-data > /path/to/dump.sql
2. 設定從伺服器(Slave)
- 編輯配置文件:
打開從伺服器的配置文件,在[mysqld]
部分新增以下參數:
[mysqld]
server-id=2
relay-log=relay-bin
log-bin=mysql-bin
- 重啟 MariaDB:
sudo systemctl restart mariadb
- 導入數據庫(如果從零開始複製):
將之前在主伺服器上導出的數據庫導入到從伺服器上:
mysql -u root -p < /path/to/dump.sql
- 配置從伺服器與主伺服器同步:
登錄到從伺服器,執行以下命令:
CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 4;
- 啟動複製:
START SLAVE;
- 檢查複製狀態:
SHOW SLAVE STATUS\G;
常見問題排查
- 檢查日誌:檢查 MariaDB 日誌文件(通常在
/var/log/mysql/
目錄下),查看是否有錯誤信息。 - 檢查連接:確保從伺服器能夠連接到主伺服器,並且主伺服器的防火牆允許從伺服器的連接。
- 檢查用戶權限:確保複製用戶具有正確的權限。
以上就是設置 MariaDB 主從複製的基本步驟。根據實際情況,可能需要做一些調整,例如設置多個從伺服器或實現主主複製等。
Reference
https://book.king011.com/view/en-US/view/db-mariadb/master-slave