请选择 进入手机版 | 继续访问电脑版

黄亚东笔记

 找回密码
 立即注册

mysql中删除binlog的方法?mysql中如何删除binlog?

[复制链接]
需求描述:
  在mysql中如何删除binlog,因为随着数据库的运行,mysql中产生的binlog会越来越大,有可能把磁盘撑爆了,所以记录下删除
  binlog的方法.
操作过程:
1.通过系统参数控制保留多久的binlog
在my.cnf中,加入以下的参数,重启实例
  1. expire_logs_days = 3             #意思是保留3天的binlog;默认值是0,表示不自动删除.
复制代码
备注:设置完该参数之后,当重启实例,或者刷新日志的时候,就会进行检查,然后删除3天之前的日志
2.测试在刷新日志的时候,触发删除
  2.1查看当前系统中的二进制文件
  1. [root@testvm data]# ls -ltr mysql-bin.*
  2. -rw-r----- 1 mysql mysql 177 Jul 25 11:58 mysql-bin.000001
  3. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002
  4. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
  5. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
  6. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
  7. -rw-r----- 1 mysql mysql 154 Jul 25 12:17 mysql-bin.000006
  8. -rw-r----- 1 mysql mysql 114 Jul 25 12:17 mysql-bin.index
复制代码
 2.2修改系统时间为3天之后
  1. [root@testvm data]# date -s "2018-07-28 12:15:00"
  2. Sat Jul 28 12:15:00 CST 2018
  3. [root@testvm data]# clock -w
复制代码
2.3执行flush logs刷新日志
  1. [root@testvm data]# ls -ltr mysql-bin.*
  2. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002   #1这个日志已经被删除了.
  3. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
  4. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
  5. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
  6. -rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
  7. -rw-r----- 1 mysql mysql 154 Jul 28 12:15 mysql-bin.000007
  8. -rw-r----- 1 mysql mysql 114 Jul 28 12:15 mysql-bin.index
复制代码
2.4查看文件时间,执行flush logs操作
  1. [root@testvm data]# stat mysql-bin.000002
  2.   File: `mysql-bin.000002'
  3.   Size: 201               Blocks: 8          IO Block: 4096   regular file
  4. Device: fd00h/64768d        Inode: 276736      Links: 1
  5. Access: (0640/-rw-r-----)  Uid: (  502/   mysql)   Gid: (  502/   mysql)
  6. Access: 2018-07-28 12:15:31.539000285 +0800
  7. Modify: 2018-07-25 12:17:39.528999883 +0800
  8. Change: 2018-07-25 12:17:39.528999883 +0800
  9. [root@testvm data]# ls -ltr mysql-bin.*
  10. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000002
  11. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000003
  12. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000004
  13. -rw-r----- 1 mysql mysql 201 Jul 25 12:17 mysql-bin.000005
  14. -rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
  15. -rw-r----- 1 mysql mysql 201 Jul 28 12:17 mysql-bin.000007
  16. -rw-r----- 1 mysql mysql 154 Jul 28 12:17 mysql-bin.000008   #这个生成时间减去标记为黄色的时间必须大于3天,黄色对应的文件才会被删除.
  17. -rw-r----- 1 mysql mysql 133 Jul 28 12:17 mysql-bin.index
  18. [root@testvm data]# date
  19. Sat Jul 28 12:18:08 CST 2018
  20. [root@testvm data]# ls -ltr mysql-bin.*
  21. -rw-r----- 1 mysql mysql 201 Jul 28 12:15 mysql-bin.000006
  22. -rw-r----- 1 mysql mysql 201 Jul 28 12:17 mysql-bin.000007
  23. -rw-r----- 1 mysql mysql 201 Jul 28 12:18 mysql-bin.000008
  24. -rw-r----- 1 mysql mysql 154 Jul 28 12:18 mysql-bin.000009    #18分执行的时候,3天前的17分的文件就都被删除了.
  25. -rw-r----- 1 mysql mysql  76 Jul 28 12:18 mysql-bin.index
复制代码
备注:经过测试,就是,当刷新日志时(写满日志文件或者手动执行flush logs操作),在这个时间3天之前的binlog文件都会被删除.即执行刷新日志时,减去3天,binlog的时间小于这个的都会被删除.同时呢,当系统启动的时候也会执行flush logs操作,也会触发这个删除binlog的动作.
3.通过puge binary logs命令来进行删除
  3.1查看当前binlog的信息
  1. mysql> show binary logs;
  2. +------------------+-----------+
  3. | Log_name         | File_size |
  4. +------------------+-----------+
  5. | mysql-bin.000006 |       201 |
  6. | mysql-bin.000007 |       201 |
  7. | mysql-bin.000008 |       201 |
  8. | mysql-bin.000009 |       201 |
  9. | mysql-bin.000010 |       201 |
  10. | mysql-bin.000011 |       201 |
  11. | mysql-bin.000012 |       201 |
  12. | mysql-bin.000013 |       201 |
  13. | mysql-bin.000014 |       201 |
  14. | mysql-bin.000015 |       201 |
  15. | mysql-bin.000016 |       201 |
  16. | mysql-bin.000017 |       201 |
  17. | mysql-bin.000018 |       201 |
  18. | mysql-bin.000019 |       201 |
  19. | mysql-bin.000020 |       201 |
  20. | mysql-bin.000021 |       154 |
  21. +------------------+-----------+
  22. 16 rows in set (0.00 sec)
复制代码
3.2purge删除binlog
  1. mysql> purge binary logs to 'mysql-bin.000017';
  2. Query OK, 0 rows affected (0.01 sec)

  3. mysql> show binary logs;
  4. +------------------+-----------+
  5. | Log_name         | File_size |
  6. +------------------+-----------+
  7. | mysql-bin.000017 |       201 |
  8. | mysql-bin.000018 |       201 |
  9. | mysql-bin.000019 |       201 |
  10. | mysql-bin.000020 |       201 |
  11. | mysql-bin.000021 |       154 |
  12. +------------------+-----------+
  13. 5 rows in set (0.00 sec)
复制代码

备注:通过查询结果可以知道,在17之前的日志都被清除了.不包括17本身.切记!
4.切记不能在操作系统上直接删除binlog文件,虽然释放了空间,但是在Index中,还是有记录.
  1. [root@testvm data]# ls -ltr mysql-bin.*
  2. -rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000017
  3. -rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000018
  4. -rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000019
  5. -rw-r----- 1 mysql mysql 201 Jul 28 12:42 mysql-bin.000020
  6. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000021
  7. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000022
  8. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000023
  9. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000024
  10. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000025
  11. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000026
  12. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000027
  13. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000028
  14. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000029
  15. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000030
  16. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000031
  17. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000032
  18. -rw-r----- 1 mysql mysql 154 Jul 28 12:45 mysql-bin.000033
  19. -rw-r----- 1 mysql mysql 323 Jul 28 12:45 mysql-bin.index
  20. [root@testvm data]# rm -f mysql-bin.000017 mysql-bin.000018 mysql-bin.000019 mysql-bin.000020
  21. [root@testvm data]# ls -ltr mysql-bin.*
  22. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000021
  23. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000022
  24. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000023
  25. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000024
  26. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000025
  27. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000026
  28. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000027
  29. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000028
  30. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000029
  31. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000030
  32. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000031
  33. -rw-r----- 1 mysql mysql 201 Jul 28 12:45 mysql-bin.000032
  34. -rw-r----- 1 mysql mysql 154 Jul 28 12:45 mysql-bin.000033
  35. -rw-r----- 1 mysql mysql 323 Jul 28 12:45 mysql-bin.index
复制代码
在mysql中查询binlog信息
  1. mysql> show binary logs;
  2. +------------------+-----------+
  3. | Log_name         | File_size |
  4. +------------------+-----------+
  5. | mysql-bin.000017 |         0 |
  6. | mysql-bin.000018 |         0 |
  7. | mysql-bin.000019 |         0 |
  8. | mysql-bin.000020 |         0 |
  9. | mysql-bin.000021 |       201 |
  10. | mysql-bin.000022 |       201 |
  11. | mysql-bin.000023 |       201 |
  12. | mysql-bin.000024 |       201 |
  13. | mysql-bin.000025 |       201 |
  14. | mysql-bin.000026 |       201 |
  15. | mysql-bin.000027 |       201 |
  16. | mysql-bin.000028 |       201 |
  17. | mysql-bin.000029 |       201 |
  18. | mysql-bin.000030 |       201 |
  19. | mysql-bin.000031 |       201 |
  20. | mysql-bin.000032 |       201 |
  21. | mysql-bin.000033 |       154 |
  22. +------------------+-----------+
  23. 17 rows in set (0.00 sec)
复制代码
备注:还记录了文件的名字,但是文件的大小是0byte.
查看index中的记录信息
  1. [root@testvm data]# cat mysql-bin.index
  2. ./mysql-bin.000017
  3. ./mysql-bin.000018
  4. ./mysql-bin.000019
  5. ./mysql-bin.000020
  6. ./mysql-bin.000021
  7. ./mysql-bin.000022
  8. ./mysql-bin.000023
  9. ./mysql-bin.000024
  10. ./mysql-bin.000025
  11. ./mysql-bin.000026
  12. ./mysql-bin.000027
  13. ./mysql-bin.000028
  14. ./mysql-bin.000029
  15. ./mysql-bin.000030
  16. ./mysql-bin.000031
  17. ./mysql-bin.000032
  18. ./mysql-bin.000033
  19. [root@testvm data]#
复制代码
备注:index中还是记录该信息,认为还是存在的.
重新启动的时候,会检查文件是否存在,如果不在会报错:
  1. mysqld: File './mysql-bin.000017' not found (Errcode: 2 - No such file or directory)
  2. 2018-07-28T04:49:02.619409Z 0 [ERROR] Failed to open log (file './mysql-bin.000017', errno 2)
  3. 2018-07-28T04:49:02.619416Z 0 [ERROR] Could not open log file
  4. mysqld: File './mysql-bin.000018' not found (Errcode: 2 - No such file or directory)
  5. 2018-07-28T04:49:02.619426Z 0 [ERROR] Failed to open log (file './mysql-bin.000018', errno 2)
  6. 2018-07-28T04:49:02.619428Z 0 [ERROR] Could not open log file
  7. mysqld: File './mysql-bin.000019' not found (Errcode: 2 - No such file or directory)
  8. 2018-07-28T04:49:02.619436Z 0 [ERROR] Failed to open log (file './mysql-bin.000019', errno 2)
  9. 2018-07-28T04:49:02.619438Z 0 [ERROR] Could not open log file
  10. mysqld: File './mysql-bin.000020' not found (Errcode: 2 - No such file or directory)
  11. 2018-07-28T04:49:02.619445Z 0 [ERROR] Failed to open log (file './mysql-bin.000020', errno 2)
  12. 2018-07-28T04:49:02.619447Z 0 [ERROR] Could not open log file
复制代码
备注:遇到这种问题,直接通过purge binary logs删除就行了.同时也会更新index文件

切记!!不要从操作系统上直接删除binlog!!!








通过系统参数控制保留多久的binlog,从原来保存10天修改为保存3天的设置方法!
请问我的所有站点需要我不定期手动打包备份到我本地电脑吗? 或者说云主机自带的有...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|黄亚东笔记 ( 鄂ICP备20004876号-4 )

GMT+8, 2021-4-24 02:19 , Processed in 1.171973 second(s), 20 queries .

黄亚东 友情赞助: 高佣联盟

公众号:亚东电商 站长VX:yadongtd

快速回复 返回顶部 返回列表