在Ubuntu下透過cron執行SQL完整備份
這篇文章紀錄如何在Linux Ubuntu上使用SQL Server的sqlcmd工具,透過cron排程來執行完整備份。如果還沒有安裝過sqlcmd工具的可以在相關連結找到安裝方法。
切換到最高權限
切換到root身分,之後指令不再贅述
sudo -i
安裝cron排程工具
cron是Linux系統中用來定期執行任務的工具,通常預設已經安裝在Ubuntu上,但如果沒有的話可以透過下列指令安裝:
apt update
apt install cron -y
安裝後可以透過下列指令來檢查cron的狀態:
systemctl status cron
如果有出現綠色的active (running)
,就表示cron已經啟動了。
編輯bash排程檔案
我的目標是要先把YourSqlCatalogName
這個資料庫桶子備份到/var/opt/mssql/backup
這個資料夾中,然後再把這個備份檔案移動到/shared
這個資料夾中以利後續的處理。如果你有其他的需求可以自行更換指令,指令碼其實不複雜,以下是的bash指令碼:
#!/bin/bash
# sql parameter
DB_NAME="YourSqlCatalogName"
SQL_USER="YourUserName"
SQL_PASS="YourSqlPassword"
# backup file path
BACKUP_DIR="/var/opt/mssql/backup"
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}.bak"
SHARED_DIR="/shared"
SHARED_BACKUP_FILE="${SHARED_DIR}/${DB_NAME}.bak"
# get current timestamp in yyyy-MM-dd HH:mm:ss format
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# make sure folders exist
mkdir -p "$BACKUP_DIR"
mkdir -p "$SHARED_DIR"
# backup SQL catalog
if /opt/mssql-tools18/bin/sqlcmd -C -S localhost -U "$SQL_USER" -P "$SQL_PASS" -Q "BACKUP DATABASE [$DB_NAME] TO DISK = N'$BACKUP_FILE' WITH INIT, FORMAT, COMPRESSION;"; then
echo "[$TIMESTAMP] Database backup successful. Backup file is located at [$BACKUP_FILE]."
mv -f "$BACKUP_FILE" "$SHARED_BACKUP_FILE"
echo "[$TIMESTAMP] Successfully moved backup file to [$SHARED_BACKUP_FILE]."
else
echo "[$TIMESTAMP] ERROR: Database backup failed for database [$DB_NAME]."
fi
這個指令碼我將會儲存並放在/usr/local/sbin/backupDB.sh
,下列是注意事項:
- 如果這個檔案是在Windows下編輯,那麼請務必取消
UTF-8 BOM
,否則會導致bash
無法執行。 - 移動到這個目錄後,請務必給予執行權限:
chmod +x /usr/local/sbin/backupDB.sh
。 - 確定檔案權限給root:
chown root:root /usr/local/sbin/backup_media.sh
。 - 完成後可以測試跑看看是否有達成自動備份的需求。
編輯cron排程
接著我們可以透過cron來編輯排程,這邊我將會設定每天的凌晨7點執行這個備份指令碼,請輸入crontab -e
,在檔案最末段插入下列指令:
0 7 * * * /usr/local/sbin/backupDB.sh >> /shared/backupDB_log.txt 2>&1
這個指令的意思是每天的7點整執行/usr/local/sbin/backupDB.sh
,並將執行過程log檔案寫入到/shared/backupDB_log.txt
中。
完成後可以透過下列指令來檢查排程是否成功加入:
crontab -l
相關連結
- 在Ubuntu下安裝Microsoft SQL Server 2022
- 在Ubuntu下進行mssql-server之資料桶(Catalog)備份與異地還原
- 在Ubuntu下安裝sqlcmd(for mssql-server)
- 在Ubuntu下透過cron執行SQL完整備份