MySQL學習筆記 數據結構圖 更改字元集 alter database dbName character set 'charsetName'; alter database dwg2pdf character set 'utf8'; alter table tableName convert to ...
Mysql 5.7開啟binlog日誌
前言
binlog是MySQL的二進位日誌,並且是MySQL中最重要的日誌。binlog記錄了對MySQL資料庫執行更改的所有操作,包括對資料庫表結構的變更,對數據的變更,例如CREATE、ALTER TABLE、INSERT、UPDATE、DELETE…,但是不會記錄查詢語句select。需要註意的是,如果是update操作,即使是沒有數據更新,也會記錄在binlog日誌中,binlog日誌是以事件形式記錄,並且還包含語句所執行的消耗時間。
查看binlog是否開啟
show variables like '%log_bin%';
開啟binlog
修改mysql配置文件
[mysqld]
log-bin=mysql-bin
server_id=1
重新啟動mysql
windows系統
net stop mysql # 停止mysql服務
net start mysql # 啟動mysql服務
Linux系統
service mysql stop # 停止mysql服務
service mysql start # 啟動mysql服務
service mysql restart # 重啟mysql服務
擴展
應用
-
主從複製
master端開啟binlog,master把二進位日誌傳遞給slaves來達到master-slave數據保持一致。
-
數據恢復
可以通過mysqlbinlog工具解析binlog來恢複數據。
binlog日誌常用命令
-
查看所有的binlog日誌列表
show master logs;
-
查看master狀態,即最後一個binlog日誌的編號名稱,及其最後一個操作時間pos結束點值
show master status;
-
flush刷新binlog日誌,此刻之後會產生一個新編號的binlog日誌文件
flush logs;
bin-log日誌存放地址
binlog存放在/var/lib/mysql裡面的,如果是docker,則在相應的映射目錄
配置存放位置、過期時間
在MySQL配置文件my.cnf或者my.ini中[mysqld]標簽內修改
# 配置定時清理
expire_logs_days = 5
# 配置修改後的日誌路徑
log-bin=/home/logs/mysql-bin
配置每個日誌文件的大小
在MySQL配置文件my.cnf或者my.ini中[mysqld]標簽內修改
# binlog每個日誌文件大小
max_binlog_size = 100m
binlog格式
# binlog日誌格式,MySQL預設採用的是STATEMENT,建議使用MIXED
binlog_format = MIXED
-
STATEMENT模式(SBR)
基於SQL語句的複製(statement-based replication),每一條會修改數據的sql語句都會記錄到binlog中。
優點:
- 不需要記錄每一條sql語句和每一行的數據變化,減少了binlog日誌量,節約IO,提高性能
缺點:
- 某些情況會導致master-slave中的數據不一致,例如sleep(),last_insert_id()等
-
ROW模式(RBR)
基於行的複製(row-based replication),不記錄每條sql語句的上下文信息,僅記錄哪條數據被修改了,修改成什麼樣。
優點:
- 任何情況都可以複製,並且不會出現特定情況下存儲過程、function等調用或者觸發無法被正確複製的問題
缺點:
- binlog日誌文件會非常大
- master上執行update語句時,所有變化都會寫到binlog裡面,SBR只會寫一次,所以會導致頻繁發生binlog的併發寫問題
-
MIXED模式
上面兩種模式的混合使用,一般的複製使用STATEMENT模式保存binlog,對於STATEMENT模式無法複製的操作使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日誌保存方式。
如有侵權請立即與我們聯繫,我們將及時處理,聯繫郵箱:[email protected]。
原文鏈接: https://monkey.blog.xpyvip.top/archives/Mysql57開啟binlog日誌