簡介
mysql主從同步是目前使用比較廣泛的數據庫架構,技術比較成熟,配置也不復雜,特別是對于負載比較大的網站,主從同步能夠有效緩解數據庫讀寫的壓力。
mysql主從同步的機制:
mysql同步的流程大致如下:
? ? 1、主服務器(master)將變更事件(更新、刪除、表結構改變等等)寫入二進制日志(master log)。
? ? 2、從服務器(slave)的io線程從主服務器(binlog dump線程)獲取二進制日志,并在本地保存一份自己的二進制日志(relay log)
? ? 3、從服務器的sql線程讀取本地日志(relay log),并重演變更事件。
mysql主從同步的作用:
? ? 1、可以作為一種備份機制,相當于熱備份(在從備份,避免備份期間影響主服務器服務)
? ? 2、可以用來做讀寫分離,均衡數據庫負載(主寫從讀)
? ? 3、當主服務器出現問題時,可以切換到從服務器。
mysql主從同步的步驟:
一、準備操作:
1、主從數據庫版本一致,建議版本5.5以上
2、主從數據庫數據一致
二、主數據庫master修改:
1、修改mysql配置:
#?/etc/my.cnf? log-bin?=?mysql-bin? #?主數據庫端ID號? server-id?=?1? log-bin=/home/mysql/logs/binlog/bin-log max_binlog_size?=?500M binlog_cache_size?=?128K binlog-do-db?=?adb binlog-ignore-db?=?mysql log-slave-updates expire_logs_day=2 binlog_format="MIXED"
上面配置中各個參數的含義和相關注意項:
#服務器標志號,注意在配置文件中不能出現多個這樣的標識,如果出現多個的話mysql以第一個為準,一組主從中此標識號不能重復。 server-id?=?1 log-bin=/home/mysql/logs/binlog/bin-log?#開啟bin-log,并指定文件目錄和文件名前綴。 #每個bin-log最大大小,當此大小等于500M時會自動生成一個新的日志文件。一條記錄不會寫在2個日志文件中,所以有時日志文件會超過此大小。 max_binlog_size?=?500M? binlog_cache_size?=?128K?#日志緩存大小 binlog-do-db?=?adb?#需要同步的數據庫名字,如果是多個,就以此格式在寫一行即可。 binlog-ignore-db?=?mysql?#不需要同步的數據庫名字,如果是多個,就以此格式在寫一行即可。 #當Slave從Master數據庫讀取日志時更新新寫入日志中,如果只啟動log-bin?而沒有啟動log-slave-updates則Slave只記錄針對自己數據庫操作的更新。 log-slave-updates? expire_logs_day=2?#設置bin-log日志文件保存的天數,此參數mysql5.0以下版本不支持。 binlog_format="MIXED"?#設置bin-log日志文件格式為:MIXED,可以防止主鍵重復。
2、重啟mysql,創建用于同步的賬戶:
#?創建slave帳號slave,密碼111111? mysql>grant?replication?slave?on?*.*?to?'slave'@'%'?identified?by?'111111';? #?更新數據庫權限? mysql>flush?privileges;
3、查詢master的狀態
mysql>?show?master?status;? +------------------+----------+--------------+------------------+? |?File????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|? +------------------+----------+--------------+------------------+? |?mysql-bin.000009?|??196?|????|?????|? +------------------+----------+--------------+------------------+? 1?row?in?set
注:執行完這個步驟后不要再操作主數據庫了,防止主數據庫狀態值變化
三、從數據庫slave修改:
1、修改MySQL配置:
#?從數據庫端ID號? server-id?=2
2、執行同步命令
#?執行同步命令,設置主數據庫ip,同步帳號密碼,同步位置? mysql>change?master?to?master_host='192.168.1.2',master_user='slave',master_password='111111',master_log_file='mysql-bin.000009',master_log_pos=196;? #?開啟同步功能? mysql>start?slave;
3、檢查從數據庫狀態:
mysql>?show?slave?statusG;? ***************************?1.?row?***************************? ????Slave_IO_State:?Waiting?for?master?to?send?event? ?????Master_Host:?192.168.1.2? ?????Master_User:?slave_account? ?????Master_Port:?3306? ????Connect_Retry:?60? ????Master_Log_File:?mysql-bin.000009? ???Read_Master_Log_Pos:?196? ????Relay_Log_File:?vicky-relay-bin.000002? ????Relay_Log_Pos:?253? ??Relay_Master_Log_File:?mysql-bin.000009? ????Slave_IO_Running:?Yes? ???Slave_SQL_Running:?Yes? ????Replicate_Do_DB:? ???Replicate_Ignore_DB:? ???...? ???...
注:Slave_IO_Running及Slave_SQL_Running進程必須正常運行,即YES狀態,否則說明同步失敗。可用這兩項判斷從服務器是否掛掉
到這里,主從數據庫設置工作已經完成,自己可以新建數據庫和表,插入和修改數據,測試一下是否成功
四、其他可能用到的相關參數:
1、master端:
#?不同步哪些數據庫? binlog-ignore-db?=?mysql? binlog-ignore-db?=?test? binlog-ignore-db?=?information_schema? #?只同步哪些數據庫,除此之外,其他不同步? binlog-do-db?=?game? #?日志保留時間? expire_logs_days?=?10? #?控制binlog的寫入頻率。每執行多少次事務寫入一次? #?這個參數性能消耗很大,但可減小MySQL崩潰造成的損失? sync_binlog?=?5? #?日志格式,建議mixed? #?statement?保存SQL語句? #?row?保存影響記錄數據? #?mixed?前面兩種的結合? binlog_format?=?mixed
2、slave端:
#?停止主從同步? mysql>?stop?slave;? #?連接斷開時,重新連接超時時間? mysql>?change?master?to?master_connect_retry=50;? #?開啟主從同步? mysql>?start?slave;
以上連接超時設置,類似方式可用于設置主數據庫ip,同步帳號密碼,同步位置
判斷主從服務器是否正常運行代碼:
//在從服務器中執行以下語句 ?$sql?=?"show?slave?status"; ?$result?=?mysql_query($sql,?$slave_link); ?$row?=?mysql_fetch_assoc($result); ?$Slave_IO_Running?=?$row['Slave_IO_Running']; ?$Slave_SQL_Running?=?$row['Slave_SQL_Running']; ?//下面兩項為判斷標準 ?if?('Yes'?==?$Slave_IO_Running?&&?'Yes'?==?$Slave_SQL_Running)?{ ?}?else?{ ??$content?.=?"從數據庫(?$host?)掛掉了!!!?<br>"; ?}
總結
?以上就是詳解MySQL數據庫設置主從同步的方法?的內容,更多相關內容請關注PHP中文網(www.php.cn)!