MySQL數據庫是一款廣泛應用的開源關系型數據庫,它支持多種備份方式,包括主主備份。主主備份可以保證數據的高可用性,因為當一臺主服務器宕機時,另一臺主服務器可以接管其任務。以下是主主備份的步驟。
首先,需要配置兩臺MySQL服務器:一個主服務器和一個備服務器。這兩臺服務器之間應該互相備份,以保證數據的完整性。在主服務器上設置LOG_BIN選項,以使其可以將所有數據更改發送到備服務器。在備服務器上設置MASTER_LOG_FILE和MASTER_LOG_POS選項,以接收主服務器發送的數據。
[mysqld] log-bin=mysql-bin server-id=1
在主服務器和備服務器之間的網絡連接應該是可靠和高速的。為了檢查是否可以通過網絡訪問備份服務器,可以使用以下命令:
ping backup_server_ip
接下來,需要在主服務器上創建一個用戶,并授予其REPLICATION SLAVE角色。這個用戶將用于與備服務器通信,因此應確保其密碼安全。在備服務器上創建一個用戶,并授予其REPLICATION MASTER角色。這個用戶將用于與主服務器通信。
-- 主服務器上 CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 備服務器上 CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION MASTER ON *.* TO 'repl'@'%';
在備服務器上,需要將主服務器的數據復制到備份服務器上。可以使用以下命令:
mysqldump --single-transaction --master-data=1 -h master_server_ip -u root -p db_name | mysql -h backup_server_ip -u root -p db_name
最后,在主服務器上啟用二進制日志功能,并開始記錄數據更改。在備服務器上啟用復制,以可以接收來自主服務器的更新。
-- 主服務器上 SET GLOBAL binlog_format = 'ROW'; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; UNLOCK TABLES; -- 備服務器上 CHANGE MASTER TO master_host='master_server_ip', master_user='repl', master_password='password', master_log_file='mysql-bin.xxxxxx', master_log_pos=xxx; START SLAVE;
現在,當主服務器宕機時,其任務會自動轉移到備份服務器上。在發生故障時,可以使用以下命令來切換到備份服務器:
-- 主服務器上 -- 停止更新 SET GLOBAL transaction_write_set_extraction = OFF; STOP SLAVE; -- 切換到備份服務器 CHANGE MASTER TO master_host='backup_server_ip', master_user='repl', master_password='password', master_log_file='mysql-bin.xxxxxx', master_log_pos=xxx; -- 開始更新 START SLAVE; SET GLOBAL transaction_write_set_extraction = ON;