共計 2019 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章主要介紹 MySQL 保證復制高可用的重要參數有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
expire_logs_days,binlog 清理的時間。
從庫上 relay-log-recovery = 1 和 relay-log-info-repository = TABLE; 保證了主從數據的一致性,不論從機怎么出錯都能保證,主從一致。
為什么呢?
首先說 SQL 線程,SQL 線程 apply 應用二進制日志,并且將 binlog 應用到的位置記錄到 relay-info.log 中。
并且并不是 relay log 應用一次就刷盤寫 relay-log.info 一次,而是一個參數指定,如下,意思是說回放 events 10000 次寫一次盤。這個就是為什么從庫 crash 了,出現 1062 錯誤。因為從庫已經插入了數據,但是文件 relay-log.info 并沒有記錄文件,當重啟后文件告訴數據庫還要執行一次操作,就會出現這個主鍵重復插入的錯誤。所以這個參數設置為 table 的,就滿足了一致性,避免了數據庫和文件的不同步問題。
IO 線程:
和 relay_log_info_repository 不同的是,單單把 master_info_repository 設置成 table 是不能解決,備庫 crash 了,從 IO 線程接收日志的一致性問題,因為 IO 線程接收日志寫的文件是 relay log 文件,而數據庫接收到主庫的日志到哪里寫的是 master-info.log 文件,(同步情況由 sync_master_info 決定) 這是兩個不同的文件,比如當 relay 接收到了日志,為 event2,但是此時 master-info.log 記錄的是 1,此時 crash 了,當重新啟動從庫時,master-info.log 告訴數據庫我才接收到 1,又重新接收了一次 2,這樣就重復了,即便是 master_info_repository 設置成 table 一樣不解決問題。但是報錯時,show slave status。最終作用到的都是 SQL 線程報錯。所以還要設置另外一個參數 relay-log-recovery=1
最后一個非常重要的參數:
把當前接收到的 relay log 清理掉。然后從 SQL Thread 應用到的位置,重新拉取 relay log。
但是要保證主庫 binlog 要保留,保留時間要夠,因為我見過的有的公司主從延遲一個月之久。
還有 read-only 的設置,5.7 有個新的權限 super_read_only 參數,設置為 on,大家都沒有權限,dba 也沒有。
SQL 線程高可用
將 SQL 回放的位置寫到 relay-info.log 中,沒執行到一個 event,就寫一次這個文件,那么性能會不會很差?。恳驗闆]有 fsync 所以文件記錄的會落后,將 relay_log_info_repository=TABLE(5.6 才有),將這次造作放在數據庫,原子操作。(從庫配置)
寫 10000 個 event 才 fsync 一次寫盤,那么就有一問題,如果設置為 1,有用嗎?沒用,有丟失一條記錄的可能。
sync_relay_log_info:這個參數和 sync_relay_log 參數一樣,當設置為 1 時,slave 的 I / O 線程每次接收到 master 發送過來的 binlog 日志都要寫入系統緩沖區,然后刷入 relay-log.info 里,這樣是最安全的,因為在崩潰的時候,你最多會丟失一個事務,但會造成磁盤的大量 I /O。當設置為 0 時,并不是馬上就刷入 relay-log.info 里,而是由操作系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁盤 I / O 操作。
IO 線程的高可用
接收到一個 event,寫 master.log 文件,表示接受到的位置,然后再去寫 relay log file,這時候發送 crash,又會有問題,同樣可以存表 master_info_repository。
master log 文件會落后,IO 線程會重新拉 master log 文件中后的 binlog,重復拉日志,SQL 線程就報錯了,最終錯誤的顯示都是 SQL 線程。
Relay-log-recovery=1,將當前接受到的所有 relay log
清除掉。然后以 SQL 線程運行到的位置重新拉取 thread。SQL 線程是可靠的,那么,還有什么問題呢?如果主庫上的二進制日志沒有了,那么也來不過來了,就有問題了,即便是基于 SQL 線程。但是線上有落后很久的情形。
master_info_repository=TABLE
從開啟并行復制,也一定設置為 table,性能有一倍的差距。
Read_only 與 super_read_only 的區別,有 super_priv 權限的用戶設置 read_only 還是可以寫入的,
從庫 super_read_only 也打
以上是“MySQL 保證復制高可用的重要參數有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!