前言
數據庫實時備份的需求很常見,MySQL本身提供了 Replication 機制,摘譯官方介紹如下:
MySQL Replication 可以將一個主數據庫中的數據同步到一個或多個從數據庫中。并且這個同步過程默認以異步方式工作,不需要保持主從數據庫的實時連接(即允許連接中斷)。同時允許自定義配置需同步的數據庫及數據表。
MySQL Replication 的優點及應用場景如下:
1、通過 MySQL Replication 實現負載均衡與讀寫分離(主數據庫僅更新,從數據庫僅讀取),提升數據庫性能。
2、通過 MySQL Replication 實現數據的實時備份,保證數據安全。
3、通過 MySQL Replication 實現數據的離線分析(主數據庫生成數據,從數據庫分析計算不影響主數據庫性能)。
4、數據分發。
MySQL Replication完整的官方文檔請參閱:https://dev.mysql.com/doc/refman/5.7/en/replication.html
工作原理
1111
1、Master中的所有數據庫變更事件寫入Binary Log文件
2、當在Slave中執行“SLAVE START”命令時,開啟Slave I/O Thread,并連接Master
3、Master偵測到Slave I/O Thread的連接,開啟Log Jump Thread進行響應
4、Master Binary Log經Master Log Jump Thread和Slave I/O Thread傳輸至Slave Relay Log
5、Slave SQL Thread將Relay Log還原至數據,同步完成
注:可使用“SHOW PROCESSLIST”命令在Master和Slave中查看對應線程的運行情況
配置Master
開啟Binary Log并設置ServerID,ServerID必須唯一,取值范圍1至232-1
| [mysqld]# 開啟Binary Loglog-bin=mysql-bin# 設置全局IDserver-id=1# 指定需同步的數據庫(因為數據庫名稱可能包含逗號,因此多個數據庫必須重復配置多次而不能以逗號分隔)binlog-do-db=database_name# 指定禁止同步的數據庫binlog-ignore-db=database_name# 指定Binary Log格式binlog_format=MIXED |
創建同步帳號
因為每個Slave均需要使用帳號密碼連接至主數據庫,所以在主數據庫上必須提供帳號。建議使用一個獨立帳號,僅授權數據同步權限。
| CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com'; |
獲取Binary Log信息
Slave啟動I/O Thread時需要傳入Binary Log部分信息,因此需要獲取一下Binary Log信息:
| SHOW MASTER STATUS; |
使用“SHOW MASTER STATUS”命令獲取Binary Log信息,并記錄File和Position字段值。
同步前保證Master與Slave的數據一致
在Slave啟動I/O Thread前,需確保Master與Slave的數據一致,因此先對Master進行鎖定(防止數據變更),手動同步并確保數據一致后再解鎖。
| FLUSH TABLES WITH READ LOCK; |
手動數據同步相關操作略...
新聞熱點
疑難解答