1.物理机

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之前产生的所有日志

 

2.docker 容器

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 容器中运行,你需要确保配置文件的更改能够持久化。

  1. 找到 MySQL 配置文件路径:在容器中找到 MySQL 配置文件(通常是 /etc/mysql/my.cnf 或 /etc/my.cnf)。

  2. 编辑 MySQL 配置文件:使用 vi 或 nano 编辑配置文件:

    vi /etc/mysql/my.cnf
  3. 添加日志过期设置:在 [mysqld] 部分添加以下行:

    expire_logs_days = 7

使用 sed 命令在 [mysqld] 行后添加配置项
ini sed -i '/\[mysqld\]/a\expire_logs_days = 7' /etc/mysql/my.cnf

  1. 重启 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 |
+------------------+-------+

手动删除二进制日志文件

手动删除二进制日志文件不是推荐的方法,但在紧急情况下可以考虑:

  1. 进入日志目录

    cd /var/lib/mysql  # 通常情况下,MySQL 数据文件会存储在这个路径下
  2. 删除不需要的日志文件

    rm binlog.000096  # 仅举例,确保不删除正在使用的文件

总结

使用 Docker 运行 MySQL 时,推荐使用 MySQL 提供的 PURGE BINARY LOGS 命令来安全地删除二进制日志文件。配置自动删除过期日志也可以帮助管理日志文件的空间使用。在进行手动删除操作前,请确保理解其后果,以免影响数据库的正常运行。