1、binlog概念:
binlog是一個二進制格式的文件,用于記錄“修改數據或可能引起數據變更”的SQL語句(查詢的SQL不會記錄)。
2、binlog功能:
(1)恢復:
利用binlog日志恢復數據庫數據。
(2)復制:
主從架構通過binlog同步數據。
(3)審計:
可以用binlog中的信息進行審計,
判斷是否有對數據庫進行注入攻擊。
3、binlog的記錄格式:
(1)statement:
基于"語句"記錄,記錄的是修改SQL語句。
(2)row:
基于"行"記錄,記錄的是每行實際數據的變更。
(3)mixed:
statement和row模式的混合。
4、binlog的配置參數
(1)開關配置:
sql_log_bin=1|0
用于控制會話級別二進制日志功能的開啟與關閉
MySQL> SET SQL_LOG_BIN=0;
mysql> SOURCE somefile.sql;
mysql> SET SQL_LOG_BIN=1;
(2)文件路徑:
log_bin=/data/mysql3306/data/mysql-bin
(3)記錄格式:
binlog_format=MIXED
(4)過期時間:
expire_logs_days=0
日志過期后會被自動清理
(5)同步磁盤:
sync_binlog=1|0:
事務提交時, 是否將事件從內存刷新至磁盤,
安全期間應該開啟保證數據安全, 開啟后會略微造成性能下降(至關重要)
(6)cache相關:
binlog_cache_size=xx
binlog_stmt_cache_size=xx
max_binlog_size=xx
max_binlog_cache_size=xx
max_binlog_stmt_cache_size=xx
5、binlog文件的管理:
二進制日志文件的構成:
索引文件: mysql-bin.index
日志文件: mysql-bin.000xxx
(1)查看二進制日志文件列表
mysql> SHOW MASTER LOGS;
mysql> SHOW BINARY LOGS;
(2)查看正在使用中的二進制文件
mysql> SHOW MASTER STATUS;
(3)查看二進制文件內容:
方式一:
mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001' LIMIT 5;
mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 208 LIMIT 5, 10;
方式二:
# mysqlbinlog --start-position='100' --stop-position='1000' ./mysql-bin.000001
# mysqlbinlog --start-datetime='2020-04-24 00:00:00' --stop-datetime='2020-04-24 17:00:00' ./mysql-bin.000001
查看mysqlbinlog使用幫助
# mysqlbinlog --help
(4)日志滾動:
mysql> FLUSH LOGS;
避免日志文件太大,可生成新binlog文件
(5)清除二進制日志:
注意:只有做過備份的binlog才可以清除, 不可以手動直接刪除文件。
mysql> PURGE BINARY LOGS BEFORE '2019-01-20 21:10:24';
mysql> PURGE BINARY LOGS TO 'mysql-bin.000xxx';
說明: 刪除mysql-bin.000xxx之前的文件
示例: 先做備份!??!
# mkdir /data/backup/binlog/
# cp mysql-bin.00000[0-9] /data/backup/binlog/
# sync
mysql> PURGE BINARY LOGS TO 'mysql-bin.000009'
另外,清除所有binlog(慎用)
mysql> reset master;