MySQL的主從同步是指在一個Master服務器上進行的操作能夠自動地傳遞到Slave服務器中,從而使得Slave服務器上的數據與Master服務器上的數據保持一致。這種同步方式對于需要高可用性、讀寫分離、數據備份等應用具有重要意義。
實現主從同步的核心技術是MySQL的復制機制(replication)。當用戶在Master服務器上進行修改時,MySQL會把修改操作記錄到binlog文件中。Slave服務器通過讀取Master服務器上的binlog文件,能夠獲取Master服務器上的修改操作并自動執行相同的操作,從而實現數據同步。
#Master主配置文件 [mysqld] server-id=1 log-bin=mysql-bin #啟用二進制日志 binlog-do-db=testdb #需要同步的數據庫 expire_logs_days=10 #binlog日志保存10天 max_binlog_size=100M #單個binlog文件最大100M #Slave從配置文件 [mysqld] server-id=2 log-bin=mysql-bin #啟用二進制日志 replicate-do-db=testdb #需要同步的數據庫 expire_logs_days=10 #binlog日志保存10天 max_binlog_size=100M #單個binlog文件最大100M relay-log=relay-bin relay-log-index=relay-bin.index #建立同步帳號 GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slavepassword';
要使用MySQL的復制機制實現主從同步,首先需要在Master服務器和Slave服務器上進行配置。在Master服務器的配置文件中,需要設置一個唯一的server-id,同時啟用binlog二進制日志功能并設置需要同步的數據庫名稱。在Slave服務器的配置文件中,也需要設置一個唯一的server-id和啟用binlog二進制日志,同時還需要設置需要同步的數據庫和中繼日志(relay-log)。
當配置完成后,需要在Master服務器上建立一個用于同步的帳號,并賦予該帳號REPLICATION SLAVE權限。在Slave服務器上,需要執行一條CHANGE MASTER TO語句,指定Master服務器的IP地址、端口號、同步帳號和密碼以及Master服務器的二進制日志文件名和讀取位置。執行該語句后,Slave服務器會自動開始同步。
#Slave執行CHANGE MASTER TO語句 CHANGE MASTER TO MASTER_HOST='master', MASTER_PORT=3306, MASTER_USER='slave', MASTER_PASSWORD='slavepassword', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; #啟動Slave同步進程 START SLAVE;
當Master服務器上的數據庫發生修改時,Slave服務器會自動將修改同步至自己的數據庫。如果Master服務器宕機,或者網絡出現問題,Slave服務器會自動嘗試重新連接Master服務器,并從上一次同步的位置繼續進行同步。因此,使用MySQL的主從同步能夠大幅提高應用的可用性和穩定性。