MySQL支持單向、異步複製,複製過程當中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維 護日誌文件的一個索引以跟蹤日誌循環。當一個從服務器鏈接到主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那 時起發生的任何更新,而後封鎖並等待主服務器通知下一次更新。html
爲何使用主從複製?node
一、主服務器/從服務器設置增長了健壯性。主服務器出現問題時,你能夠切換到從服務器做爲備份。
mysql
二、經過在主服務器和從服務器之間切分處理客戶查詢的負荷,能夠獲得更好的客戶響應時間。可是不要同時在主從服務器上進行更新,這樣可能引發衝突。
web
三、使用複製的另外一個好處是可使用一個從服務器執行備份,而不會干擾主服務器。在備份過程當中主服務器能夠繼續處理更新。sql
MySQL 使用3個線程來執行復制功能(其中1個在主服務器上,另兩個在從服務器上,有些Java培訓學校對這方面的知識有過講解。當發出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線程執行完中繼日誌中的全部事件後,中繼日誌將會被自動刪除。vim
從服務器在數據目錄中另外建立兩個狀態文件--master.info和relay-log.info。狀態文件保存在硬盤上,從服務器關閉時不會丟失。下次從服務器啓動時,讀取這些文件以肯定它已經從主服務器讀取了多少二進制日誌,以及處理本身的中繼日誌的程度。bash
1.配置主服務器
服務器
打開mysql的配置 異步
1
|
vim
/usr/local/webserver/mysql/my
.cnf
|
開啓server_id和bin-log日誌
server_id = '惟一值'(開啓server_id)
log-bin = /data/mysql/3306/binlog/binlog
2. 配置從服務器
打開mysql的配置
1
|
vim /usr/local/webserver/mysql/my.cnf
|
開啓server_id和bin-log日誌
server_id = '惟一值'(開啓server_id)
1
|
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語句
檢查從數據庫是否能夠進入
1
|
mysql
/usr/local/webserver/mysql/bin/mysql
-u
|
主數據庫給的用戶 -p 密碼 -h主數據庫的ip ,若是能夠進入,則退出
1
|
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;
1
|
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命令
1
|
/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目錄
hxyy2013.b2b168.com
http://www.wenbing.com/kmhx
1
|
cd
/data/mysql/3306/binlog/
|
查看binlog列表 ls
查看binlog日誌文件
1
|
/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 數據庫 主從複製的配置資料整理,開發數據庫須要的朋友能夠看下。