MySQL一键备份脚本

艺帆风顺 发布于 2025-04-07 16 次阅读


今天分享一个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 1fi# === 压缩备份文件 ===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 1fi# === 删除 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中,这个目录可以在脚本里面自定义

查看备份效果

今天分享到这里了。

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


往期推荐