美文网首页
记一次数据库删除binlog日志

记一次数据库删除binlog日志

作者: 宅本初 | 来源:发表于2019-01-22 15:36 被阅读0次

    收到了阿里云给过来的磁盘使用率平均值超过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日志撑爆数据磁盘的你,欢迎各位大神来指正。

    相关文章

      网友评论

          本文标题:记一次数据库删除binlog日志

          本文链接:https://www.haomeiwen.com/subject/unvljqtx.html