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

MySQL日志文件——Binlog

2025-02-12 10:55:27 773

對(duì)于 MySQL 來(lái)說(shuō),日志文件尤為重要。MySQL 常見(jiàn)的日志文件有二進(jìn)制日志(Binlog)、通用查詢?nèi)罩荆℅eneral Log)、慢查詢?nèi)罩荆⊿low Log)、錯(cuò)誤日志(Error Log)、重做日志(Redo Log)、回滾日志(Undo Log)等。今天藍(lán)隊(duì)云會(huì)詳細(xì)介紹這些日志文件。

Binlog

Binlog基礎(chǔ)

Binlog包含描述數(shù)據(jù)庫(kù)修改的語(yǔ)句,如create table、update等數(shù)據(jù)變更語(yǔ)句,不會(huì)記錄類似select、show 等不修改數(shù)據(jù)的語(yǔ)句。如果想記錄所有的 SQL 語(yǔ)句,則可以使用General Log,此部分內(nèi)容將在下一節(jié)進(jìn)行詳細(xì)講解。下面通過(guò)例子(在沒(méi)有其他會(huì)話正在修改數(shù)據(jù)的MySQL環(huán)境中操作)展開(kāi)介紹。查看當(dāng)前Binlog的位點(diǎn):

image.png

創(chuàng)建一張表:

image.png

查看Binlog信息(其中的Binlog文件和位點(diǎn)都是通過(guò)執(zhí)行上面的show master status語(yǔ)句獲取的):

image.png

從上面的例子中可以看出,執(zhí)行的create table語(yǔ)句會(huì)記錄到Binlog中。

開(kāi)啟和關(guān)閉Binlog

如果要開(kāi)啟Binlog,就需要在配置文件的[mysqld]中加上如下語(yǔ)句:

image.png

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

image.png

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

image.pngimage.png


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

log-bin

則默認(rèn)存放在datadir下,Binlog的文件名為主機(jī)名后接Binlog的序列號(hào),如datadir為“/data/mysql/data/”,主機(jī)名為node1,Binlog的全路徑為如下形式:

image.png

一般建議指定一個(gè)基本名稱,防止更改主機(jī)名時(shí)出現(xiàn) Binlog 的文件名與之前不一致的現(xiàn)象。如果要關(guān)閉Binlog,就需要在配置文件中加上如下語(yǔ)句:

skip_log_bin

或者:

disable_log_bin

如果要關(guān)閉當(dāng)前會(huì)話的Binlog,則可以執(zhí)行如下語(yǔ)句

set sql_log_bin=0;

Binlog的作用

Binlog的作用主要有以下兩個(gè)。

  • 復(fù)制:主庫(kù)的變更先寫入Binlog,然后傳到從庫(kù)進(jìn)行回放。主從的具體原理會(huì)在第9章中詳細(xì)介紹。

  • 災(zāi)備:當(dāng)誤操作后,可以先把全備導(dǎo)入某個(gè)新的實(shí)例中,然后通過(guò)全備時(shí)間點(diǎn)到誤操作中間的Binlog解析出所有事務(wù)(需要注意的是,把誤操作這條SQL語(yǔ)句排除掉),并在新實(shí)例中執(zhí)行這些事務(wù),達(dá)到恢復(fù)到誤操作前一刻的狀態(tài)。

Binlog記錄的格式

Binlog可以設(shè)置為以下幾種日志格式。

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

  • row(基于行):會(huì)非常清楚地記錄每行數(shù)據(jù)被修改的細(xì)節(jié)。

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

MySQL會(huì)根據(jù)執(zhí)行的SQL語(yǔ)句選擇保存日志的方式。

幾種日志格式的優(yōu)點(diǎn)和缺點(diǎn)如表所示。

image.png

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

image.png

當(dāng)然,也支持動(dòng)態(tài)修改,修改參數(shù)binlog_format的全局值的方法如下:

image.png

修改參數(shù)binlog_format的會(huì)話級(jí)別的方法如下:

image.png

Binlog的解析

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

image.png

解析Binlog:

image.png

其中,--start-position表示開(kāi)始位點(diǎn),-vv表示顯示詳細(xì)信息。查看解析結(jié)果:

image.png

由上述內(nèi)容可以看出,執(zhí)行 create table test.b(id int)語(yǔ)句后,該語(yǔ)句就會(huì)記錄在Binlog中。

MySQL 8.0 Binlog加密

從MySQL 8.0.14開(kāi)始,可以對(duì)Binlog文件和中繼日志文件進(jìn)行加密,從而保護(hù)敏感數(shù)據(jù)??梢酝ㄟ^(guò)在配置文件的[mysqld]中加上如下語(yǔ)句開(kāi)啟Binlog加密:

image.png

查看Binlog列表:

image.png

由此可以發(fā)現(xiàn),最新的Binlog Encrypted已經(jīng)變?yōu)閅es。下面嘗試通過(guò)mysqlbinlog解析最新的Binlog,具體如下:

image.png

由此可以發(fā)現(xiàn),已經(jīng)解析不出結(jié)果。應(yīng)該使用MySQL的用戶密碼進(jìn)行解析才可以,具體如下:

image.png

--read-from-remote-server參數(shù)表示從MySQL服務(wù)中讀取Binlog,而不是讀取本地日志文件。讀取遠(yuǎn)程MySQL的Binlog要求遠(yuǎn)程MySQL實(shí)例正在運(yùn)行。

Binlog的清除

對(duì)于一個(gè)繁忙的MySQL實(shí)例,其Binlog增長(zhǎng)也是比較快的,因此,需要設(shè)置其保留天數(shù),如果磁盤即將滿,那么可能還要單獨(dú)刪除歷史 Binlog。本節(jié)主要介紹 Binlog的清除??梢允褂?purge binary logs 語(yǔ)句來(lái)刪除指定 Binlog 的文件名或指定時(shí)間之前的Binlog文件,具體示例如下。

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

image.png

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

image.png

刪除指定時(shí)間之前的Binlog文件:

image.png

當(dāng)然,一般還是建議設(shè)置expire_logs_days參數(shù)或binlog_expire_logs_seconds參數(shù)。expire_logs_days參數(shù)定義了日志保留天數(shù)。binlog_expire_logs_seconds參數(shù)定義了日志保留秒數(shù),MySQL 8.0建議設(shè)置這個(gè)參數(shù),在未來(lái)的版本中可能會(huì)廢除expire_logs_days參數(shù)。

當(dāng)Binlog存在的時(shí)間超過(guò)binlog_expire_logs_seconds參數(shù)設(shè)置的時(shí)間時(shí),則自動(dòng)刪除。有

時(shí)Binlog占用的磁盤空間會(huì)過(guò)大,如果要降低其保留時(shí)間,則可以進(jìn)行如下操作:

image.png

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

Binlog的落盤

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

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

  • sync_binlog=N,表示每N個(gè)事務(wù)Binlog同步一次到磁盤。當(dāng)操作系統(tǒng)崩潰時(shí),服務(wù)器提交的事務(wù)可能沒(méi)有被刷新到 Binlog 中,此時(shí)可能會(huì)丟失部分事務(wù),雖然設(shè)置比較大的值可以提高性能,但是數(shù)據(jù)丟失的風(fēng)險(xiǎn)也會(huì)增加。

Binlog相關(guān)的參數(shù)

  • max_binlog_size:?jiǎn)蝹€(gè)Binlog文件大小的最大值。

  • log-slave-update:從庫(kù)從主庫(kù)接收的更新是否記錄到從庫(kù)自身的Binlog中,如果從庫(kù)后面又接了從庫(kù),或者在從庫(kù)上做備份,或者M(jìn)ySQL 5.6主從復(fù)制使用了GTID模式(具體原因見(jiàn)9.2.1節(jié)),那么建議開(kāi)啟這個(gè)參數(shù)。

  • binlog-do-db:后面接庫(kù)名,表示當(dāng)前數(shù)據(jù)庫(kù)只記錄該參數(shù)設(shè)置的庫(kù)的 Binlog,其他庫(kù)都不記錄。

  • binlog-ignore-db:后面接庫(kù)名,表示當(dāng)前數(shù)據(jù)庫(kù)不記錄該參數(shù)設(shè)置的庫(kù)的Binlog,其他庫(kù)都記錄。


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


想了解更多相關(guān)技術(shù)小分享可以上藍(lán)隊(duì)云官網(wǎng)查閱,更多技術(shù)問(wèn)題,也可以直接咨詢。同時(shí),藍(lán)隊(duì)云整理了運(yùn)維必備的工具包免費(fèi)分享給大家使用,需要的朋友可以直接咨詢。


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

這條文檔是否有幫助解決問(wèn)題?

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

在文檔使用中是否遇到以下問(wèn)題: