詳解MySQL數據庫設置主從同步的方法

簡介

mysql主從同步是目前使用比較廣泛的數據庫架構,技術比較成熟,配置也不復雜,特別是對于負載比較大的網站,主從同步能夠有效緩解數據庫讀寫的壓力。

mysql主從同步的機制:

mysql同步的流程大致如下:

? ? 1、主服務器(master)將變更事件(更新、刪除、表結構改變等等)寫入二進制日志(master log)。

? ? 2、從服務器(slave)的io線程從主服務器(binlog dump線程)獲取二進制日志,并在本地保存一份自己的二進制日志(relay log)

? ? 3、從服務器的sql線程讀取本地日志(relay log),并重演變更事件。

詳解MySQL數據庫設置主從同步的方法

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,同步帳號密碼,同步位置

詳解MySQL數據庫設置主從同步的方法

判斷主從服務器是否正常運行代碼:

//在從服務器中執行以下語句  ?$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?&amp;&amp;?'Yes'?==?$Slave_SQL_Running)?{    ?}?else?{  ??$content?.=?"從數據庫(?$host?)掛掉了!!!?<br>";  ?}

總結

?以上就是詳解MySQL數據庫設置主從同步的方法?的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享