由于某个业务有大量的数据写入数据库,大概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,表示从不删除。
7.关闭binlog
操作:8.0版本情况下,关闭mysql服务,找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重启MySQL,不可以不关闭的情况 下,修改重启。
操作:8.0版本情况下,关闭mysql服务,找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重启MySQL,不可以不关闭的情况 下,修改重启。
在关闭后,可以下使用reset master把现有的binlog都删除掉,因为binlog关闭了,不会有正在使用的binlog,所以没问题。
ps:
1.如果找不到my.ini,可以手动打开显示C盘的隐藏文件选项(不会百度),就会出现ProgramData文件夹,找到mysql文件夹,就可以找到my.ini文件
2.使用RESET MASTER可以删除任何二进制日志文件及其相关的二进制日志索引文件,从而使主数据库恢复到开始二进制日志记录之前的状态
1.如果找不到my.ini,可以手动打开显示C盘的隐藏文件选项(不会百度),就会出现ProgramData文件夹,找到mysql文件夹,就可以找到my.ini文件
2.使用RESET MASTER可以删除任何二进制日志文件及其相关的二进制日志索引文件,从而使主数据库恢复到开始二进制日志记录之前的状态