天天看點

設定讀寫分離後資料同步的配置方法

配置的環境:兩台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 參數限制掉,導緻失敗。