Published on

mysql备份脚本

Authors
  • avatar
    Name
    liuxiaobo
    Twitter

脚本

#!/bin/bash

# MySQL数据库连接用户名,根据实际情况修改
DB_USER="root"
# MySQL数据库连接密码,根据实际情况修改
DB_PASS="6737a7bffd67b1d5"
# 备份文件存储路径,根据实际情况修改
BACKUP_DIR="/www/lxb_mysql_backup"
# 备份文件保留数量,可自行调整
BACKUP_FILE_LIMIT=5
# 要备份的数据库列表,多个数据库以空格分隔,根据实际需求填写
DB_NAMES="aaa bbb"

# 循环备份每个数据库
for DB_NAME in $DB_NAMES
do
    # 构建备份文件所在的目录路径,如果不存在则创建
    BACKUP_SUB_DIR="${BACKUP_DIR}/${DB_NAME}"
    mkdir -p "${BACKUP_SUB_DIR}"

    # 备份文件名,包含数据库名和时间戳
    BACKUP_FILE="${BACKUP_SUB_DIR}/mysql_backup_${DB_NAME}_$(date +\%Y\%m\%d\%H\%M\%S).sql"

    # 使用mysqldump进行备份
    mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_FILE}

    # 检查备份文件是否存在,如果存在则进行备份文件数量清理
    if [ -f "${BACKUP_FILE}" ]; then
        # 获取当前数据库的备份文件列表并按时间排序
        BACKUP_FILES=$(ls -t ${BACKUP_SUB_DIR}/mysql_backup_${DB_NAME}_*.sql)
        # 计算备份文件数量
        FILE_COUNT=$(echo "${BACKUP_FILES}" | wc -l)

        # 如果备份文件数量超过设定的限制,则删除较旧的备份文件,保留最新的文件
        if [ ${FILE_COUNT} -gt ${BACKUP_FILE_LIMIT} ]; then
            # 计算需要删除的文件数量
            DELETE_COUNT=$((FILE_COUNT - BACKUP_FILE_LIMIT))
            # 删除较旧的备份文件(除了最新的 BACKUP_FILE_LIMIT 个文件之外的文件)
            for file in $(echo "${BACKUP_FILES}" | tail -n +$((${BACKUP_FILE_LIMIT}+1))); do
                rm -f "${file}"
            done
        fi
    fi
done

授权

chmod +x mysql_backup.sh

设置计划任务

crontab -e

0 * * * * /path/to/mysql_backup.sh