写一个脚本/root/mysqlbak.sh,备份mysql数据库 ?

参考回答

下面是一个基本的 mysqlbak.sh 脚本,用于备份 MySQL 数据库。这个脚本会定期备份数据库,并将备份存储到指定的目录中,文件名带有时间戳以避免覆盖。

脚本内容(/root/mysqlbak.sh):

#!/bin/bash

# 设置 MySQL 用户和密码
MYSQL_USER="root"
MYSQL_PASSWORD="your_password"
MYSQL_HOST="localhost"

# 备份文件存储目录
BACKUP_DIR="/root/mysql_backups"
DATE=(date +%Y%m%d%H%M%S)  # 用当前时间戳命名备份文件

# 要备份的数据库列表
DATABASES=("database1" "database2" "database3")  # 可以添加更多的数据库名

# 创建备份目录(如果不存在)
mkdir -p "BACKUP_DIR"

# 备份每个数据库
for DB in "{DATABASES[@]}"
do
    BACKUP_FILE="BACKUP_DIR/DB-DATE.sql"
    echo "正在备份数据库 DB 到BACKUP_FILE"

    # 使用 mysqldump 命令备份数据库
    mysqldump -u "MYSQL_USER" -p"MYSQL_PASSWORD" -h "MYSQL_HOST" "DB" > "BACKUP_FILE"

    # 检查备份是否成功
    if [? -eq 0 ]; then
        echo "数据库 DB 备份成功"
    else
        echo "数据库DB 备份失败"
    fi
done

# 删除超过 7 天的备份文件(可选,保持备份文件清理)
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm -f {} \;

echo "备份过程完成"

详细讲解与拓展

  1. 变量配置:
    • MYSQL_USER:MySQL 用户名,这里设置为 root
    • MYSQL_PASSWORD:MySQL 用户密码,替换为你的实际密码。
    • MYSQL_HOST:MySQL 服务器的主机地址,默认为 localhost
    • BACKUP_DIR:备份文件存储的目录,这里设置为 /root/mysql_backups
    • DATE:备份文件的时间戳,用当前日期和时间生成文件名。
  2. 备份数据库:
    • 使用 mysqldump 命令来备份每个数据库。命令格式为:
      mysqldump -u "MYSQL_USER" -p"MYSQL_PASSWORD" -h "MYSQL_HOST" "DB" > "$BACKUP_FILE"
      
    • 其中,-u 是指定 MySQL 用户名,-p 是指定密码,-h 是指定 MySQL 服务器主机名,最后是数据库名。
    • 备份文件将保存为 database_name-YYYYMMDDHHMMSS.sql 的形式,确保文件名唯一。
  3. 删除过期备份:
    • 使用 find 命令删除超过 7 天的备份文件:
      find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm -f {} \;
      
    • -mtime +7 表示查找修改时间超过 7 天的文件,-exec rm -f 删除这些文件。
  4. 执行状态检查:
    • 每次备份后,检查 mysqldump 的返回值 $?。如果返回值为 0,表示备份成功;否则表示备份失败。

如何使用该脚本

  1. 保存脚本:
    将脚本保存为 /root/mysqlbak.sh

  2. 赋予执行权限:

    sudo chmod +x /root/mysqlbak.sh
    
  3. 手动运行备份:
    直接执行脚本进行手动备份:

    /root/mysqlbak.sh
    
  4. 定期备份(可选):
    可以通过 crontab 定期运行脚本进行自动备份。例如,每天凌晨 2 点执行该脚本:

    crontab -e
    

    添加以下行:

    0 2 * * * /root/mysqlbak.sh
    

总结

  • 该脚本通过 mysqldump 工具进行 MySQL 数据库的备份。
  • 备份的文件以时间戳命名,避免覆盖。
  • 支持定期清理超过 7 天的备份文件,保持备份目录的整洁。
  • 可以通过 cron 定时执行,自动化数据库备份任务。

发表评论

后才能评论