配置的環境:兩台windows2003伺服器,apache+mysql+php
所配置的類型:一主一從
基本原理:mysql支援單向、異步複制,複制過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。mysql複制基于主伺服器在二進制日志中跟蹤所有對資料庫的更改(更新、删除等等)。是以,要進行複制,必須在主伺服器上啟用二進制日志。每個從伺服器接收主伺服器已經記錄的二進制日志來儲存更新。當一個從伺服器連接配接主伺服器時,它通知主伺服器從日志中讀取最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,并在本機上執行相同的更新。然後封鎖并等待主伺服器通知新的更新。從伺服器執行備份不會幹擾主伺服器,在備份過程中主伺服器可以繼續處理更新。
配置方法:
在進行mysql主從備份時,最好確定主從伺服器的版本相容。從伺服器至少與主伺服器版本相同或更高。
主機(master)配置:
1.修改mysql配置檔案my.ini
在[mysqld]标簽下添加以下幾行
log-bin=名字 這個是開啟二進制日志 如果名字mysql-bin 生成的二進制日志名為:mysql-bin.000001
server-id=你設定的數值 這個是唯一的id辨別 預設為1 不能和從伺服器重複
binlog-do-db=資料庫名 這個是你要記錄的資料庫名
binlog-ignore-db=資料庫名 指定不對哪個資料庫記錄二進制日志 不是必需要設的
max_allowed_packet=消息緩沖區的大小 這個數值主從設定的要一緻最好設定大點 如:1G 使用指令行檢視方式 show variables like '%max_allowed_packet%';
2.為從伺服器添加mysql賬戶并配置權限
使用cmd指令進入mysql 輸入進行權限設定
grant replication slave on *.* to '帳号' @ '從伺服器IP' identified by '密碼';
這個賬号和密碼需有相應的權限如:從伺服器ip使用此賬号和密碼可以連接配接到主伺服器的資料庫
3.記錄File 及Position 項的值
重新開機mysql,使用show master status;檢視主伺服器狀态,記錄File 及Position 項的值,以便之後對從伺服器進行配置。
從機(slave)配置:
1.修改mysql配置檔案my.ini
在[mysqld]标簽下添加以下面一行:
max_allowed_packet=消息緩沖區的大小 這個數值主從設定的要一緻最好設定大點 如:1G 使用指令行檢視方式 show variables like '%max_allowed_packet%';
server-id=你設定的數值 這個是唯一的id辨別 預設為2 不能和主伺服器重複
replicate-do-db=資料庫名 這個是你要讀取的資料庫名
2.重新開機mysql資料庫并設定相關參數
使用cmd 指令進入mysql 輸入指令
change master to master_host='主伺服器ip位址',master_port=主伺服器端口,master_user='設定的主伺服器賬号',master_password='主伺服器密碼',master_log_file='二進制日志名File',master_log_pos=Position 項;
最後輸入指令檢視是否配置正确
SHOW SLAVE STATUS\G
如果看到Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 正說明配置正确
停止複制資料需在從伺服器指令行下輸入slave stop;
開啟複制資料 slave start;
遇到這樣的錯誤如:“Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'”等或
Last_IO_Error: Got fatal error 1236 from master when reading dat
a from binary log: 'log event entry exceeded max_allowed_packet; Increase max_al
lowed_packet on master; the first event 'mysql-bin.000001' at 98, the last event
read from '.\mysql-bin.000001' at 98, the last byte read from '.\mysql-bin.0000
01' at 117.'
解決辦法如下:
先進入slave中執行:"slave stop;"來停止從庫同步;
再去master中執行:"flush logs;"來清空日志;
然後在master中執行:"show master status;"檢視下主庫的狀态,主要是日志的檔案和position;
然後回到slave中,執行:"CHANGE MASTER TO MASTER_LOG_FILE='檢視到的日志檔案',MASTER_LOG_POS=檢視到的position值;",檔案和位置對應master中的;
最後在slave中執行:"slave start;"來啟動同步。
有時候大的插入和更新會被max_allowed_packet 參數限制掉,導緻失敗。