MySQL?打開binlog日志的方法及注意事項
知識回顧:
binlog
是一個二進制格式的文件,記錄了對 MySQL 數(shù)據(jù)庫執(zhí)行更改的所有 寫操作,例如更改數(shù)據(jù)庫表和更改內(nèi)容的 SQL 語句都會記錄到 binlog 里,但是不會記錄 SELECT
和 SHOW
這類操作。
一、默認狀態(tài)
在MySQL 5.7及以上版本中,binlog默認是關(guān)閉的,而在MySQL 8.0版本中,binlog默認是開啟的。具體表現(xiàn)如下:
MySQL 5.7及以下版本:
- 默認關(guān)閉:安裝后需要手動配置開啟
- 原因:早期版本認為不是所有環(huán)境都需要二進制日志功能
MySQL 8.0版本:
- 默認開啟:安裝后自動啟用binlog
- 原因:
- 增強的數(shù)據(jù)安全考慮
- 為Group Replication等新功能提供基礎(chǔ)支持
- 符合現(xiàn)代數(shù)據(jù)庫的運維需求
補充:為什么版本間存在差異?
MySQL 8.0 改為默認開啟 binlog 主要基于以下考慮:
數(shù)據(jù)安全:即使沒有配置主從復(fù)制,binlog也能用于時間點恢復(fù)。
新功能依賴:Group Replication、InnoDB Cluster 等都需要 binlog。
現(xiàn)代硬件性能:現(xiàn)代服務(wù)器通常有能力承擔 binlog 的額外開銷。
二、如何檢查 binlog 狀態(tài)
您可以通過以下命令查看當前 binlog 是否啟用:
SHOW VARIABLES LIKE '%log_bin%';
三、如何開啟 binlog
3.1 臨時開啟(重啟后失效)
如果只是臨時測試,可以通過 MySQL 命令行開啟(無需重啟服務(wù)):
SET GLOBAL log_bin = ON; SET GLOBAL binlog_format = 'ROW'; -- 推薦使用ROW格式 SET GLOBAL sync_binlog = 1; -- 每次事務(wù)提交都刷盤
3.2 永久開啟(需修改配置文件)
1)找到 MySQL 配置文件
- Linux:
/etc/my.cnf
或/etc/msql/my.cnf
- Windows:
my.ini
(通常在 MySQL 安裝目錄)
2)添加以下配置(在 [mysqld] 段)
[mysqld] # 基礎(chǔ)配置 # 啟用binlog并設(shè)置文件名前綴 # 注意1:確保目錄存在,否則會啟動失敗 # 注意2:指定目錄需要用反斜杠/或雙反斜杠\\ log_bin = D:/java/mysql-5.7.33-winx64/binlog/mysql-bin # 服務(wù)器唯一標識(主從復(fù)制必需),默認值0 server_id=1 # 推薦使用ROW格式 binlog_format = ROW # 自動清理7天前的日志 expire_logs_days = 7 # 增強持久性配置 # 每次事務(wù)提交都刷盤(最安全但性能略有影響) sync_binlog = 1 # 記錄完整的行數(shù)據(jù) binlog_row_image = FULL
log_bin = mysql-bin
- 作用:啟用二進制日志(binlog)并設(shè)置文件名前綴
- 默認值:
- MySQL 5.7及以下:
OFF
(默認關(guān)閉) - MySQL 8.0+:
ON
(默認開啟,前綴為binlog
)
- MySQL 5.7及以下:
- 說明:
- 啟用后生成文件如
mysql-bin.000001
、mysql-bin.000002
- 生產(chǎn)環(huán)境必須開啟(主從復(fù)制/數(shù)據(jù)恢復(fù)依賴)
- 啟用后生成文件如
server_id=1
- 作用:服務(wù)器唯一標識(主從復(fù)制必需)
- 默認值:
0
(未設(shè)置,主從復(fù)制會失?。?/li> - 說明:
- 主從環(huán)境中每個實例必須配置唯一ID
- 單機可設(shè)為1,集群中需分配不同值(如1,2,3…)
binlog_format = ROW
- 作用:指定binlog記錄格式
- 默認值:
- MySQL 5.7+:
ROW
- 更早版本:
STATEMENT
- MySQL 5.7+:
- 可選值:
ROW
:記錄行數(shù)據(jù)變更(推薦,最安全)STATEMENT
:記錄原始SQL(有主從不一致風險)MIXED
:混合模式
expire_logs_days = 7
- 作用:自動清理N天前的binlog
- 默認值:
0
(不自動清理) - 說明:
- 與
binlog_expire_logs_seconds
沖突(8.0+優(yōu)先用后者) - 生產(chǎn)環(huán)境建議設(shè)置(避免磁盤占滿)
- 與
sync_binlog = 1
作用:控制binlog刷盤頻率
默認值:
0
(由系統(tǒng)決定刷盤時機)可選值:
0
:依賴系統(tǒng)緩存,性能高但可能丟失事務(wù)1
:每次事務(wù)提交都刷盤(最安全,性能略低)N
:每N次事務(wù)提交刷盤(平衡安全性與性能)
binlog_row_image = FULL
作用:ROW格式下記錄的行數(shù)據(jù)內(nèi)容
默認值:
FULL
(MySQL 5.6+)可選值:
FULL
:記錄修改前后的完整行數(shù)據(jù)(推薦)MINIMAL
:僅記錄被修改的列+主鍵NOBLOB
:排除未修改的BLOB/TEXT列
3)重啟 MySQL 服務(wù)
# Linux系統(tǒng) sudo systemctl restart mysqld # Windows 通過服務(wù)管理器重啟MySQL服務(wù)
3.3 驗證是否開啟成功
- 方式一:重啟后查看指定目錄下是否存在binlog
- 方式二:通過命令查看
-- 檢查binlog狀態(tài) SHOW VARIABLES LIKE '%log_bin%'; -- 查看當前binlog文件 SHOW BINARY LOGS; -- 查看binlog格式 SHOW VARIABLES LIKE 'binlog_format';
3.4 查看 binlog 內(nèi)容
由于 binlog 是一個二進制文件,直接查看是無法閱讀的:
我們可以使用 mysqlbinlog
工具(MySQL自帶)來進行解析之后查看:
mysqlbinlog mysql-bin.000001 > binlog-0000001.sql
查看解析之后的內(nèi)容如下:
四、高級配置建議
1)為 binlog 單獨分配目錄(避免占滿系統(tǒng)盤)
log_bin = /var/lib/mysql-binlogs/mysql-bin
2)調(diào)整 binlog 大?。J為1G)
max_binlog_size = 100M # 根據(jù)業(yè)務(wù)調(diào)整
3)啟用 binlog 加密(MySQL 8.0+)
binlog_encryption = ON
五、注意事項
- 權(quán)限要求:操作需要 MySQL 管理員權(quán)限。
- 磁盤空間:開啟后會增加磁盤寫入量,確保有足夠空間。
- 性能影響:
sync_binlog=1
會降低寫入性能,但保證數(shù)據(jù)安全。 - 版本差異:
- MySQL 5.7需手動開啟
- MySQL 8.0默認已開啟,只需確認配置
六、開啟后的日常維護
-- 定期清理舊binlog(也可設(shè)置expire_logs_days自動清理) PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00'; -- 查看binlog占用空間 SHOW BINARY LOG STATUS;
開啟 binlog 后,將獲得:
- 數(shù)據(jù)恢復(fù)能力
- 主從復(fù)制基礎(chǔ)
- 操作審計能力
建議所有生產(chǎn)環(huán)境都啟用 binlog 功能。
到此這篇關(guān)于MySQL 如何打開binlog日志的文章就介紹到這了,更多相關(guān)mysql binlog日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL實戰(zhàn)窗口函數(shù)SQL分析班級學生考試成績及生活消費
這篇文章主要為大家介紹了MySQL實戰(zhàn),利用窗口函數(shù)SQL來分析班級學生的考試成績及生活消費的示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-10-10