在Ubuntu上使用SQL Server進行數據庫備份和恢復,可以參考以下步驟和腳本。這些步驟涵蓋了創建備份目錄、編寫備份腳本、執行備份、刪除過期備份以及恢復誤刪除數據的實踐。
首先,創建一個用于存放備份文件的目錄,并設置相應的權限:
sudo mkdir -p /var/opt/mssql/backupssudo chown mssql:mssql /var/opt/mssql/backupssudo chmod 700 /var/opt/mssql/backups
創建一個備份腳本 bk.sql
,用于備份所有用戶數據庫(除了 master
、tempdb
、model
和 msdb
):
DECLARE @DBNAME NVARCHAR(100)
DECLARE @BackupPath NVARCHAR(100) = '/var/opt/mssql/backups/'
DECLARE @SQL NVARCHAR(MAX)
BEGIN TRY
-- 測試路徑寫入權限
EXEC xp_create_subdir @BackupPath;
DECLARE CurDBName CURSOR FOR
SELECT name FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
OPEN CurDBName
FETCH NEXT FROM CurDBName INTO @DBNAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @FileName NVARCHAR(500) = @BackupPath + @DBNAME + '_test.bak'
-- 使用最小化參數測試
SET @SQL = N'BACKUP DATABASE [' + @DBNAME + '] TO DISK = N''' + @FileName + ''' WITH INIT, STATS = 5'
PRINT 'Executing: ' + @SQL
EXEC(@SQL)
FETCH NEXT FROM CurDBName INTO @DBNAME
END
CLOSE CurDBName
DEALLOCATE CurDBName
END TRY
BEGIN CATCH
PRINT 'Error: ' + ERROR_MESSAGE()
END CATCH
使用 sqlcmd
命令執行備份腳本:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'zxcvbnm@123' -i bk.sql
使用 crontab
定時任務刪除超過30天的備份文件:
crontab -l
0 2 * * * find /var/opt/mssql/backups/ -name "*.bak" -mtime +30 -exec rm {} \;
如果誤刪除了數據庫中的數據,可以嘗試使用事務日志恢復。首先,確保數據庫的恢復模式設置為“完整(Full)”。然后,按照以下步驟操作:
備份當前數據庫的事務日志:
BACKUP LOG [數據庫名] TO disk= N'備份文件名' WITH NORECOVERY
恢復一個誤刪除之前的完全備份:
RESTORE DATABASE [數據庫名] FROM DISK = N'完全備份文件名' WITH NORECOVERY, REPLACE
將數據庫恢復至誤刪除之前的時間點:
RESTORE LOG [數據庫] FROM DISK = N'第一步的日志備份文件名' WITH STOPAT = N'誤刪除之前的時間點' , RECOVERY
如果沒有完全備份,可以嘗試使用第三方工具如 SysTools SQL Recovery
或 Recovery for SQL Server
進行數據恢復。
請注意,上述步驟和腳本需要根據實際環境進行調整。在執行任何備份和恢復操作之前,請確保已經備份了所有重要數據,并理解相關操作的風險。