主頁(yè) > 知識(shí)庫(kù) > 詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法

詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法

熱門(mén)標(biāo)簽:地圖標(biāo)注百度競(jìng)價(jià) 西藏地圖標(biāo)注改進(jìn)點(diǎn) 如何辦理400客服電話 外呼系統(tǒng)怎樣才能不封號(hào) 地圖標(biāo)注專(zhuān)員入駐 外呼系統(tǒng)線路經(jīng)常出問(wèn)題嗎 安陽(yáng)手機(jī)自動(dòng)外呼系統(tǒng)原理是什么 神行者百貨商場(chǎng)地圖標(biāo)注 地圖標(biāo)注什么軟件好用

簡(jiǎn)介

MySQL主從同步是目前使用比較廣泛的數(shù)據(jù)庫(kù)架構(gòu),技術(shù)比較成熟,配置也不復(fù)雜,特別是對(duì)于負(fù)載比較大的網(wǎng)站,主從同步能夠有效緩解數(shù)據(jù)庫(kù)讀寫(xiě)的壓力。

MySQL主從同步的機(jī)制:

MySQL同步的流程大致如下:

     1、主服務(wù)器(master)將變更事件(更新、刪除、表結(jié)構(gòu)改變等等)寫(xiě)入二進(jìn)制日志(master log)。

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

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

MySQL主從同步的作用:

     1、可以作為一種備份機(jī)制,相當(dāng)于熱備份(在從備份,避免備份期間影響主服務(wù)器服務(wù))

     2、可以用來(lái)做讀寫(xiě)分離,均衡數(shù)據(jù)庫(kù)負(fù)載(主寫(xiě)從讀)

     3、當(dāng)主服務(wù)器出現(xiàn)問(wèn)題時(shí),可以切換到從服務(wù)器。

MySQL主從同步的步驟:

一、準(zhǔn)備操作:

1、主從數(shù)據(jù)庫(kù)版本一致,建議版本5.5以上

2、主從數(shù)據(jù)庫(kù)數(shù)據(jù)一致

二、主數(shù)據(jù)庫(kù)master修改:

1、修改MySQL配置:

# /etc/my.cnf 
log-bin = mysql-bin 

# 主數(shù)據(jù)庫(kù)端ID號(hào) 
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"

上面配置中各個(gè)參數(shù)的含義和相關(guān)注意項(xiàng):

#服務(wù)器標(biāo)志號(hào),注意在配置文件中不能出現(xiàn)多個(gè)這樣的標(biāo)識(shí),如果出現(xiàn)多個(gè)的話mysql以第一個(gè)為準(zhǔn),一組主從中此標(biāo)識(shí)號(hào)不能重復(fù)。
server-id = 1

log-bin=/home/mysql/logs/binlog/bin-log #開(kāi)啟bin-log,并指定文件目錄和文件名前綴。

#每個(gè)bin-log最大大小,當(dāng)此大小等于500M時(shí)會(huì)自動(dòng)生成一個(gè)新的日志文件。一條記錄不會(huì)寫(xiě)在2個(gè)日志文件中,所以有時(shí)日志文件會(huì)超過(guò)此大小。
max_binlog_size = 500M 

binlog_cache_size = 128K #日志緩存大小

binlog-do-db = adb #需要同步的數(shù)據(jù)庫(kù)名字,如果是多個(gè),就以此格式在寫(xiě)一行即可。

binlog-ignore-db = mysql #不需要同步的數(shù)據(jù)庫(kù)名字,如果是多個(gè),就以此格式在寫(xiě)一行即可。

#當(dāng)Slave從Master數(shù)據(jù)庫(kù)讀取日志時(shí)更新新寫(xiě)入日志中,如果只啟動(dòng)log-bin 而沒(méi)有啟動(dòng)log-slave-updates則Slave只記錄針對(duì)自己數(shù)據(jù)庫(kù)操作的更新。
log-slave-updates 

expire_logs_day=2 #設(shè)置bin-log日志文件保存的天數(shù),此參數(shù)mysql5.0以下版本不支持。

binlog_format="MIXED" #設(shè)置bin-log日志文件格式為:MIXED,可以防止主鍵重復(fù)。

2、重啟mysql,創(chuàng)建用于同步的賬戶(hù):

# 創(chuàng)建slave帳號(hào)slave,密碼111111 
mysql>grant replication slave on *.* to 'slave'@'%' identified by '111111'; 

# 更新數(shù)據(jù)庫(kù)權(quán)限 
mysql>flush privileges; 

3、查詢(xún)master的狀態(tài)

mysql> show master status; 
+------------------+----------+--------------+------------------+ 
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+------------------+----------+--------------+------------------+ 
| mysql-bin.000009 |  196 |    |     | 
+------------------+----------+--------------+------------------+ 
1 row in set 

注:執(zhí)行完這個(gè)步驟后不要再操作主數(shù)據(jù)庫(kù)了,防止主數(shù)據(jù)庫(kù)狀態(tài)值變化

三、從數(shù)據(jù)庫(kù)slave修改:

1、修改MySQL配置:

# 從數(shù)據(jù)庫(kù)端ID號(hào) 
server-id =2 

2、執(zhí)行同步命令

# 執(zhí)行同步命令,設(shè)置主數(shù)據(jù)庫(kù)ip,同步帳號(hào)密碼,同步位置 
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; 

# 開(kāi)啟同步功能 
mysql>start slave; 

3、檢查從數(shù)據(jù)庫(kù)狀態(tài):

mysql> show slave status\G; 
*************************** 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進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則說(shuō)明同步失敗。可用這兩項(xiàng)判斷從服務(wù)器是否掛掉

到這里,主從數(shù)據(jù)庫(kù)設(shè)置工作已經(jīng)完成,自己可以新建數(shù)據(jù)庫(kù)和表,插入和修改數(shù)據(jù),測(cè)試一下是否成功

四、其他可能用到的相關(guān)參數(shù):

1、master端:

# 不同步哪些數(shù)據(jù)庫(kù) 
binlog-ignore-db = mysql 
binlog-ignore-db = test 
binlog-ignore-db = information_schema 

# 只同步哪些數(shù)據(jù)庫(kù),除此之外,其他不同步 
binlog-do-db = game 

# 日志保留時(shí)間 
expire_logs_days = 10 

# 控制binlog的寫(xiě)入頻率。每執(zhí)行多少次事務(wù)寫(xiě)入一次 
# 這個(gè)參數(shù)性能消耗很大,但可減小MySQL崩潰造成的損失 
sync_binlog = 5 

# 日志格式,建議mixed 
# statement 保存SQL語(yǔ)句 
# row 保存影響記錄數(shù)據(jù) 
# mixed 前面兩種的結(jié)合 
binlog_format = mixed 

2、slave端:

# 停止主從同步 
mysql> stop slave; 

# 連接斷開(kāi)時(shí),重新連接超時(shí)時(shí)間 
mysql> change master to master_connect_retry=50; 

# 開(kāi)啟主從同步 
mysql> start slave; 

以上連接超時(shí)設(shè)置,類(lèi)似方式可用于設(shè)置主數(shù)據(jù)庫(kù)ip,同步帳號(hào)密碼,同步位置

判斷主從服務(wù)器是否正常運(yùn)行代碼:

 //在從服務(wù)器中執(zhí)行以下語(yǔ)句
 $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'];

 //下面兩項(xiàng)為判斷標(biāo)準(zhǔn)
 if ('Yes' == $Slave_IO_Running  'Yes' == $Slave_SQL_Running) {

 } else {
  $content .= "從數(shù)據(jù)庫(kù)( $host )掛掉了?。?! br/>";
 }

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

您可能感興趣的文章:
  • Mysql數(shù)據(jù)庫(kù)的主從同步配置
  • Mysql 主從數(shù)據(jù)庫(kù)同步(centos篇)
  • mysql數(shù)據(jù)庫(kù) 主從復(fù)制的配置方法
  • MYSQL主從數(shù)據(jù)庫(kù)同步備份配置的方法
  • 解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法

標(biāo)簽:張掖 萍鄉(xiāng) 貴港 酒泉 衡水 AXB 雞西 阜陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法》,本文關(guān)鍵詞  詳解,MySQL,數(shù)據(jù)庫(kù),設(shè)置,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解MySQL數(shù)據(jù)庫(kù)設(shè)置主從同步的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章