通常少量延遲不是問題。如果要做到完全同步,對主數(shù)據(jù)庫性能勢必有影響。只要保證從數(shù)據(jù)庫是主數(shù)據(jù)庫在某個時間點的快照就成了。

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)高港免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
如果要更具體分析,需要詳細描述你的應(yīng)用場景
主從復(fù)制延遲的監(jiān)測,我以前的做法是通過比較show slave statusG中的兩個變量的差值(Read_Master_Log_Pos,Exec_Master_Log_Pos),將差值設(shè)置為一個自己認為合理的范圍,Seconds_Behind_Master 沒有適用過,今天做一次解析:
Seconds_Behind_Master 是通過比較 SQL THREAD 接受 events事件的時間戳(timestamp) 與IO THREAD 執(zhí)行事件 events時間戳的差值--秒數(shù)來確定slave 落后于master多少。如果主從機器的時間不同,該時間的計算也是不會受影響的(如果時間發(fā)生異常,則這個秒數(shù)的就不怎么可靠啦)
如果slave SQL thread 或者 slave I/O thread 或者沒有連接到master,那么該變量的值為NULL.
0:表示master slave 復(fù)制沒有延遲(大部分情況下是這個樣子)。
正值:表示slave落后于master的秒數(shù)。
在網(wǎng)絡(luò)很快的情況下,I/O thread 能夠很快的從master上獲取binlog到slave的 relay-log。這種情況下, seconds_behind_master的值能真正代表slave落后于master的秒數(shù)。在網(wǎng)絡(luò)很差的情況下,I/O thread 同步很慢,slave收到的二進制日志信息,SQL THREAD能夠很快的執(zhí)行。這個時候 seconds_behind_master 是0,這種情況下 slave落后于master很多。
為了排除網(wǎng)絡(luò)的干擾,我們可以參考percona 的工具 pt-heartbeat.
該工具可以計算出MySQL復(fù)制或者是PostgreSQL,它可以更新master或者監(jiān)控復(fù)制。它還可以從my.cnf 讀取配置。它借助timestmp的比較實現(xiàn)的,首先需要保證主從服務(wù)器時間必須要保持一致,通過與相同的一個NTP server同步時鐘。它需要在主庫上創(chuàng)建一個heartbeat的表,里面的時間戳ts就是當前的時間戳 now(),該結(jié)構(gòu)也會被復(fù)制到從庫上。表建好以后,會在主庫上以后臺進程的模式去執(zhí)行一行更新操作的命令,定期去向表中的插入數(shù)據(jù),這 個周期默認為1 秒,同時從庫也會在后臺執(zhí)行一個監(jiān)控命令,與主庫保持一致的周期+0.5S(默認0.5S延遲檢查)去比較,復(fù)制過來記錄的ts值與主庫上的同一條ts值,差值為0表示無延時,差值越大表示 延時的秒數(shù)越多。
1.網(wǎng)絡(luò)的延遲
由于mysql主從復(fù)制是基于binlog的一種異步復(fù)制,通過網(wǎng)絡(luò)傳送binlog文件,理所當然網(wǎng)絡(luò)延遲是主從不同步的絕大多數(shù)的原因,特別是跨機房的數(shù)據(jù)同步出現(xiàn)這種幾率非常的大,所以做讀寫分離,注意從業(yè)務(wù)層進行前期設(shè)計。
2.主從兩臺機器的負載不一致
由于mysql主從復(fù)制是主數(shù)據(jù)庫上面啟動1個io線程,而從上面啟動1個sql線程和1個io線程,當中任何一臺機器的負載很高,忙不過來,導(dǎo)致其中的任何一個線程出現(xiàn)資源不足,都將出現(xiàn)主從不一致的情況。
3.max_allowed_packet設(shè)置不一致
主數(shù)據(jù)庫上面設(shè)置的max_allowed_packet比從數(shù)據(jù)庫大,當一個大的sql語句,能在主數(shù)據(jù)庫上面執(zhí)行完畢,從數(shù)據(jù)庫上面設(shè)置過小,無法執(zhí)行,導(dǎo)致的主從不一致。
4.key自增鍵開始的鍵值跟自增步長設(shè)置不一致引起的主從不一致。
在主服務(wù)器上建立一個為從服務(wù)器進行復(fù)制使用的用戶。該賬戶必須授予 REPLICATION SLAVE 權(quán)限,由于僅僅是進行復(fù)制使用所以不需要再授予任何其它權(quán)限。
mysql GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'192.168.0.2' IDENTIFIED BY 'slavepasswd';
mysql FLUSH PRIVILEGES;
3、編輯主服務(wù)器的配置文件:/etc/my.cnf的[ mysqld ] 部分:
server-id = 本機數(shù)據(jù)庫 ID 標示,該部分還應(yīng)有一個server-id=Master_id選項,其中master_id必須為1到232之間的一個正整數(shù)值
log-bin = 二進制日志的位置和名稱
binlog-do-db = 需要備份的數(shù)據(jù)庫名,如果備份多個數(shù)據(jù)庫,重復(fù)設(shè)置這個選項即可
binlog-ignore-db = 不需要備份的數(shù)據(jù)庫苦命,如果備份多個數(shù)據(jù)庫,重復(fù)設(shè)置這個選項即可
1、首先要在本地建立兩個mysql服務(wù)(參考這里),指定不同的端口。我這里一個主(3306),一個從(3307)。 2、然后修改主配置文件
標題名稱:mysql復(fù)制延遲怎么辦 mysql 延遲復(fù)制
文章地址:http://chinadenli.net/article46/higjhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、定制開發(fā)、靜態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)