清理mysql binlog日志的脚本 
时间: 2023-05-18 22:03:22 浏览: 69
以下是一个清理 MySQL binlog 日志的脚本示例:
```bash
#!/bin/bash
# 设置变量
MYSQL_USER="root"
MYSQL_PASSWORD="password"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
BINLOG_DIR="/var/lib/mysql"
BINLOG_PREFIX="mysql-bin"
# 获取当前 binlog 文件名
CURRENT_BINLOG=$(mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -P${MYSQL_PORT} -e "SHOW MASTER STATUS\G" | awk '/File:/ {print $2}')
# 获取所有 binlog 文件名
ALL_BINLOGS=$(ls ${BINLOG_DIR}/${BINLOG_PREFIX}* | grep -v ${CURRENT_BINLOG})
# 删除旧的 binlog 文件
for BINLOG in ${ALL_BINLOGS}; do
rm -f ${BINLOG}
done
```
这个脚本会获取当前正在使用的 binlog 文件名,然后删除所有旧的 binlog 文件。你可以将其保存为一个文件,比如 `clean_binlogs.sh`,然后在命令行中运行它。
注意:在运行脚本之前,请确保你已经备份了所有的 binlog 文件,以防止数据丢失。
相关问题
清理Mysql binlog日志的脚本
以下是一个清理 MySQL binlog 日志的脚本示例:
#!/bin/bash
# 设置变量
MYSQL_USER="root"
MYSQL_PASSWORD="password"
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
BINLOG_DIR="/var/lib/mysql/"
BINLOG_PREFIX="mysql-bin"
BINLOG_DAYS_TO_KEEP="7"
# 获取当前日期
CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S")
# 获取需要删除的 binlog 文件名
BINLOG_FILES_TO_DELETE=$(mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -P${MYSQL_PORT} -e "SHOW BINARY LOGS;" | awk '{if($1 < DATE_SUB(NOW(), INTERVAL ${BINLOG_DAYS_TO_KEEP} DAY)) print $1}' | grep ${BINLOG_PREFIX})
# 删除 binlog 文件
for BINLOG_FILE in ${BINLOG_FILES_TO_DELETE}
do
echo "${CURRENT_DATE} - Deleting binlog file ${BINLOG_FILE}"
rm -f ${BINLOG_DIR}/${BINLOG_FILE}
done
echo "${CURRENT_DATE} - Done."
MySQL清理过期binlog的逻辑
MySQL清理过期binlog的逻辑如下:
1. MySQL会根据参数expire_logs_days设定binlog的过期时间,默认为0,即不自动清理过期binlog。
2. 当expire_logs_days大于0时,MySQL会在每次启动时检查binlog是否过期,如果过期则自动删除。
3. 过期的binlog文件的命名格式为:mysql-bin.xxxxxx,其中xxxxxx为一串数字,表示binlog的序列号。
4. MySQL会在binlog文件的头部记录该文件的创建时间和过期时间,以便在清理过期binlog时进行判断。
5. 如果需要手动清理过期binlog,可以使用命令PURGE BINARY LOGS TO 'mysql-bin.xxxxxx',该命令将清理所有序列号小于等于指定序列号的binlog文件。
需要注意的是,清理过期binlog可能会导致数据恢复困难,因此建议在清理之前先备份所有binlog文件。
相关推荐













