Mysql binlog日志文件過(guò)大的解決
磁盤(pán)突然報(bào)錯(cuò)使用率過(guò)大,排查原因,發(fā)現(xiàn)mysql的binlog文件占用過(guò)大
命令
ls -l -h

mysql-binlog是MySQL數(shù)據(jù)庫(kù)的二進(jìn)制日志,用于記錄用戶(hù)對(duì)數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句((除了數(shù)據(jù)查詢(xún)語(yǔ)句)信息。可以使用mysqlbin命令查看二進(jìn)制日志的內(nèi)容。
可以通過(guò)設(shè)置my.cof配置文件的方式限制binlog文件的輸出。
1、相關(guān)binlog配置
vim /etc/my.cof
[mysqld] expire_logs_days = 3 #設(shè)置binlog清理時(shí)間 max_binlog_size = 100m #binlog每個(gè)日志文件大小 binlog_cache_size = 4m #binlog緩存大小 max_binlog_cache_size = 512m #最大binlog緩存大小
重啟mysql,看到只保留了前三天的日志

2、binlog相關(guān)高級(jí)設(shè)置
2.1 改變binlog模式
binlog的模式也有三種:STATEMENT、ROW、MIXED 。下面對(duì)這三種格式分別加以說(shuō)明:
STATMENT模式
基于SQL語(yǔ)句的復(fù)制(statement-based replication, SBR),每一條會(huì)修改數(shù)據(jù)的sql語(yǔ)句會(huì)記錄到binlog中。
優(yōu)點(diǎn):不需要記錄每一條SQL語(yǔ)句與每行的數(shù)據(jù)變化,這樣子binlog的日志也會(huì)比較少,減少了磁盤(pán)IO,提高性能。
缺點(diǎn):在某些情況下會(huì)導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)等會(huì)出現(xiàn)問(wèn)題)
ROW模式
不記錄每一條SQL語(yǔ)句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成了什么樣子了。
優(yōu)點(diǎn):不會(huì)出現(xiàn)某些特定情況下的存儲(chǔ)過(guò)程、或function、或trigger的調(diào)用和觸發(fā)無(wú)法被正確復(fù)制的問(wèn)題。
缺點(diǎn):會(huì)產(chǎn)生大量的日志,尤其是alter table的時(shí)候會(huì)讓日志暴漲。
MIXED模式
混合模式復(fù)制(mixed-based replication, MBR):以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對(duì)于STATEMENT模式無(wú)法復(fù)制的操作使用ROW模式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的SQL語(yǔ)句選擇日志保存方式。
修改配置文件
[mysqld] binlog_format = mixed #設(shè)置日志格式
2.2 相關(guān)SQL操作binlog
show binary logs;
# 查看binlog現(xiàn)有詳情
show variables like '%log%';
# 查看log變量的相關(guān)配置
set global expire_logs_days = 3;
# 設(shè)置binlog的保存時(shí)間
reset master;
# 重置所有的binlog,相當(dāng)于刪除所有的binlog,這個(gè)操作對(duì)主從集群影響非常大,因?yàn)橹鲝馁x值是基于binlog日志來(lái)實(shí)現(xiàn)的
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
# 刪除指定的日志或日期之前的日志索引中的所有二進(jìn)制日志。MASTER和BINARY是同義詞
PURGE MASTER LOGS TO 'binlog.000013';
#清除binlog.000013日志
PURGE MASTER LOGS BEFORE '2020-01-08 10:00:00';
#清除2020-01-08 10:00:00前binlog日志
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
# 清除3天前binlog日志BEFORE,變量的date自變量可以為'YYYY-MM-DD hh:mm:ss'格式。
到此這篇關(guān)于Mysql binlog日志文件過(guò)大的解決的文章就介紹到這了,更多相關(guān)Mysql binlog日志過(guò)大內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL四種日志binlog/redolog/relaylog/undolog詳解
- MySQL使用binlog日志進(jìn)行數(shù)據(jù)庫(kù)遷移和數(shù)據(jù)恢復(fù)
- MySQL安全刪除binlog日志的詳細(xì)步驟
- 清理MySQL Binlog二進(jìn)制日志的三種方式
- mysql數(shù)據(jù)庫(kù)日志binlog保存時(shí)效問(wèn)題(expire_logs_days)
- Mysql如何通過(guò)binlog日志恢復(fù)數(shù)據(jù)詳解
- MySQL的binlog日志使用詳解
- 開(kāi)啟MySQL的binlog日志的方法步驟
- 讓MySQL中某個(gè)表的操作不生成binlog日志的問(wèn)題解決
相關(guān)文章
利用mysql的inet_aton()和inet_ntoa()函數(shù)存儲(chǔ)IP地址的方法分享
當(dāng)前很多應(yīng)用都適用字符串char(15)來(lái)存儲(chǔ)IP地址(占用16個(gè)字節(jié)),利用inet_aton()和inet_ntoa()函數(shù),來(lái)存儲(chǔ)IP地址效率很高,適用unsigned int 就可以滿(mǎn)足需求,不需要使用bigint,只需要4個(gè)字節(jié),節(jié)省存儲(chǔ)空間,同時(shí)效率也高很多2012-03-03
Mysql元數(shù)據(jù)如何生成Hive建表語(yǔ)句注釋腳本詳解
這篇文章主要給大家介紹了關(guān)于Mysql元數(shù)據(jù)如何生成Hive建表語(yǔ)句注釋腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
sql中with?as用法以及with-as性能調(diào)優(yōu)/with用法舉例
SQL中的WITH?AS語(yǔ)法是一種強(qiáng)大的工具,可以簡(jiǎn)化復(fù)雜查詢(xún)的編寫(xiě),提高查詢(xún)的可讀性和維護(hù)性,這篇文章主要給大家介紹了關(guān)于sql中with?as用法以及with-as性能調(diào)優(yōu)/with用法的相關(guān)資料,需要的朋友可以參考下2024-01-01
mysql 無(wú)限級(jí)分類(lèi)實(shí)現(xiàn)思路
關(guān)于該問(wèn)題,暫時(shí)自己還沒(méi)有深入研究,在網(wǎng)上找到幾種解決方案,各有優(yōu)缺點(diǎn)。2011-08-08

