Navicat 部落格

2018 年 12 月 4 日,由 Robert Gravelle 撰寫

記錄是關於記錄資料庫中發生的事情。就像有些人可能會保留個人日誌來記下他們日常生活中發生的事情一樣,資料庫記錄檔案會追踪使用者登入和交易等事情。更重要的是,有效的記錄檔案應包括有關存取控制和輸入驗證失敗的項目。難怪 MySQL 在預設情況下唯一啟用的記錄是錯誤記錄(至少在Windows 上是)。

上週的文章簡介了 MySQL 中不同的記錄類型,重點介紹了其中最重要的幾種記錄-錯誤、一般、二進位和慢速記錄,並已涵蓋了第一種和第二種。今天我們會更詳細地介紹二進位記錄,而慢速記錄將留待第 3 部分。

二進位記錄中記錄的語句

二進位記錄用於儲存關於資料庫變更的事件,例如資料表的建立作業或透過 INSERT 和 UPDATE 等語句變更資料表資料。除了使用以列為基礎的記錄外,它還儲存一些有可能作出變更的語句(例如刪除不存在列的 DELETE 語句)的事件(如需此內容的詳細資訊,請參閱下方)。因此,二進位記錄不包含沒有修改資料的語句,例如 SELECT 或 SHOW 等,這些可以在一般查詢記錄中找到。

二進位記錄有兩個重要用途:

  • 對於復寫,主復寫伺服器上的二進位記錄提供要傳送到從伺服器的資料變更的記錄。實際上,主伺服器將其二進位記錄中包含的事件傳送到其從伺服器,讓它們執行相同的命令,作出與主伺服器上相同的資料變更。
  • 某些資料復原作業會使用二進位記錄。還原備份後,將重新執行二進位記錄中與備份相關的事件,以便將資料庫同步到執行備份時的位置。

儘管有這些非常重要的用途,但預設情況下二進位記錄是停用的,因為它會稍微降低效能。但是,二進位記錄在設定複寫時和從備份還原時提供好處通常會超越這種輕微的效能影響。

二進位記錄格式

MySQL 為二進位記錄提供了三種記錄格式,每種格式都有自己的優點和缺點。與其他記錄不同,你無法使用簡單的 ON/OFF 開關啟用它。相反,你必須使用「--binlog-format = type」啟動 MySQL 伺服器來選擇二進位記錄的格式。每種類型的確切語句如下所述:

  • 以語句為基礎

    以語句為基礎的記錄記錄了所有變更資料表的資料或結構的 SQL 語句。使用 --binlog-format=STATEMENT 啟用。

    某些非決定性語句可能對複寫來說是不安全的。如果 MySQL 判斷為這種情況,它將發出警告「Statement may not be safe to log in statement format」。

  • 以列為基礎

    在以列為基礎的記錄中,主伺服器將事件寫入二進位記錄,以指示影響各個資料表列的方式。因此,資料表必須總是包含主索引鍵以確保可以有效地識別列。你可以使用 --binlog-format=ROW 啟動伺服器來告訴它使用以列為基礎的記錄。

  • 混合

    第三種選項是混合記錄。使用這個記錄格式時,預設是使用以語句為基礎的記錄,但在某些情況下,記錄模式會自動切換到以列為基礎。若要使用混合記錄,請使用選項 --binlog-format=MIXED 啟動 MySQL。


    圖 1-在 Navicat 的伺服器監控工具中的 binlog_format 伺服器變數
Navicat 文章
頻道記錄
分享
部落格封存檔