温馨提示×

ubuntu下sqladmin脚本编写

小樊
46
2025-10-01 07:43:40
栏目: 云计算

在 Ubuntu 下编写一个用于管理 SQL 数据库的脚本,可以使用 Bash 脚本结合常用的命令行工具,如 mysqlpsql。以下是一个示例,展示如何编写一个简单的 Bash 脚本来备份和恢复 MySQL 数据库。你可以根据具体需求进行修改和扩展。

前提条件

  1. 安装 MySQL 客户端: 确保你的系统中已经安装了 MySQL 客户端工具。如果没有安装,可以使用以下命令安装:

    sudo apt update
    sudo apt install mysql-client
    
  2. 脚本权限: 使用文本编辑器(如 nanovim)创建脚本文件,并赋予执行权限。

    nano sqladmin.sh
    chmod +x sqladmin.sh
    

示例脚本:备份和恢复 MySQL 数据库

#!/bin/bash

# 配置部分
DB_HOST="localhost"
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database"

BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"

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

# 备份函数
backup_database() {
    echo "开始备份数据库 $DB_NAME ..."
    mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_FILE"
    if [ $? -eq 0 ]; then
        echo "数据库备份成功: $BACKUP_FILE"
    else
        echo "数据库备份失败!"
        exit 1
    fi
}

# 恢复函数
restore_database() {
    echo "开始恢复数据库 $DB_NAME$1 ..."
    mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" < "$1"
    if [ $? -eq 0 ]; then
        echo "数据库恢复成功!"
    else
        echo "数据库恢复失败!"
        exit 1
    fi
}

# 主菜单
while true; do
    echo "==================== SQL Admin 菜单 ====================="
    echo "1. 备份数据库"
    echo "2. 恢复数据库"
    echo "3. 退出"
    echo "请选择操作 (1-3): "
    read -r choice

    case $choice in
        1)
            backup_database
            ;;
        2)
            echo "请输入要恢复的备份文件路径:"
            read -r restore_file
            restore_database "$restore_file"
            ;;
        3)
            echo "退出脚本。"
            exit 0
            ;;
        *)
            echo "无效的选择,请重新输入。"
            ;;
    esac
done

脚本说明

  1. 配置部分

    • DB_HOST:数据库主机地址,通常为 localhost
    • DB_USER:数据库用户名。
    • DB_PASSWORD:数据库密码。
    • DB_NAME:要备份或恢复的数据库名称。
    • BACKUP_DIR:备份文件存放的目录。
  2. 备份函数 (backup_database)

    • 使用 mysqldump 命令备份指定数据库,并将备份文件保存到指定目录。
    • 备份文件名包含数据库名称和当前日期时间,以避免覆盖。
  3. 恢复函数 (restore_database)

    • 接受一个备份文件路径作为参数,使用 mysql 命令将备份文件恢复到数据库中。
  4. 主菜单

    • 提供用户选择备份、恢复或退出操作。
    • 根据用户选择调用相应的函数。

使用步骤

  1. 编辑脚本: 打开脚本文件,填写正确的数据库连接信息和备份目录路径。

    nano sqladmin.sh
    
  2. 赋予执行权限

    chmod +x sqladmin.sh
    
  3. 运行脚本

    ./sqladmin.sh
    

注意事项

  • 安全性:在脚本中明文存储数据库密码存在安全风险。可以考虑使用 .my.cnf 文件来存储凭据,或者通过环境变量传递密码。

    示例 .my.cnf 配置:

    [client]
    user=your_username
    password=your_password
    host=localhost
    

    确保 .my.cnf 文件权限设置为仅用户可读:

    chmod 600 ~/.my.cnf
    

    修改脚本中的 mysqldumpmysql 命令,去掉 -p 参数:

    mysqldump "$DB_NAME" > "$BACKUP_FILE"
    mysql "$DB_NAME" < "$1"
    
  • 错误处理:脚本中基本的错误处理已添加,可以根据需要扩展更详细的日志记录和错误处理机制。

  • 定时任务:可以使用 cron 设置定时备份任务。例如,每天凌晨 2 点执行备份:

    crontab -e
    

    添加以下行:

    0 2 * * * /path/to/sqladmin.sh backup
    

扩展功能

根据需求,你可以为脚本添加更多功能,例如:

  • 删除旧备份:自动删除超过一定时间的备份文件,以节省存储空间。
  • 压缩备份文件:使用 gzip 压缩备份文件,减少存储占用。
  • 支持 PostgreSQL:如果需要管理 PostgreSQL 数据库,可以添加相应的函数和工具(如 pg_dumppg_restore)。
  • 日志记录:将操作日志记录到文件中,便于后续审计和排查问题。

示例:添加删除旧备份功能

以下是如何在脚本中添加删除 7 天前备份的功能:

# 删除旧备份函数
delete_old_backups() {
    echo "删除 7 天前的备份文件..."
    find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm {} \;
    if [ $? -eq 0 ]; then
        echo "旧备份文件删除成功。"
    else
        echo "删除旧备份文件失败!"
    fi
}

# 在主菜单中添加选项
echo "4. 删除旧备份"
read -r choice

case $choice in
    1)
        backup_database
        ;;
    2)
        # ... 恢复逻辑
        ;;
    3)
        exit 0
        ;;
    4)
        delete_old_backups
        ;;
    *)
        echo "无效的选择,请重新输入。"
        ;;
esac

通过以上步骤,你可以创建一个功能完善的 SQL 管理脚本,帮助你在 Ubuntu 系统上更方便地管理数据库。如果有更具体的需求或遇到问题,欢迎进一步提问!

0