實現原理
MySQL支持單向、異步複製,複製過程中一個服努器充當主服努器 ,而一個或多個其它服努器充當從服努器
MySQL複製基於主服努器在二進制日誌中跟蹤所有對數據庫的更改 (更新、刪除等等)
每個從服務器從主服務器接收主服務器已經記錄到其 二進制的保存的更新
實現步驟
①Master將改變記錄到二進制日誌(binary log)中
②Slave將Master的binary log events拷貝到它的中繼日誌(re丨ay
log);
③Slave重做中繼日誌中的事件,將改變反映它自己的數據。
原理圖
步驟1:
主庫設置
開啓主服務器的binary log
vim /etc/my.cnf
去掉 log-bin=mysql-bin 註釋
mysql-bin 日誌名稱
修改 server-id =1; 更改爲唯一的值,可以修改爲ip的尾數
重啓mysql
進入mysql
查看mysql狀態
show master status
重置日誌記錄
reset master
授權指定ip通過用戶slave 使用123456密碼訪問log-bin文件
grant replication slave on *.* to [email protected] identified by '123456' ;
步驟2:
從庫設置
vim /etc/my.cnf
註釋log-bin=mysql-bin以及binlog-format=mixed
修改 server-id = ; 更改爲不一樣的值,可以修改爲ip的尾數
開啓 relay_log=mysql-relay-bin;
進入mysql;
執行 stop slave ;#停止監聽
執行 ->change master to
->master_host='192.168.199.151',
->master_port='3306',
->master_user='slave',
->master_password='123456',
->master_log_file='mysql-bin.000001',
->master_log_pos=402 ;
注意:master_log_file和master_log_pos的值是通過主庫執行 show master status 查看得到的.
執行 start slave ;#開啓監聽;
執行後就可以監聽了;
查看狀態 show slave status\G ;查看狀態;
Slave_IO_State:Wating for master to send event #當前狀態
Slave_IO_Runing:Yes
Slave_Sql_Runing:Yes
步驟3:
Mysql 雙主熱備
原理
解決問題
master 掛掉不會影響業務
實現方法
在slave 從服務器中修改my.cnf
開啓 log-bin=mysql-bin
binlog_format=mixed
relay_log=mysql-relay-bin
log_slave_updates=1 #此處將從主庫獲得的bin-log和從庫的bin-log一致,保存後退出
進入mysql,
授權主庫可以監聽從庫
grant replication slave on *.* to [email protected] identified by '123456' ;
同樣也需要設置原有的從庫
vim /etc/my.cnf
開啓 relay_log=mysql-relay-bin;
設置 log_slave_updates=1
重啓mysql;
執行 ->change master to
->master_host='192.168.199.152',
->master_port='3306',
->master_user='slave',
->master_password='123456',
->master_log_file='mysql-bin.000001',
->master_log_pos=402 ;
#注意:master_log_file和master_log_pos的值是通過從庫執行 show master status 查看得到的.
執行 start slave ;#開啓監聽;
這樣就實現了雙主熱備,將從庫同樣變成了主庫.
同樣還需要設置2臺從庫分別來同步以上兩臺主庫,重複步驟二.
(注意:server_id 不能重複)