MySQL支援單向、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位記錄檔,並維 護記錄檔的一個索引以追蹤記錄檔迴圈。當一個從伺服器串連到主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那 時起發生的任何更新,然後封鎖並等待主伺服器通知下一次更新。
為什麼使用主從複製?
1、主伺服器/從伺服器設定增加了健壯性。主伺服器出現問題時,你可以切換到從伺服器作為備份。
2、通過在主伺服器和從伺服器之間切分處理客戶查詢的負荷,可以得到更好的客戶回應時間。但是不要同時在主從伺服器上進行更新,這樣可能引起衝突。
3、使用複製的另一個好處是可以使用一個從伺服器執行備份,而不會干擾主伺服器。在備份過程中主伺服器可以繼續處理更新。
MySQL 使用3個線程來執行複製功能(其中1個在主伺服器上,另兩個在從伺服器上。當發出START SLAVE時,從伺服器建立一個I/O線程,以串連主伺服器並讓主伺服器發送二進位日誌。主伺服器建立一個線程將二進位日誌中的內容發送到從伺服器。從服 務器I/O線程讀取主伺服器Binlog Dump線程發送的內容並將該資料拷貝到從伺服器資料目錄中的本地檔案中,即中繼日誌。第3個線程是SQL線程,從伺服器使用此線程讀取中繼日誌並執行日誌中包含的更新。SHOW PROCESSLIST語句可以查詢在主伺服器上和從伺服器上發生的關於複製的資訊。
預設中繼日誌使用 host_name-relay-bin.nnnnnn形式的檔案名稱,其中host_name是從伺服器主機名稱,nnnnnn是序 列號。用連續序號來建立連續中繼記錄檔,從000001開始。從伺服器跟蹤中繼日誌索引檔案來識別目前正使用的中繼日誌。預設中繼日誌索引檔案名稱為 host_name-relay-bin.index。在預設情況,這些檔案在從伺服器的資料目錄中被建立。中繼日誌與二進位日誌的格式相同,並且可以用 mysqlbinlog讀取。當SQL線程執行完中繼日誌中的所有事件後,中繼日誌將會被自動刪除。
從伺服器在資料目錄中另外建立兩個狀態檔案--master.info和relay-log.info。狀態檔案儲存在硬碟上,從伺服器關閉時不會丟失。下次從伺服器啟動時,讀取這些檔案以確定它已經從主伺服器讀取了多少二進位日誌,以及處理自己的中繼日誌的程度。
1.配置主伺服器
開啟mysql的配置
vim/usr/local/webserver/mysql/my.cnf
開啟server_id和bin-log日誌
server_id = '唯一值'(開啟server_id)
log-bin = /data/mysql/3306/binlog/binlog
2. 配置從伺服器
開啟mysql的配置
vim /usr/local/webserver/mysql/my.cnf
開啟server_id和bin-log日誌
server_id = '唯一值'(開啟server_id)
log-bin = /data/mysql/3306/binlog/binlog
修改完配置後記得重啟資料庫 service mysqld restart
關鍵點:從資料庫中必須有一個使用者可以在從資料庫的機器上去串連主伺服器
3.在主要資料庫中給從資料庫一個使用者
進入mysql /usr/local/webserver/mysql/bin/mysql -p 密碼
mysql> grant all on *.* to 使用者@從資料庫的ip identified by '密碼';
flush privileges;重新整理許可權
在主要資料庫中查看 show master status;主要資料庫的最新的bin-log記錄檔名
4.進入從資料庫,執行下邊的sql語句
檢查從資料庫是否可以進入
mysql /usr/local/webserver/mysql/bin/mysql -u
主要資料庫給的使用者 -p 密碼 -h主要資料庫的ip ,如果可以進入,則退出
mysql /usr/local/webserver/mysql/bin/mysql -u
密碼
特別,在執行change之前必須關閉從庫 stop slave;
mysql> change master to master_host='主要資料庫ip',master_user='主要資料庫授權的使用者名稱',master_password='主要資料庫授權的密碼',master_log_file='主要資料庫的bin-log日誌的檔案名稱',master_log_pos='主要資料庫的bin-log日誌的position值'
5.開啟從庫 start slave;
6.查看從庫狀態 show slave status\G;
change master to master_host='101.200.136.226',master_user='zt',master_password='zt',master_log_file=' binlog.000001 ',master_log_pos=4826;
如果
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
OK沒問題
主從配置完畢
binlog命令
/usr/local/webserver/mysql/bin/mysqlbinlog binlog.000001
查看binlog記錄檔
reset master 初始化binlog日誌
show master status; 查看最新的記錄檔和position值
flush logs 重新整理log記錄檔
start slave 開啟從庫
stop slave 停止從庫
show slave status;查看從庫狀態
通過binlog日誌恢複資料
進入binlog目錄
cd /data/mysql/3306/binlog/
查看binlog列表 ls
查看binlog記錄檔
/usr/local/webserver/mysql/bin/mysqlbinlog binlog.000001
恢複資料
/usr/local/webserver/mysql/bin/mysqlbinlog binlog.000001 | /usr/local/webserver/mysql/bin/mysql -p(在沒有清空binlog日誌之前可以恢複)
如果執行了 reset master 就無法恢複
以上就是對 mysql 資料庫 主從複製的配置資料整理,開發資料庫需要的朋友可以看下。