ubuntu

SQL Server在Ubuntu上的备份恢复实践

小樊
52
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,用于备份所有用户数据库(除了 mastertempdbmodelmsdb):

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
看了该问题的人还看了