Mysql二进制日志BINARY LOG清理
简介Mysql的二进制日志文件如果不进行清理,那么数据量会非常的大,本文主要记录Mysql的二进制日志文件的清理方式。
常用命令
show master logs;
PURGE BINARY LOGS TO 'mysql-bin.000001';
PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59';
show variables like 'expire_logs_days';
set global expire_logs_days = 60;
flush logs;
RESET MASTER;
长时间不清理会浪费很多的磁盘空间,但是删除后可能导致数据库崩溃无法进行恢复.若要删除二进制日志首先将其和数据库备份一份。
1、删除所有的二进制日志(不可效仿)
mysql> reset master;
解释:
- 该方法可以删除列于索引文件中的所有二进制日志,把二进制日志索引文件重新设置为空,并创建一个以.000001为后缀新的二进制日志文件。
- 该语法一般只用在主从环境下初次建立复制时。
- 在主从复制进行过程中,该语句是无效的。
主从环境下的配置步骤:
- a. 启动master和slave,开启replication(即复制)
- b. 在master上运行一些测试的语句,看数据是否能够复制到 slave上面
- c. 当复制运行正常的话,就在从上stop slave 然后执行 reset slave,去掉不需要的数据
- d. 在master上面执行reset master 清除测试产生的数据
2、根据文件或时间点来删除二进制日志
# TO 'log_name' 删除文件之前的所有文件
PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
例如:
PURGE BINARY LOGS TO 'mysql-bin.000002'; #删除mysql-bin.000002之前的日志(不包括mysql-bin.000002)
PURGE BINARY LOGS BEFORE '2014-04-28 23:59:59'; #删除2014-04-28 23:59:59时间点之前的日志
注意事项:
- 在删除binlog日志同时,也会清理mysql-bin.index的文件记录,清理完后命令中指定的日志文件成为第一个。
- 主从架构下,如果复制正在进行中,执行该命令是安全的,例如slave正在读取我们要删除的log,该语句将什么也不会做,并返回一个错误;如果复制是停止的,我们删除了一个slave还未读取的日志,则复制重新建立连接时将会失败。
- 建议操作步骤:
- a、在每个从属服务器上,使用SHOW SLAVE STATUS来检查它正在读取哪个日志。
- b 使用SHOW MASTER LOGS获得主服务器上的一系列日志。
- c 在所有的从属服务器中判定最早的日志。这个是目标日志。如果所有的从属服务器是最新的,这是清单上的最后一个日志。
- d 备份您将要删除的所有日志。(这个步骤是自选的,但是建议采用。)
- e 清理除目标日志之外的所有日志。
3、手动删除binlog日志文件(这个也不建议使用)
查看日志文件:

删除文件mysql-bin.000009
[root@localhost data]# rm -f mysql-bin.000009
编辑mysql-bin.index

删除掉一行./mysql-bin.000009
4、指定过期天数(expire_logs_days)
该参数为全局可动态调整参数,默认值为0,即关闭,取值范围0-99

参数的查看:
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
设置参数:
mysql> set global expire_logs_days = 60;
Query OK, 0 rows affected (0.05 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 60 |
+------------------+-------+
注意事项
- 在双机复制环境下,应确保过期天数不应小于从机追赶主机binlog日志的时间。
- 触发过期删除的条件
- 每次进行 LOG flush的时候会自动删除过期的日志。
触发log flush的条件为:
-
- 重启mysql;
-
- BINLOG文件大小达到参数max_binlog_size限制;
-
- 手工执行命令。
在Golang编程中,经常会用到MongoDB数据库进行查询,但是当日期是一个字符串的时候,如何根据日期进行分组查询呢?本文将记录如何分组查询统计。
Linux系统里面有一个名为mlocate.db的数据库文件,这个文件系统包含系统文件的文件名及对应的路径信息。locate命令查找文件时就不用遍历磁盘,而是直接查找mlocate.db文件,这样可以快速定位。但是会有一个问题,如果新添加的文件,那么mlocate.db文件就没有记录,因此使用locate命令时可以先用updatedb命令更新一下mlocate.db数据库文件。当然,mlocate.db还会由系统自带的定时任务执行updatedb命令来定时更新。
一般情况下,我们都是使用单个Redis服务器。但是在生产环境中,单个Redis数据库可能存在如系统崩溃、网络连接闪断或者服务器断电等单点故障的问题。那么Redis是否提供了类似于Mysql的主从复制的机制呢?对的,Redis跟其他数据库也一样,同样提供了复制机制,使得一个Redis服务器【主实例或者Master】复制到一个或者多个Redis服务器中【从实例或Slave】.
Nginx作为使用量非常大的Web服务器,但是如果遇到一个访问量比较大的网站,其访问日志会快速的进行增长,如果一直将所有的访问日志存放在一个文件中肯定是不对的,所以我们就需要对访问量大的访问日志进行分割,然后按照一定的时间删除不需要的日志文件。
php中的array_walk_recursive函数对数组中的每个成员递归地应用用户函数
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题