在 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 系統上更方便地管理數據庫。如果有更具體的需求或遇到問題,歡迎進一步提問!