mysql 開發進階篇系列 19 MySQL Server(innodb_flush_log_at_trx_commit與sync_binlog)

来源:https://www.cnblogs.com/MrHSR/archive/2018/08/10/9454543.html
-Advertisement-
Play Games

一. innodb_flush_log_at_trx_commit 這個參數名稱有個log,一看就是與日誌有關。是指:用來控制緩衝區(log buffer)中的數據寫入到日誌文件(log file),以及日誌文件數據刷新到磁碟(flush)的操作時機。對這個參數的設置值,可以對資料庫在性能與數據安全 ...


一. innodb_flush_log_at_trx_commit

 這個參數名稱有個log,一看就是與日誌有關。是指:用來控制緩衝區(log buffer)中的數據寫入到日誌文件(log file),以及日誌文件數據刷新到磁碟(flush)的操作時機。對這個參數的設置值,可以對資料庫在性能與數據安全之間,進行折中。 

  參數值解釋:

    當參數是0:日誌緩衝數據會,每秒一次地寫入到日誌文件,並且把日誌文件刷新到磁碟操作。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。

    當參數是1:每次事務提交時,日誌緩衝被寫到日誌文件,並且對日誌文件做磁碟刷新操作,該模式為系統預設。但由於每次事務都需要進行磁碟I/O,所以也最慢。

    當參數是2:每次事務提交時,日誌緩衝被寫到日誌文件,但不對日誌文件做磁碟刷新操作。對日誌文件每秒執行一次,刷到磁碟操作。

  當設置innodb_flush_log_at_trx_commit=1時, 是預設值,也是最安全的設置,但是在這種模式下性能有一定的損失。 如果設置成0或者2 性能會有所改善,但有數據丟失的風險。
  設置成0則資料庫崩潰的時候,那些沒有被寫入日誌文件的事務丟失,最多丟失1秒鐘的事務,是最不安全的,但也是效率最高的。
  設置成2則只是沒有刷新到磁碟,但已經寫入日誌文件,所以只要操作系統沒有崩潰, 那麼並沒有數據丟失, 比設置成0更安全。
  在mysql官方中, 為了確保事務的持久性和複製設置的一致性,都是建議將這個參數值設置為1。對於一些數據一致性和完整性要求不高的應用,配置為 2 就足夠了;如果為了最高性能,可以設置為 0。有些應用,如支付服務,對一致性和完整性要求很高,所以即使最慢,也最好設置為 1。

參數值

數據安全性

I/O性能

0

安全最差。當資料庫崩潰,有丟失1秒鐘的事務風險

最優

1

安全最好。無丟失數據

最差

2

安全折中。當操作系統崩潰, 有丟失1秒鐘的事務風險

折中

  1.1 查看日誌提交方式

  SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';

    

  1.2 修改參數值

           還是一樣找到my.cnf, 修改參數值

           [root@xuegod64 ~]# cd /etc

           [root@xuegod64 etc]# vim my.cnf
    

    [root@xuegod64 ~]# systemctl stop mysqld.service

    [root@xuegod64 ~]# systemctl start  mysqld.service

-- 再次查看
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';

    

二. sync_binlog  

  這個參數是對於MySQL系統來說是至關重要的,他不僅影響到Binlog對MySQL所帶來的性能損耗,而且還影響到MySQL中數據的完整性。在MySQL中系統預設的設置是sync_binlog=1。對於“sync_binlog”參數的各種設置的說明如下:

  sync_binlog=0:當事務提交之後,不主動刷新二進位日誌文件的數據到磁碟上,而是由操作系統決定。

  sync_binlog=n:每向二進位日誌文件寫入N條SQL或N個事務後,則把二進位日誌文件的數據刷新到磁碟上。

  而當設置為“1”的時候,是最安全但是性能損耗最大的設置。因為當設置為1的時候,即使系統Crash,也最多丟失binlog_cache中未完成的一個事務,對實際數據沒有任何實質性影響。|

--  查看binlog寫入方式
SHOW VARIABLES LIKE 'sync_binlog';

  

  總結: 在數據安全與性能以日誌文件作為出發點時,我認為功能上與sql server 的數據恢復模式比較相像,但實現的思路是不一樣的。
  innodb_flush_log_at_trx_commit和sync_binlog是MySQL innodb引擎的兩個重要的參數,其中innodb_flush_log_at_trx_commit是將事務日誌從innodb log buffer刷新到磁碟,sync_binlog是將二進位日誌文件刷新到磁碟上。
  innodb_flush_log_at_trx_commit和sync_binlog 兩個參數是控制MySQL 磁碟寫入策略以及數據安全性的關鍵參數,當兩個參數都設置為1的時候寫入性能最差,
網上也有說將innodb_flush_log_at_trx_commit=2,sync_binlog=500 或1000。有說對於高併發事務的系統來說,“sync_binlog”設置為0和設置為1的系統寫入性能差距可能高達5倍甚至更多。總體上還是要根據業務來判斷,在性能和安全上做個選擇。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. linux中 xl2tpd VPN連接需要兩個程式 xl2tpd 和pppd並且pppd包含l2tpd.so庫。 並且需要兩個配置文件 一個xl2tpd配置文件一個pppd配置文件當xl2tpd啟動時會調用pppd. root@router:~/xl2tpd# cat options.xl2t ...
  • 您的Web瀏覽器會保留您訪問的每個網頁的歷史記錄,以便您可以輕鬆返回之前看到的內容。那麼為什麼不讓您的操作系統跟蹤您所處理的每個文件?從2017年12月發佈的 Insider Build 17063開始,Windows 10有一項名為Timeline的新功能,可以跟蹤您打開的每個文件以及您訪問過的每 ...
  • [20180810]exadata--豆腐渣系統的保護神.txt--//最近一段時間,一直在看exdata方面的書籍,我個人的感覺exadata並非善長oltp系統,能通過OLTP獲得好處的就算exadata的快閃記憶體(也叫--//智能快閃記憶體).當然大部分系統負載類型都是混合型的,但是如果你系統OLTP占 ...
  • 占座 ...
  • 1、安裝使用hadoop之前要首先安裝java JDK,若無安裝JDk,請先安裝JDK :https://www.cnblogs.com/dongxiucai/p/9391841.html 2、安裝Hadoop 1、下載tar包 hadoop-2.7.3.tar.gz 2、tar開 tar -xzv ...
  • 1.基本概念 開窗函數分為兩個部分分別是 1.聚合,排名,偏移,分佈函數 。 2.開窗分區,排序,框架。 下麵舉個例子 sum(val) 就是集合函數 over() 就是開窗 PARTITION BY empid 就是開窗分區(分組) ORDER BY ordermonth 開窗排序 ROWS BE ...
  • 下載地址 : https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 解壓zip 解壓完之後的目錄 在裡面新建一個my.ini文件 文件內容如下 1、打開 win+r cmd 2、d: 回車 進入mysql所在的盤符 cd ...
  • /*SELECT COUNT(*) FROM DICT_ZGY_201808;--135430SELECT * FROM DICT_ZGY_201808_5;SELECT T.USERNAME,T.CREATED FROM DBA_USERS T WHERE T.ACCOUNT_STATUS='OP ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...