手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

幫助中心 >  行業資訊 >  云計算 >  MySQL日志文件——Binlog

MySQL日志文件——Binlog

2025-02-12 10:55:27 36

對于 MySQL 來說,日志文件尤為重要。MySQL 常見的日志文件有二進制日志(Binlog)、通用查詢日志(General Log)、慢查詢日志(Slow Log)、錯誤日志(Error Log)、重做日志(Redo Log)、回滾日志(Undo Log)等。今天藍隊云會詳細介紹這些日志文件。

Binlog

Binlog基礎

Binlog包含描述數據庫修改的語句,如create table、update等數據變更語句,不會記錄類似select、show 等不修改數據的語句。如果想記錄所有的 SQL 語句,則可以使用General Log,此部分內容將在下一節進行詳細講解。下面通過例子(在沒有其他會話正在修改數據的MySQL環境中操作)展開介紹。查看當前Binlog的位點:

image.png

創建一張表:

image.png

查看Binlog信息(其中的Binlog文件和位點都是通過執行上面的show master status語句獲取的):

image.png

從上面的例子中可以看出,執行的create table語句會記錄到Binlog中。

開啟和關閉Binlog

如果要開啟Binlog,就需要在配置文件的[mysqld]中加上如下語句:

image.png

表示 Binlog 的存放路徑為“/data/mysql/binlog/”,文件名為 mysql-bin 后接 Binlog的序列號。例如:

image.png

為了跟蹤使用了哪些Binlog文件,mysqld還創建了一個Binlog索引文件,其中包含Binlog文件的名稱。在默認情況下,該名稱與Binlog文件具有相同的基本名稱,擴展名為“.index”。如上面查詢的內容為mysql-bin.index。在本例中,其內容為如下形式:

image.pngimage.png


如果沒有指定文件名和路徑,在[mysqld]中的配置如下:

log-bin

則默認存放在datadir下,Binlog的文件名為主機名后接Binlog的序列號,如datadir為“/data/mysql/data/”,主機名為node1,Binlog的全路徑為如下形式:

image.png

一般建議指定一個基本名稱,防止更改主機名時出現 Binlog 的文件名與之前不一致的現象。如果要關閉Binlog,就需要在配置文件中加上如下語句:

skip_log_bin

或者:

disable_log_bin

如果要關閉當前會話的Binlog,則可以執行如下語句

set sql_log_bin=0;

Binlog的作用

Binlog的作用主要有以下兩個。

  • 復制:主庫的變更先寫入Binlog,然后傳到從庫進行回放。主從的具體原理會在第9章中詳細介紹。

  • 災備:當誤操作后,可以先把全備導入某個新的實例中,然后通過全備時間點到誤操作中間的Binlog解析出所有事務(需要注意的是,把誤操作這條SQL語句排除掉),并在新實例中執行這些事務,達到恢復到誤操作前一刻的狀態。

Binlog記錄的格式

Binlog可以設置為以下幾種日志格式。

  • statement(基于 SQL 語句的格式):每條會修改數據的 SQL 語句都會記錄在Binlog中,不需要記錄每行的變化。

  • row(基于行):會非常清楚地記錄每行數據被修改的細節。

  • mixed(混合模式):以上兩種格式的混合使用,默認采用的 statement 格式保存Binlog,statement格式無法準確復制的操作可以使用row格式保存Binlog。

MySQL會根據執行的SQL語句選擇保存日志的方式。

幾種日志格式的優點和缺點如表所示。

image.png

Binlog記錄的格式由參數binlog_format控制,如果要設置為row格式,則在[mysqld]中加上如下語句:

image.png

當然,也支持動態修改,修改參數binlog_format的全局值的方法如下:

image.png

修改參數binlog_format的會話級別的方法如下:

image.png

Binlog的解析

Binlog文件不能直接查看,需要通過mysqlbinlog工具解析。例如,在row格式下,解析Binlog的方法如下。首先執行create語句:

image.png

解析Binlog:

image.png

其中,--start-position表示開始位點,-vv表示顯示詳細信息。查看解析結果:

image.png

由上述內容可以看出,執行 create table test.b(id int)語句后,該語句就會記錄在Binlog中。

MySQL 8.0 Binlog加密

從MySQL 8.0.14開始,可以對Binlog文件和中繼日志文件進行加密,從而保護敏感數據。可以通過在配置文件的[mysqld]中加上如下語句開啟Binlog加密:

image.png

查看Binlog列表:

image.png

由此可以發現,最新的Binlog Encrypted已經變為Yes。下面嘗試通過mysqlbinlog解析最新的Binlog,具體如下:

image.png

由此可以發現,已經解析不出結果。應該使用MySQL的用戶密碼進行解析才可以,具體如下:

image.png

--read-from-remote-server參數表示從MySQL服務中讀取Binlog,而不是讀取本地日志文件。讀取遠程MySQL的Binlog要求遠程MySQL實例正在運行。

Binlog的清除

對于一個繁忙的MySQL實例,其Binlog增長也是比較快的,因此,需要設置其保留天數,如果磁盤即將滿,那么可能還要單獨刪除歷史 Binlog。本節主要介紹 Binlog的清除。可以使用 purge binary logs 語句來刪除指定 Binlog 的文件名或指定時間之前的Binlog文件,具體示例如下。

示例一,刪除指定Binlog之前的文件:

image.png

示例二,刪除指定時間之前的Binlog文件。查看Binlog文件:

image.png

刪除指定時間之前的Binlog文件:

image.png

當然,一般還是建議設置expire_logs_days參數或binlog_expire_logs_seconds參數。expire_logs_days參數定義了日志保留天數。binlog_expire_logs_seconds參數定義了日志保留秒數,MySQL 8.0建議設置這個參數,在未來的版本中可能會廢除expire_logs_days參數。

當Binlog存在的時間超過binlog_expire_logs_seconds參數設置的時間時,則自動刪除。有

時Binlog占用的磁盤空間會過大,如果要降低其保留時間,則可以進行如下操作:

image.png

如上所示,縮短保留時間后,需要執行flush logs語句才能刪除之前的Binlog

Binlog的落盤

Binlog同步到磁盤的頻率由sync_binlog參數控制。sync_binlog參數大致有以下幾種配置。

  • sync_binlog=0,禁用MySQL服務將Binlog同步到磁盤的功能,是由操作系統控制 Binlog 的刷盤。在這種情況下,性能比較好,但是當操作系統崩潰時可能會丟失部分事務。- sync_binlog=1,每個事務都會同步到磁盤。這是最安全的設置,但是磁盤寫入次數的增加可能會導致性能下降。

  • sync_binlog=N,表示每N個事務Binlog同步一次到磁盤。當操作系統崩潰時,服務器提交的事務可能沒有被刷新到 Binlog 中,此時可能會丟失部分事務,雖然設置比較大的值可以提高性能,但是數據丟失的風險也會增加。

Binlog相關的參數

  • max_binlog_size:單個Binlog文件大小的最大值。

  • log-slave-update:從庫從主庫接收的更新是否記錄到從庫自身的Binlog中,如果從庫后面又接了從庫,或者在從庫上做備份,或者MySQL 5.6主從復制使用了GTID模式(具體原因見9.2.1節),那么建議開啟這個參數。

  • binlog-do-db:后面接庫名,表示當前數據庫只記錄該參數設置的庫的 Binlog,其他庫都不記錄。

  • binlog-ignore-db:后面接庫名,表示當前數據庫不記錄該參數設置的庫的Binlog,其他庫都記錄。


綜上所述,二進制日志(Binlog)在 MySQL 中扮演著極為重要的角色,無論是主從復制、數據災備,還是日常的數據管理,都離不開它。了解 Binlog 的各項特性、配置方法及相關操作,有助于數據庫管理員更好地管理 MySQL 數據庫,保障數據的安全與穩定。


想了解更多相關技術小分享可以上藍隊云官網查閱,更多技術問題,也可以直接咨詢。同時,藍隊云整理了運維必備的工具包免費分享給大家使用,需要的朋友可以直接咨詢。


提交成功!非常感謝您的反饋,我們會繼續努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: