温馨提示×

SQL Server在Ubuntu上的备份与恢复策略是什么

小樊
37
2025-12-06 05:49:37
栏目: 云计算

SQL Server 在 Ubuntu 的备份与恢复策略

一 策略总览

  • 备份类型与适用场景
    • 完整备份 Full:备份整个数据库,作为所有恢复的基础。建议至少每日执行一次。
    • 差异备份 Differential:备份自上次完整备份后的变更,缩短恢复时间。建议每小时或每6小时一次(取决于变更量)。
    • 事务日志备份 Log:记录所有已提交事务,支持时间点恢复(PITR)。建议每5–15分钟一次(取决于RPO)。
    • 文件组备份 Filegroup:适用于超大型数据库,仅备份指定文件组,提升灵活性与速度。
  • 恢复模型选择
    • FULL:需要时间点恢复时使用;必须定期做日志备份。
    • BULK_LOGGED:在大量批量导入时减少日志量,同时保留时间点恢复能力(受限)。
    • SIMPLE:无法做日志备份,仅支持到最近一次完整/差异备份,适用于可容忍数据丢失的场景。
  • 存储与保留
    • 备份目录建议使用本地磁盘(如 /var/opt/mssql/backups),权限设为 mssql:mssql,700;定期清理过期备份(如保留30天)。
  • 自动化与监控
    • 使用 sqlcmd + cron 定时执行;脚本需记录日志、校验结果并告警;定期做恢复演练验证可用性。

二 备份实施步骤

  • 准备备份目录与权限
    • 创建目录并设定属主属组与权限:
      • sudo mkdir -p /var/opt/mssql/backups
      • sudo chown mssql:mssql /var/opt/mssql/backups
      • sudo chmod 700 /var/opt/mssql/backups
  • 安装客户端工具
    • sudo apt-get update && sudo apt-get install msodbcsql17
  • 单库备份脚本示例(T-SQL)
    • BACKUP DATABASE [YourDB] TO DISK = N’/var/opt/mssql/backups/YourDB_2025-12-06.bak’
      • WITH FORMAT, COMPRESSION, INIT, STATS = 10;
  • 多库备份脚本示例(T-SQL,排除系统库)
    • DECLARE @DBNAME NVARCHAR(100), @BackupPath NVARCHAR(100) = N’/var/opt/mssql/backups/';
      • BEGIN TRY
        • EXEC xp_create_subdir @BackupPath;
        • DECLARE Cur CURSOR FOR
          • SELECT name FROM sys.databases WHERE name NOT IN (N’master’, N’tempdb’, N’model’, N’msdb’);
        • OPEN Cur; FETCH NEXT FROM Cur INTO @DBNAME;
        • WHILE @@FETCH_STATUS = 0
          • BEGIN
            • DECLARE @File NVARCHAR(500) = @BackupPath + @DBNAME + N’_’ + CONVERT(NVARCHAR(8), GETDATE(), 112) + N’.bak’;
            • EXEC(N’BACKUP DATABASE [’ + @DBNAME + N’] TO DISK = N’‘’ + @File + N’‘’ WITH INIT, COMPRESSION, STATS = 5’);
            • FETCH NEXT FROM Cur INTO @DBNAME;
          • END; CLOSE Cur; DEALLOCATE Cur;
      • END TRY BEGIN CATCH PRINT ERROR_MESSAGE(); END CATCH
  • 执行与调度
    • 执行脚本:/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -i backup.sql
    • 定时清理(保留30天):0 2 * * * find /var/opt/mssql/backups/ -name “*.bak” -mtime +30 -exec rm {} ;
    • 定时备份(示例每日1点):0 1 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -i /path/backup.sql >> /var/log/mssql/backup.log 2>&1

三 恢复实施步骤

  • 时间点恢复流程(Full + Diff + Log)
    1. 若需继续前滚,先备份当前日志尾部:
      • BACKUP LOG [YourDB] TO DISK = N’/var/opt/mssql/backups/YourDB_tail.trn’ WITH NORECOVERY;
    2. 还原最近一次完整备份(无恢复,进入还原状态):
      • RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backups/YourDB_full_2025-12-06.bak’
        • WITH NORECOVERY, REPLACE;
    3. 如有差异备份,还原差异(无恢复):
      • RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backups/YourDB_diff_2025-12-06.bak’
        • WITH NORECOVERY;
    4. 还原日志至误删前的时间点(进入可用状态):
      • RESTORE LOG [YourDB] FROM DISK = N’/var/opt/mssql/backups/YourDB_log_*.trn’
        • WITH STOPAT = N’2025-12-06 10:00:00’, RECOVERY;
  • 仅完整备份恢复
    • RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backups/YourDB_full.bak’ WITH RECOVERY;
  • 使用 SSMS 图形界面
    • 通过 SSMS 连接到实例,使用“备份/还原数据库”向导执行上述步骤(适合复杂还原与验证)。

四 验证与运维要点

  • 完整性校验
    • 恢复后在目标库执行:DBCC CHECKDB ([YourDB]) 检查分配与一致性;定期抽样还原到测试库验证可用性。
  • 安全与权限
    • 备份文件权限 700、属主 mssql:mssql;凭据避免硬编码,建议使用 SQL Server 身份验证的受限账户或 Ubuntu 密钥环/凭据管理;传输到外部存储时启用 TLS/加密
  • 监控与告警
    • 记录备份日志并重试失败任务;对“备份失败/备份年龄过大/可用空间不足”设置告警;保留演练记录校验结果
  • 高可用与额外保护
    • 结合 Always On 可用性组日志传送实现高可用与异地保护;定期将备份复制到远程/对象存储以防范站点级故障。

0