由於某個業務有大量的數據寫入數據庫,大概300/S,日夜不停,導致數據庫占用磁盤空間過大,現整理解決思路
1.字段設置比較隨意,導致一般的數據存儲浪費,修改字段為更小的單位
2.Mysql為InnoDB模式,但是業務單純的寫入和讀取數據庫,沒有涉及事務,修改模式為Myisam
3.大量的寫入會生成大量的binglog文件,Mysql默認30天刪除,設置binlog的自動刪除機制或者關閉binglog日志
操作步驟:
1.登錄mysql數據庫,mysql -uroot –p
2.查看binlog是否開啟,log_bin的狀態未ON,表明binlog日志開啟
3.show binary logs;
4.刪除binlog日志文件,切勿刪除正在使用的binlog!!(所以刪除老年的即可,不要全刪)
不要輕易手動去刪除binlog,會導致binlog.index和真實存在的binlog不匹配,使用PURGE,根據自己需求改寫下面命令
//刪除1天前的binlog日志文件
1
|
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL
1
DAY);
|
//將指定時間之前的binlog清掉
1
|
PURGE BINARY LOGS BEFORE
'2020-11-25 13:09:51'
;
|
//將bin.000088之前的binlog清掉:
1
|
PURGE BINARY LOGS TO
'bin.000088'
;
|
5.
設置binlog的過期時間
binlog失效日期參數為 binlog_expire_logs_seconds,默認2592000(30天)過期,可以設置 604800(7天)
操作:
//顯示binlog的過期時間
1
|
show variables like
'%expire%'
;
|
//設置過期時間
1
|
set global binlog_expire_logs_seconds=
60
*
60
*
24
;
|
//手動刷新日志
1
|
flush logs;
|
6.設置過期時間也可以直接修改my.ini配置文件,關閉修改再重啟
expire_logs_days = 7 #自動刪除15天前的日志。默認值為0,表示從不刪除。
操作:8.0版本情況下,關閉mysql服務,找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重啟MySQL,不可以不關閉的情況 下,修改重啟。
1.如果找不到my.ini,可以手動打開顯示C盤的隱藏文件選項(不會百度),就會出現ProgramData文件夾,找到mysql文件夾,就可以找到my.ini文件
2.使用RESET MASTER可以刪除任何二進制日志文件及其相關的二進制日志索引文件,從而使主數據庫恢復到開始二進制日志記錄之前的狀態