Mysql删除binlog(安全清理)

2019-04-20 23:03|来源: 网路

如果你的 Mysql 搭建了主从同步 , 或者数据库开启了 log-bin 日志 , 那么随着时间的推移 , 你的数据库 data 目录下会产生大量的日志文件

-rw-rw---- 1 mysql mysql 1073742134 4月  16 06:12 mysql-bin.000011
-rw-rw---- 1 mysql mysql 1073741951 4月  17 00:43 mysql-bin.000012
-rw-rw---- 1 mysql mysql 1073742031 4月  17 17:20 mysql-bin.000013
-rw-rw---- 1 mysql mysql 1073741902 4月  18 08:59 mysql-bin.000014
-rw-rw---- 1 mysql mysql 1073742935 4月  19 05:23 mysql-bin.000015
-rw-rw---- 1 mysql mysql 1073742107 4月  20 05:42 mysql-bin.000016
-rw-rw---- 1 mysql mysql  757510167 4月  20 20:05 mysql-bin.000017
-rw-rw---- 1 mysql mysql     190398 4月  20 20:15 mysql-bin.000018
-rw-rw---- 1 mysql mysql        152 4月  20 20:05 mysql-bin.index


下面来介绍几种解决方法:

~~> 如果你的数据库没有搭建主从同步这样的服务 , binlog 日志也不用的情况下 , 你可以将 /etc/my.cnf 文件下面行删除或注释掉
log-bin=mysql-bin
~~> 如果你需要这样的文件 , 那么建议你在主配置文件 /etc/my.cnf 中添加如下行 , 来限制 binlog 日志文件存在时间 , 过期自动删除
expire_logs_days = 7 # 只保留 7 天的日志文件
~~> 如果你直接得到一台服务器 , 上面的 binlog 日志已经影响到了磁盘空间 , 那么你将使用下面命令清除
mysql> reset master; # 清空所有 binlog 文件
~~> 如果你的得到的服务器 , mysql 还做了主从同步 , 那么上面的命令就不适合你了 , 因为 binlog 文件删除过多的话 , 会导致数据不同步
mysql> show slave status\G # 你首先要来 slave 上查看从库读 binlog 到了哪里 
Master_Log_File: mysql-bin.000009 # 我们可以看到是 mysql-bin.000009
mysql> purge master logs to 'mysql-bin.000009'; # 我们可以在 master 中执行这条指令 , 将 binlog 文件删除至 mysql-bin.000009 前
mysql> purge master logs before '2014-11-18 00:00:00'; # 将 binlog 文件删除至此日期前


转自:https://www.cnblogs.com/wangxiaoqiangs/p/5336273.html

相关问答

更多
  • 在开发 Spark Streaming 的公共组件过程中,需要将 binlog 的数据(Array[Byte])转换为 Json 格式,供用户使用,本文提供一种转换的思路。另外我们会用到几个辅助类,为了行文流畅,我们将辅助类的定义放在文章的最后面。如果如果本文有讲述不详细,或者错误指出,肯请指出,谢谢对于 binlog 数据,每一次操作(INSERT/UPDATE/DELETE 等)都会作为一条记录写入 binlog 文件,但是同一条记录可能包含数据库中的几行数据(这里比较绕,可以看一个具体的例子)在数据库 ...
  • 在开发 Spark Streaming 的公共组件过程中,需要将 binlog 的数据(Array[Byte])转换为 Json 格式,供用户使用,本文提供一种转换的思路。另外我们会用到几个辅助类,为了行文流畅,我们将辅助类的定义放在文章的最后面。如果如果本文有讲述不详细,或者错误指出,肯请指出,谢谢对于 binlog 数据,每一次操作(INSERT/UPDATE/DELETE 等)都会作为一条记录写入 binlog 文件,但是同一条记录可能包含数据库中的几行数据(这里比较绕,可以看一个具体的例子)在数据库 ...
  • 看下做主机的服务器日志模式是不是binlog的啊。然后找到主服务器binlog的最新位置,通过CHANGE MASTER 命令将 MASTER_LOG_FILE和MASTER_LOG_POS重新指定一下。
  • 1 在my.ini(window)配置文件里面 [mysqld] log-bin=mysql-bin(名字可以随便起) 我们每次进行操作的时候,File_size都会增长 2、show binlog events 4. 用mysqlbinlog 工具来显示记录的二进制结果,然后导入到文本文件,为了以后的恢复。 详细过程如下: bin>mysqlbinlog --start-position=4 --stop-position=106 mysqlbin-log.000001 > D:\\test1.txt 或 ...
  • 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态,其实并不是这样,这个恢复是有前提的,就是你至少得有一个从日志记录开始后的数据库备份,通过日志恢复数据库实际上只是一个对以前操作的回放过程而已,不用想得太复杂,既然是回放你就得注意了,如果你执行了两次恢复那么就相当于是回放了两次,后果如何你自己应该清楚了吧。 2. 要想通过日志恢复数据库,在你的my.cnf文件里应该有如下的定义,log-bin=mysql-bin,这个是必须的.binlog-do-db=db_test,这个是指定哪些数据库需要日 ...
  • mysql开启binlog日志 mysql有以下几种日志:错误日志: -log-err查询日志: -log慢查询日志: -log-slow-queries更新日志: -log-update二进制日志: -log-bin在mysql的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了
  • 截断表后,通常无法获取数据,因为truncate语句首先删除表(保留相同的副本),然后创建相同的结构,这是删除所有数据的快速过程,但它不像删除binlog中的keep语句。 但是如果你最近创建了这个表5天之前并且你保留了超过5天的binlogs那么你可以尝试过滤所有与该表相关的语句,直到truncate命令之前,然后你可以在你的服务器上重放这些语句。 Normally you can't get data after truncate a table as truncate statement first ...
  • 通常我们在获取错误too many connections时正在执行show process,但在我的情况下,Mysql没有间歇性响应。 因此,如果有任何长时间运行的查询,我会考虑查看进程,以便我可以杀死它。 我在进程列表中的Command列下获得了binlog转储 。 Command显示线程当前正在执行的命令类型。 binlog dump是主服务器上的一个线程,用于将二进制日志内容发送到从属服务器。 如果需要有关Command不同值的更多信息,可以参考: http://dev.mysql.com/doc/ ...
  • 好的,我做到了。 然而,这种解决方案并不完美/ 100%安全。 我已经将所有文件名输入到我的mysql-bin.index中 find /var/log/mysql/ -wholename '/var/log/mysql/mysql-bin.0*' | sort > mysql-bin.index (如果你将使用它首先检查mysql-bin.index文件中的文件名格式并根据你的需要调整) 然后重启mysql,mysql在启动时重新加载该文件。 MASTER准备好了。 现在它已经足够了 SLAVE STO ...