mysql binlog日志删除(占用存储过大)
mysql的binlog日志介绍
Binlog是mysql以二进制形式打印的日志,它默认不加密,不压缩。binlog二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改文件位置和格式:当用--log-bin[=file_name]选项启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。如果未给出file_name值, 默认名为-bin后面所跟的主机名。如果给
出了文件名,但没有包含路径,则文件被写入数据目录。
删除mysql的binlog日志有两种方法:自动删除和手动删除
1.自动删除
永久生效:修改mysql的配置文件my.ini,添加binlog过期时间的配置项:expire_logs_days=30,然后重启mysql,这个有个致命的缺点就是需要重启mysql。
临时生效:进入mysql,用以下命令设置全局的参数:set global expire_logs_days=30;
(上面的数字30是保留30天的意思。)
2.手动删除
可以直接删除binlog文件,但是可以通过mysql提供的工具来删除更安全,因为purge会更新mysql-bin.index中的条目,而直接删除的话,mysql-bin.index文件不会更新。mysql-bin.index的作用是加快查找binlog文件的速度。
(1)直接删除
找到binlog所在目录,用rm binglog名 直接删除
例:rm mysql-bin.010
(2)通过mysql提供的工具来删除
删除之前可以先看一下purge的用法:help purge;
删除举例:
RESET MASTER;//删除所有binlog日志,新日志编号从头开始
PURGE MASTER LOGS TO 'mysql-bin.010';//删除mysql-bin.010之前所有日志
PURGE MASTER LOGS BEFORE '2003-04-02 22:46:26';// 删除2003-04-02 22:46:26之前产生的所有日志
20240618 今天发现日至占五十多G
容器映射本地物理机路径
volumes:
- /home/mysql/data:/var/lib/mysql
root@nas:/home/mysql/data# sudo du -ch /home/mysql/data/binlog.* | grep total
58G total
在使用 Docker 容器运行 MySQL 时,管理和删除二进制日志文件的过程稍有不同。以下是具体步骤:
进入 Docker 容器
首先,你需要进入运行 MySQL 的 Docker 容器:
docker exec -it <container_name_or_id> /bin/bash
使用 MySQL 客户端删除旧的日志文件
在进入容器后,使用 mysql
命令连接到 MySQL 数据库并删除旧的二进制日志文件。例如:
mysql -u root -p -e "PURGE BINARY LOGS BEFORE '2024-06-10 00:00:00';"
或者删除除当前日志以外的所有日志:
mysql -u root -p -e "PURGE BINARY LOGS TO 'binlog.000172';"
配置 MySQL 自动删除过期的二进制日志文件
要配置 MySQL 自动删除过期的二进制日志文件,你需要修改 MySQL 的配置文件。由于 MySQL 在 Docker 容器中运行,你需要确保配置文件的更改能够持久化。
-
找到 MySQL 配置文件路径:在容器中找到 MySQL 配置文件(通常是
/etc/mysql/my.cnf
或/etc/my.cnf
)。 -
编辑 MySQL 配置文件:使用
vi
或nano
编辑配置文件:vi /etc/mysql/my.cnf
-
添加日志过期设置:在
[mysqld]
部分添加以下行:expire_logs_days = 7
使用 sed 命令在 [mysqld] 行后添加配置项
ini sed -i '/\[mysqld\]/a\expire_logs_days = 7' /etc/mysql/my.cnf
-
重启 MySQL 容器:
exit # 退出容器 docker restart <container_name_or_id>
验证配置是否生效
在容器中,使用 MySQL 客户端检查配置是否生效:
mysql -u root -p -e "SHOW VARIABLES LIKE 'expire_logs_days';"
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 7 |
+------------------+-------+
手动删除二进制日志文件
手动删除二进制日志文件不是推荐的方法,但在紧急情况下可以考虑:
-
进入日志目录:
cd /var/lib/mysql # 通常情况下,MySQL 数据文件会存储在这个路径下
-
删除不需要的日志文件:
rm binlog.000096 # 仅举例,确保不删除正在使用的文件
总结
使用 Docker 运行 MySQL 时,推荐使用 MySQL 提供的 PURGE BINARY LOGS
命令来安全地删除二进制日志文件。配置自动删除过期日志也可以帮助管理日志文件的空间使用。在进行手动删除操作前,请确保理解其后果,以免影响数据库的正常运行。
评论列表 (0 条评论)