溫馨提示×

SQL Server在Ubuntu上的備份恢復實踐

小樊
46
2025-06-04 18:55:44
欄目: 云計算

在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、modelmsdb):

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

刪除超過30天的備份

使用 crontab 定時任務刪除超過30天的備份文件:

crontab -l
0 2 * * * find /var/opt/mssql/backups/ -name "*.bak" -mtime +30 -exec rm {} \;

恢復誤刪除的數據

如果誤刪除了數據庫中的數據,可以嘗試使用事務日志恢復。首先,確保數據庫的恢復模式設置為“完整(Full)”。然后,按照以下步驟操作:

  1. 備份當前數據庫的事務日志:

    BACKUP LOG [數據庫名] TO disk= N'備份文件名' WITH NORECOVERY
    
  2. 恢復一個誤刪除之前的完全備份:

    RESTORE DATABASE [數據庫名] FROM DISK = N'完全備份文件名' WITH NORECOVERY, REPLACE
    
  3. 將數據庫恢復至誤刪除之前的時間點:

    RESTORE LOG [數據庫] FROM DISK = N'第一步的日志備份文件名' WITH STOPAT = N'誤刪除之前的時間點' , RECOVERY
    

如果沒有完全備份,可以嘗試使用第三方工具如 SysTools SQL RecoveryRecovery for SQL Server 進行數據恢復。

請注意,上述步驟和腳本需要根據實際環境進行調整。在執行任何備份和恢復操作之前,請確保已經備份了所有重要數據,并理解相關操作的風險。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女