MySQL雙主是一種數據復制架構,它允許在兩個(或多個)主服務器之間進行雙向數據同步。 雙主復制結構可提供更高的可用性和容錯能力。
配置MySQL雙主的步驟如下:
1. 配置主節點A和主節點B之間的雙向復制 在主節點A上執行如下命令: CHANGE MASTER TO MASTER_HOST = '主節點B的IP地址', MASTER_PORT = 3306, MASTER_USER = 'rep_user', MASTER_PASSWORD = 'rep_password', MASTER_AUTO_POSITION = 1; 在主節點B上同樣執行以上命令,不同的是將MASTER_HOST改成主節點A的IP地址。 2. 配置主節點A和主節點B的自動故障轉移 在主節點A上創建如下存儲過程: DELIMITER // CREATE PROCEDURE failover() BEGIN DECLARE failover_done INT DEFAULT 0; WHILE failover_done = 0 DO BEGIN DECLARE CONTINUE HANDLER FOR SQLSTATE 'HY000' SET failover_done=0; START TRANSACTION; SELECT IFNULL((SELECT 1 FROM information_schema.tables WHERE table_schema='mysql' AND table_name='failover_status'),0) INTO failover_done; IF failover_done = 0 THEN SELECT 'Setting up Failover' as state; SET GLOBAL read_only = ON; SELECT 'Read only mode enabled' as state; CALL mysql.rds_stop_replication; CALL mysql.rds_set_external_master ('主節點B的IP地址', 3306, 'rep_user', 'rep_password', 'mysql-bin.000001', 123); CALL mysql.rds_start_replication; SELECT 'Failover complete, new master is 主節點B' as state; INSERT INTO mysql.failover_status VALUES (1); END IF; SET failover_done=1; COMMIT; END; END WHILE; END// DELIMITER ; 然后在主節點A上創建一個事件,調用上面創建的存儲過程: CREATE EVENT failover_event ON SCHEDULE EVERY 1 MINUTE DO CALL failover(); 如果主節點A發生故障,主節點B會成為新的主節點,并繼續提供讀寫服務。
總之,MySQL雙主結構可以增強數據庫的可用性和容錯能力。建議使用較新版本的MySQL,因為在早期版本中,MySQL雙主復制結構可能存在穩定性和一致性問題。