在 Ubuntu 下编写一个用于管理 SQL 数据库的脚本,可以使用 Bash 脚本结合常用的命令行工具,如 mysql 或 psql。以下是一个示例,展示如何编写一个简单的 Bash 脚本来备份和恢复 MySQL 数据库。你可以根据具体需求进行修改和扩展。
安装 MySQL 客户端: 确保你的系统中已经安装了 MySQL 客户端工具。如果没有安装,可以使用以下命令安装:
sudo apt update
sudo apt install mysql-client
脚本权限:
使用文本编辑器(如 nano、vim)创建脚本文件,并赋予执行权限。
nano sqladmin.sh
chmod +x sqladmin.sh
#!/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
配置部分:
DB_HOST:数据库主机地址,通常为 localhost。DB_USER:数据库用户名。DB_PASSWORD:数据库密码。DB_NAME:要备份或恢复的数据库名称。BACKUP_DIR:备份文件存放的目录。备份函数 (backup_database):
mysqldump 命令备份指定数据库,并将备份文件保存到指定目录。恢复函数 (restore_database):
mysql 命令将备份文件恢复到数据库中。主菜单:
编辑脚本: 打开脚本文件,填写正确的数据库连接信息和备份目录路径。
nano sqladmin.sh
赋予执行权限:
chmod +x sqladmin.sh
运行脚本:
./sqladmin.sh
安全性:在脚本中明文存储数据库密码存在安全风险。可以考虑使用 .my.cnf 文件来存储凭据,或者通过环境变量传递密码。
示例 .my.cnf 配置:
[client]
user=your_username
password=your_password
host=localhost
确保 .my.cnf 文件权限设置为仅用户可读:
chmod 600 ~/.my.cnf
修改脚本中的 mysqldump 和 mysql 命令,去掉 -p 参数:
mysqldump "$DB_NAME" > "$BACKUP_FILE"
mysql "$DB_NAME" < "$1"
错误处理:脚本中基本的错误处理已添加,可以根据需要扩展更详细的日志记录和错误处理机制。
定时任务:可以使用 cron 设置定时备份任务。例如,每天凌晨 2 点执行备份:
crontab -e
添加以下行:
0 2 * * * /path/to/sqladmin.sh backup
根据需求,你可以为脚本添加更多功能,例如:
gzip 压缩备份文件,减少存储占用。pg_dump 和 pg_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 系统上更方便地管理数据库。如果有更具体的需求或遇到问题,欢迎进一步提问!