MySQL主從復制是MySQL的一種高可用性解決方案。主從復制指的是將一個MySQL數據庫復制到另一個MySQL數據庫上,其中一個被稱為“主庫”,另一個被稱為“從庫”。主庫上的數據更新時,從庫能夠自動同步更新,實現數據的實時備份和故障轉移。
MySQL主從復制的原理是通過在主庫上記錄二進制日志(binlog),從庫連接主庫并復制二進制日志。從庫接收到主庫的二進制日志后,將其復制到本地的中繼日志(relay log)中,然后在從庫上執行中繼日志中的SQL語句,以完成數據同步。
mysql>SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 104 | test | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql>CREATE USER 'slave'@'192.168.1.%' IDENTIFIED BY 'password';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.%';
mysql>SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.10
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 104
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上是一個典型的MySQL主從復制流程,其中主庫上的MySQL服務器將日志文件寫入到磁盤上的二進制日志(binlog)中。從庫連接到主庫,從主庫上讀取binlog,然后將binlog寫入到自己的relay log中。
當從庫完成binlog的寫入后,從庫開始執行relay log中的SQL語句,實現數據的同步。如果在同步過程中出現故障,從庫會自動重新連接主庫并繼續同步,確保數據同步的高可用性。