mysql實現雙機熱備,原理是通過更新日志,用MySQL的SELECT的文件操作功能,備機實時抓取主機的更新日志,當然這只是其原理,實際上並不需要我們自己去處理日志,明白了原理,實施就比較容易理解了。
這樣,在主機端需要開一個賬號,這個賬號是備機用來抓取主機的更新日志。需要有文件訪問權限,在早期,剛開始實現雙機熱備時,就是用的文件權限。
從MySQL4 開始,添加了一個專門的權限,用來做熱備,這個權限本質應該還是文件讀取權限,但是應該只能用來讀取日志,防止一些漏洞。
對於客戶端來說,就是設置這個賬號,密碼,主服務器地址,還有要同步的數據庫名。這只是單向的,再配置一個對等的同步通道,就支持雙向的熱備了。
通過熱備,還可以備端從主端load全部數據。這個在同步出錯時可以使用。load權限是一個單獨的mysql權限,這樣跟熱備有關的MySQL的權限有2個,日志抓取和數據載入(REPLICATION SLAVE, REPLICATION CLIENT )
在服務器端開備份賬號
GRANT REPLICATION SLAVE , REPLICATION CLIENT ON * . * TO "backup"@ "192.168.1.2"IDENTIFIED BY "*****"WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
在服務器端打開日志功能
/etc/MySQL/my.cnf
[MySQLd]
server-id = 1
log-bin
binlog-do-db = pa
max_binlog_size = 104857600
-------------------------------------------- 這樣,MySQL會在數據目錄放置pa這個庫的更新日志。等待備機來抓取。
客戶端設置:
/etc/MySQL/my.cnf
master-host=192.168.1.1
master-user=backup
master-passWord=12345
master-port=3306
master-connect-retry=60
replicate-do-db=pa
幾個跟熱備有關的mysql命令:(需要在MySQL命令行界面或query )
net_write_timeout的值
net_write_timeout的值
CHANGE MASTER TO master_def_list
#在線改變一些主機設置,多個用逗號間隔,比如
CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com',
MASTER_USER='replication',
MASTER_PASSWord='bigs3cret'