首页主机资讯CentOS中SQL Server的备份与恢复流程

CentOS中SQL Server的备份与恢复流程

时间2025-12-04 12:58:04发布访客分类主机资讯浏览616
导读:CentOS中SQL Server的备份与恢复流程 一 环境准备与权限 安装命令行工具与驱动:sudo yum install -y mssql-tools unixODBC-devel。 创建备份目录并赋权: sudo mkdir -p...

CentOS中SQL Server的备份与恢复流程

一 环境准备与权限

  • 安装命令行工具与驱动:sudo yum install -y mssql-tools unixODBC-devel
  • 创建备份目录并赋权:
    sudo mkdir -p /var/opt/mssql/backups
    sudo chown mssql:mssql /var/opt/mssql/backups
    sudo chmod 700 /var/opt/mssql/backups
  • 确认服务运行:sudo systemctl status mssql-server(未运行则 sudo systemctl start mssql-server)。
  • 连接工具:使用 sqlcmd 执行 T‑SQL,示例:sqlcmd -S localhost -U SA -P ‘YourPassword’。

二 备份流程

  • 方式A T‑SQL 完整备份(推荐)
    • 单库示例:
      BACKUP DATABASE [YourDatabase]
      TO DISK = N’/var/opt/mssql/backups/YourDatabase_$(date +%F).bak’
      WITH FORMAT, MEDIANAME = ‘YourDatabaseBackup’, NAME = ‘Full Backup of YourDatabase’, STATS = 5;
    • 多库批量示例(排除系统库):
      DECLARE @DBNAME NVARCHAR(100), @BackupPath NVARCHAR(100)=‘/var/opt/mssql/backups/’, @SQL NVARCHAR(MAX);
      EXEC xp_create_subdir @BackupPath;
      DECLARE Cur CURSOR FOR
      SELECT name FROM sys.databases WHERE name NOT IN (‘master’,‘tempdb’,‘model’,‘msdb’);
      OPEN Cur; FETCH NEXT FROM Cur INTO @DBNAME;
      WHILE @@FETCH_STATUS=0
      BEGIN
      SET @SQL=N’BACKUP DATABASE [‘+@DBNAME+’] TO DISK=N’‘’+@BackupPath+@DBNAME+‘_$(date +%F).bak’’ WITH INIT, STATS=5’;
      EXEC(@SQL); FETCH NEXT FROM Cur INTO @DBNAME;
      END; CLOSE Cur; DEALLOCATE Cur;
  • 方式B 表级导出(bcp,仅导出数据,非全库备份)
    bcp “SELECT * FROM YourDatabase.dbo.YourTable” queryout /var/opt/mssql/backups/YourTable.csv -c -t, -S localhost -U SA -P ‘YourPassword’
  • 执行与校验
    • 执行备份:/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -i backup.sql
    • 校验:ls -l /var/opt/mssql/backups/ 查看文件是否存在且大小合理。

三 恢复流程

  • 准备与校验
    • 将备份文件放到目标实例可访问路径(如 /var/opt/mssql/backups/),必要时复制到该目录。
    • 校验备份可用性(RESTORE VERIFYONLY)或在恢复命令中使用 STATS = 5 观察进度。
  • 完整恢复(最常见)
    • RESTORE DATABASE [YourDatabase]
      FROM DISK = N’/var/opt/mssql/backups/YourDatabase_2025-12-04.bak’
      WITH RECOVERY, STATS = 5;
  • 差异与日志恢复(完整恢复模型)
    • 完整备份后恢复差异:
      RESTORE DATABASE [YourDatabase]
      FROM DISK = N’/var/opt/mssql/backups/YourDatabase_Diff.bak’
      WITH NORECOVERY;
    • 继续恢复事务日志(时间点恢复最后一步用 RECOVERY):
      RESTORE LOG [YourDatabase]
      FROM DISK = N’/var/opt/mssql/backups/YourDatabase_Log.trn’
      WITH RECOVERY;
  • 指定数据文件路径(当目标路径不同或需重命名数据库时)
    • RESTORE DATABASE [YourDatabase]
      FROM DISK = N’/SQLServer/SQLBackup/YourDatabase.bak’
      WITH FILE = 1,
      MOVE N’YourDatabase’ TO N’/var/opt/mssql/data/YourDatabase.mdf’,
      MOVE N’YourDatabase_log’ TO N’/var/opt/mssql/data/YourDatabase_log.ldf’,
      NOUNLOAD, STATS = 5;
  • 覆盖已有数据库
    • 在恢复命令末尾追加 WITH REPLACE

四 自动化与保留策略

  • Cron 定时备份(系统级)
    • 示例(每天 02:00 备份单库,文件名含日期):
      0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “BACKUP DATABASE [YourDatabase] TO DISK = ‘/var/opt/mssql/backups/YourDatabase_$(date +%F).bak’ WITH FORMAT, MEDIANAME=‘YourDatabaseBackup’, NAME=‘Full Backup of YourDatabase’; ”
    • 示例(清理 30 天前备份):
      0 2 * * * find /var/opt/mssql/backups/ -name “*.bak” -mtime +30 -exec rm { } ;
  • SQL Server Agent(图形化与实例级计划任务,适合生产)
    • 在 SSMS 中:管理 → SQL Server 代理 → 新建作业 → 步骤(T‑SQL 备份命令)→ 计划(频率/时间)。
  • 备份策略建议
    • 关键库使用完整恢复模型,按“完整备份 + 差异备份 + 事务日志备份”实施;普通库可用完整 + 差异
    • 定期做恢复演练备份校验(如 RESTORE VERIFYONLY),并保留至少2–4周的历史备份。

五 常见问题与排错

  • 权限与路径:备份目录需 mssql:mssql 700;路径使用 Linux 绝对路径(如 /var/opt/mssql/backups/),避免 Windows 风格路径。
  • 恢复模式:需要时间点恢复差异/日志备份时,数据库恢复模型应为完整;简单恢复模型不支持日志备份。
  • 文件占用与覆盖:目标库在线时还原会失败;必要时先 OFFLINE 或使用 WITH REPLACE
  • 文件路径不一致:使用 MOVE 将备份中的逻辑文件映射到目标实例的数据目录(/var/opt/mssql/data/)。
  • 版本兼容:跨版本迁移时,目标实例版本需不低于源实例;必要时在源端使用 COPY_ONLY 完整备份避免破坏现有备份链。
  • 备份可用性:还原前执行 RESTORE VERIFYONLY;还原后用 DBCC CHECKDB 校验一致性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS中SQL Server的备份与恢复流程
本文地址: https://pptw.com/jishu/763450.html
Filebeat在Debian上的版本选择建议 CentOS上Node.js如何进行版本管理

游客 回复需填写必要信息