在Debian上進行SQL Server備份與恢復的完整指南
在Debian上操作SQL Server備份與恢復前,需確保已完成以下基礎配置:
mssql-tools
包以使用sqlcmd
工具(執行sudo apt-get install mssql-tools unixodbc-dev
)。sudo systemctl start mssql-server
啟動服務,并用sudo systemctl status mssql-server
確認運行狀態。步驟1:登錄SQL Server
執行以下命令登錄(替換your_password
為SA用戶密碼):
sqlcmd -S localhost -U sa -P your_password
步驟2:執行備份命令
在sqlcmd
提示符下,輸入備份命令(替換YourDatabaseName
為數據庫名,/var/opt/mssql/backup/YourDatabaseName.bak
為備份路徑):
BACKUP DATABASE [YourDatabaseName]
TO DISK = '/var/opt/mssql/backup/YourDatabaseName.bak'
WITH FORMAT, MEDIANAME = 'YourDatabaseNameBackup', NAME = 'Full Backup of YourDatabaseName';
FORMAT
:格式化備份設備(覆蓋現有備份)。MEDIANAME
:備份介質名稱(可選)。NAME
:備份集名稱(可選)。步驟3:退出sqlcmd
輸入EXIT
退出命令行工具。
創建備份腳本(如backup_database.sh
):
#!/bin/bash
# 配置參數
SERVER="localhost"
USER="sa"
PASSWORD="your_password"
DATABASE="YourDatabaseName"
BACKUP_PATH="/var/opt/mssql/backup"
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_PATH/full_backup_$DATE.bak"
# 創建備份目錄(若不存在)
mkdir -p $BACKUP_PATH
# 執行備份
sqlcmd -S $SERVER -U $USER -P $PASSWORD -Q "BACKUP DATABASE [$DATABASE] TO DISK = '$BACKUP_FILE' WITH FORMAT, INIT, STATS = 10"
# 檢查備份結果
if [ $? -eq 0 ]; then
echo "Backup completed successfully: $BACKUP_FILE"
else
echo "Backup failed!"
fi
賦予執行權限并運行:
chmod +x backup_database.sh
./backup_database.sh
編輯crontab:
crontab -e
添加定時任務(如每天凌晨2點執行備份):
0 2 * * * /path/to/backup_database.sh >> /var/log/sql_backup.log 2>&1
/var/log/sql_backup.log
,便于后續檢查。步驟1:登錄SQL Server
同備份步驟,執行sqlcmd -S localhost -U sa -P your_password
。
步驟2:執行恢復命令
在sqlcmd
提示符下,輸入恢復命令(替換YourDatabaseName
為數據庫名,/var/opt/mssql/backup/YourDatabaseName.bak
為備份路徑):
RESTORE DATABASE [YourDatabaseName]
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName.bak'
WITH REPLACE, RECOVERY;
REPLACE
:覆蓋現有數據庫(若數據庫已存在)。RECOVERY
:將數據庫恢復至可用狀態(適用于完整備份+事務日志備份的最后一步)。步驟3:退出sqlcmd
輸入EXIT
退出。
WITH NORECOVERY
),再恢復差異備份(WITH RECOVERY
):RESTORE DATABASE [YourDatabaseName] FROM DISK = '/path/to/full_backup.bak' WITH NORECOVERY;
RESTORE DATABASE [YourDatabaseName] FROM DISK = '/path/to/diff_backup.bak' WITH RECOVERY;
WITH RECOVERY
):RESTORE DATABASE [YourDatabaseName] FROM DISK = '/path/to/full_backup.bak' WITH NORECOVERY;
RESTORE LOG [YourDatabaseName] FROM DISK = '/path/to/log1.trn' WITH NORECOVERY;
RESTORE LOG [YourDatabaseName] FROM DISK = '/path/to/log2.trn' WITH RECOVERY;
/var/opt/mssql/backup
)對SQL Server服務用戶(mssql
)可寫。RESTORE VERIFYONLY
命令)。/var/log/sql_backup.log
)。