收到了阿里云给过来的磁盘使用率平均值超过95的警告 然后就进去看了一下
磁盘空间截图(df -h查看系统中文件的使用情况 其实当时只剩700m了吓得我赶紧先去问了一下大神)再附上两个大神的猜测
心安理得的做一个舔狗竟然只有这么一点了 如果扩容的话首先成本会增加其次。。。由于水平很低并不想在重启实例之后承担一些风险(被告知有可能会造成数据丢失需要先创建好备份用的快照)
所以就选择了先进去看看吧
纳尼你怎么可以这么大(du -sh *可以查看当前目录下各个文件及目录占用空间大小)继续往里看具体都在data里面
可以看到mysql-bin.00000X这些东西很占空间经过百度Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。
在服务器里不建议直接rm -rf删除 这样可能会因为数据库正在读取被删除的日志而引起一些错误
下面是安全的删除办法
首先连接数据库:
连接mysql3306端口命令
mysql -hxx.xx.xxx.xxx -uxxxx -pxxxxxx
连接非3306端口(指定其他端口) 的命令(例如3308 注意: -P 要大写)
mysql -hxx.xx.xxx.xxx -P3308 -uxxxx -pxxxxxx
方法一(手动清理):
清理前的准备:
1.查看主库和从库正在使用的binlog是哪个文件
show master status\G
show slave status\G
这两个命令就会告诉你不要删哪个
然后执行命令
PURGE MASTER LOGS TO 'mysql-bin.0xx';//删除指定日志文件的日志索引中binlog执行这条指令 , 将 binlog 文件删除至 mysql-bin.0xx 前
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26’;//删除指定日期以前的日志索引执行这条指令 , 将 binlog 文件删除至此日期前
其实运行以上命令的话如果你有一个活性的从属服务器,该服务器当前正在读取你正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且你碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。不需要停止它们。
方法二(通过设置binlog过期的时间,使系统自动删除binlog文件)
show variables like 'expire_logs_days';命令查看当前日志保存天数 (0为永不过期)接着执行命令mysql> set global expire_logs_days = 30; #设置binlog多少天过期
但要注意过期时间设置的要适当,对于主从复制,要看从库的延迟决定过期时间,避免主库binlog还未传到从库便因过期而删除,导致主从不一致!!!
删除过后就可以看到清爽的可用磁盘空间了。
希望可以帮到同样被binlog日志撑爆数据磁盘的你,欢迎各位大神来指正。
网友评论