什么是网络建站,网站建设中正在为您转,用vue做的网站模板,鞍山seo外包做了mysql主 从也有一段时间了#xff0c;这两天检查磁盘空间情况#xff0c;发现放数据库的分区磁盘激增了40多G#xff0c;一路查看下来#xff0c;发现配置好主从复制以来到现在的binlog就有40G#xff0c;原来根源出在这里#xff0c;查看了一下my.cnf#xff0c;看… 做了mysql主 从也有一段时间了这两天检查磁盘空间情况发现放数据库的分区磁盘激增了40多G一路查看下来发现配置好主从复制以来到现在的binlog就有40G原来根源出在这里查看了一下my.cnf看到binlog的size是1G就做分割但没有看到删除的配置在mysql里查看了一下 variablesmysqlshow variables like %log%;查到了| expire_logs_days | 0 |这个默认是0也就是logs不过期这个是一个global的参数所以需要执行set global expire_logs_days8;这样8天前的log就会被删除了如果有回复的需要请做好备份工作但这样设置还不行下次重启mysql了配置又恢复默认了所以需在my.cnf中设置expire_logs_days 8这样重启也不怕了想要恢愎数据库以前的资料,执行mysqlshow binlog events;由于数据量很多查看起来很麻烦光打开个文件就要闪半天所以应该适当删除部分可不用的日志。并且如果使用的时间足够长的话会把我的硬盘空间都给吃掉1、登录系统/usr/bin/mysql使用mysql查看日志mysqlshow binary logs;—————-———–| Log_name | File_size |—————-———–| ablelee.000001 | 150462942 || ablelee.000002 | 120332942 || ablelee.000003 | 141462942 |—————-———–2、删除bin-log(删除ablelee.000003之前的而没有包含ablelee.000003)mysql purge binary logs to ablelee.000003;Query OK, 0 rows affected (0.16 sec)3、查询结果(现在只有一条记录了)mysql show binlog events\G*************************** 1. row ***************************Log_name: ablelee.000003Pos: 4Event_type: Format_descServer_id: 1End_log_pos: 106Info: Server ver: 5.1.26-rc-log, Binlog ver: 41 row in set (0.01 sec)(ablelee.000001和ablelee.000002已被删除)mysql show binary logs;—————-———–| Log_name | File_size |—————-———–| ablelee.000003 | 106 |—————-———–1 row in set (0.00 sec)(删除的其它格式运用!)PURGE {MASTER | BINARY} LOGS TO ‘log_name’PURGE {MASTER | BINARY} LOGS BEFORE ‘date’用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除这样被给定的日志成为第一个。例如PURGE MASTER LOGS TO mysql-bin.010;PURGE MASTER LOGS BEFORE 2008-06-22 13:00:00;清除3天前的 binlogPURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。MASTER和BINARY是同义词。如果您有一个活性的从属服务器该服务器当前正在读取您正在试图删除的日志之一则本语句不会起作用而是会失败并伴随一个错误。不过如果从属服务器是休止的并且您碰巧清理了其想要读取的日志之一则从属服务器启动后不能复制。当从属服务器正在复制时本语句可以安全运行。您不需要停止它们。要清理日志需按照以下步骤1. 在每个从属服务器上使用SHOW SLAVE STATUS来检查它正在读取哪个日志。2. 使用SHOW MASTER LOGS获得主服务器上的一系列日志。3. 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是更新的这是清单上的最后一个日志。4. 制作您将要删除的所有日志的备份(这个步骤是自选的但是建议采用)。5. 清理所有的日志但是不包括目标日志。下面讲一下怎么从二进制文件恢复数据, 假如不小心执行了drop table xxx_db, 假如你保留了完整的二进制日志的话, 先不要冒汗, 这是可以恢复的.先看看日志#mysqlbinlog /diskb/bin-logs/xxx_db-bin.000001找到执行create table xxx_db之后和drop table xxx_db之前的position, 假如是20, 1000#mysqlbinlog --start-position4 --stop-position1000 /diskb/bin-logs/xxx_db-bin.000001 | mysql -u root伴 随着一大堆的ERROR 1062 (23000) at line 12355: Duplicate entry 139 for key 1, 数据库就这样恢复了, 不过--start-position20是不行的, 必须从--start-position4开始, 为什么要强制从4开始, 这个问题我也暂时没有搞清楚.还有一种办法是根据日期来恢复#mysqlbinlog --start-datetime2009-09-14 0:20:00 --stop-datetim2009-09-15 01:25:00 /diskb/bin-logs/xxx_db-bin.000001 | mysql -u root如果create table xxx_db和drop table xxx_db之间的时间相距是一年, 或者在不同的二进制日志中, 且位置相距好远, 就等着失眠吧! 做好备份, 小心操作才是正路啊 转载于:https://blog.51cto.com/dnuser/1278890