MySQL Master-Slave架構是一種常見的解決方案,適用于需要高性能讀取和數據冗余的場景。主數據庫(Master)處理所有的寫操作,從數據庫(Slave)負責讀操作和冗余備份,從而提高了整個系統的可用性和可擴展性。
MySQL的Master-Slave架構中,Master和Slave通過二進制日志(binlog)來進行數據同步。Master將修改數據的操作記錄到binlog,Slave從Master復制binlog來獲取最新的數據。因此,binlog非常重要,任何對binlog的修改都可能導致數據同步出現問題。
// 創建一個新的binlog文件,指定文件名前綴為"mysql-bin" mysql>FLUSH LOGS; Query OK, 0 rows affected (0.00 sec) // 查看最新的binlog文件名 mysql>SHOW MASTER STATUS; +------------------+-----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+-----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 107 | | | | +------------------+-----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
在Master中,每個binlog文件都有一個唯一的編號和文件名,例如mysql-bin.000001。可以使用FLUSH LOGS語句來創建一個新的binlog文件,從而進行日志輪換,防止binlog文件過大。SHOW MASTER STATUS語句可以查看當前Master使用的最新binlog文件,以及該文件當前的位置。
在Slave中,可以使用CHANGE MASTER TO語句指定Master的IP地址、binlog文件名和位置,以及Slave自身的ID等參數來建立與Master的連接。隨后,在Slave中使用START SLAVE語句來啟動復制。
// 修改Slave的連接信息 mysql>CHANGE MASTER TO ->MASTER_HOST='192.168.1.1', ->MASTER_PORT=3306, ->MASTER_USER='repl', ->MASTER_PASSWORD='repl_password', ->MASTER_LOG_FILE='mysql-bin.000002', ->MASTER_LOG_POS=154; // 啟動Slave復制 mysql>START SLAVE; Query OK, 0 rows affected (0.00 sec)
一旦復制開始,Master和Slave之間的binlog同步就會持續進行,直到Slave與Master斷開連接或者關閉復制。另外,在從庫運行show slave status語句可以顯示復制狀態信息,以及Slave與Master之間的延遲等信息。
下一篇boot讀寫mysql