暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL一键备份脚本

127

今天分享一个MySQL备份脚本。

1 简单概述

mysqldump
是MySQL自带的一个命令,用于备份数据库。它可以导出数据库的结构和数据。以下是一些常用的备份示例:

  • 备份所有数据库:
mysqldump -u root -p --all-databases > all_databases.sql

  • 备份指定数据库:
mysqldump -u root -p --databases mydb1 mydb2 > mydb_backup.sql

  • 备份数据库并压缩:
mysqldump -u root -p mydb | gzip > mydb_backup.sql.gz

2 编写脚本

上面的命令都是单次执行生效的,如果想持续备份,需要做成脚本,并设置定时任务

以下脚本是备份是针对整个数据库,你可以根据需要进行备份特定数据库

#!/bin/bash

# ====================================================
# MySQL 一键备份脚本
# 作者:liyb
# 说明:自动备份所有数据库 + 自动清理历史 + 日志记录
# ====================================================

# === 基本配置 ===
BACKUP_DIR="/data/db_backups"    # 备份目录
MYSQL_USER="root"                # 数据库用户名
MYSQL_PASS="123456"              # 数据库密码
MYSQL_HOST="localhost"           # 数据库地址
MYSQL_PORT="3306"                # 数据库端口
RETENTION_DAYS=7                 # 备份保留天数
DATE_TAG=$(date +"%Y-%m-%d_%H-%M-%S")  # 时间戳
LOG_FILE="/var/log/mysql_backup.log"   # 日志文件
DUMP_FILE="${BACKUP_DIR}/all-databases-${DATE_TAG}.sql"
ARCHIVE_FILE="${DUMP_FILE}.tar.gz"

# === 创建备份目录 ===

[ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}


# === 日志函数 ===
log() {
    echo"$(date +"%Y-%m-%d %H:%M:%S") : $1" | tee -a $LOG_FILE
}

# === 开始备份 ===
log"==== 开始 MySQL 数据库备份 ===="

# === 备份所有数据库 ===
log"正在备份所有数据库到 ${DUMP_FILE}"
/data/mysql/bin/mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} -P${MYSQL_PORT} --all-databases  > ${DUMP_FILE}

if [ $? -eq 0 ]; then
    log"数据库导出成功"
else
    log"数据库导出失败!请检查配置!"
    exit 1
fi

# === 压缩备份文件 ===
log"正在压缩备份文件..."
tar -czf ${ARCHIVE_FILE} -C ${BACKUP_DIR} $(basename ${DUMP_FILE})

if [ $? -eq 0 ]; then
    log"压缩完成:${ARCHIVE_FILE}"
    rm -f ${DUMP_FILE}# 删除未压缩的 SQL 文件
else
    log"压缩失败!"
    exit 1
fi

# === 删除 N 天前的备份文件 ===
log"正在清理 ${RETENTION_DAYS} 天前的备份..."
find ${BACKUP_DIR} -name "*.tar.gz" -type f -mtime +${RETENTION_DAYS} -exec rm -f {} \;

log"备份完成!文件存储在 ${ARCHIVE_FILE}"
log"==== MySQL 数据库备份结束 ===="

配置说明:

项目
内容
BACKUP_DIR
备份文件存放路径
MYSQL_USER/PASS
数据库用户名密码
RETENTION_DAYS
自动删除几天前的旧备份,节省空间
tar -czf
压缩 SQL 文件减少空间消耗
find命令
自动清理历史备份
log() 函数
每一步打印日志,方便排查

【温馨提示】脚本需要在测试环境模拟再到生产环境上执行,测试通过再制定定时任务

做成定时任务

在crontab里面添加定时任务,进行定时备份

crontab -e

# 将内容写入:每天凌晨一点进行备份
0 1 * * * bin/bash root/mysql_bakcup.sh

定时任务会把执行日志输出到/var/log/mysql_backup.log中,这个目录可以在脚本里面自定义

查看备份效果


今天分享到这里了。

关注小编,添,可进入技术交流群。


往期推荐


文章转载自运维李哥不背锅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论