首页主机资讯SQL Server在CentOS的备份恢复

SQL Server在CentOS的备份恢复

时间2025-11-24 11:18:03发布访客分类主机资讯浏览1095
导读:在 CentOS 上备份与恢复 SQL Server 的实用指南 一 环境准备与权限 安装命令行工具与驱动:sudo yum install -y mssql-tools unixODBC-devel。 创建备份目录并赋权: sudo m...

在 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’。

二 备份方案

  • 方式一 T‑SQL 直接备份(示例)
    • 单库:
      BACKUP DATABASE [YourDB]
      TO DISK = N’/var/opt/mssql/backups/YourDB_$(date +“%F_%H%M%S”).bak’
      WITH FORMAT, INIT, STATS = 5;
    • 多库(排除系统库):
      DECLARE @DB NVARCHAR(100), @Path NVARCHAR(500)=N’/var/opt/mssql/backups/‘, @SQL NVARCHAR(MAX);
      EXEC xp_create_subdir @Path;
      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 @DB;
      WHILE @@FETCH_STATUS=0
      BEGIN
      SET @SQL=N’BACKUP DATABASE [‘+@DB+’] TO DISK=N’‘’+@Path+@DB+‘$(date +"%F%H%M%S").bak’’ WITH INIT, STATS=5’;
      EXEC(@SQL);
      FETCH NEXT FROM cur INTO @DB;
      END; CLOSE cur; DEALLOCATE cur;
  • 方式二 使用 bcp 导出表级数据(逻辑备份,适合抽取/迁移)
    bcp “SELECT * FROM YourDB.dbo.YourTable” queryout /var/opt/mssql/backups/YourTable.csv -c -t, -S localhost -U SA -P ‘YourPassword’
  • 方式三 SSMS 图形化备份
    在 SSMS 中右键数据库 → 任务 → 备份,指定目标路径(可为 Linux 上的共享路径或先拷贝至本机再还原)。

三 自动化备份与保留策略

  • Shell + sqlcmd + Cron(推荐)
    1. 备份脚本 backup.sh:
      #!/usr/bin/env bash
      /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q "
      BACKUP DATABASE [YourDB] TO DISK=N’/var/opt/mssql/backups/YourDB_$(date +"%F_%H%M%S").bak’ WITH FORMAT, INIT, STATS=5"
    2. 赋权:chmod +x backup.sh
    3. 定时任务(每天 02:00 执行):
      0 2 * * * /path/to/backup.sh
  • 备份保留(示例)
    0 3 * * * find /var/opt/mssql/backups/ -name “*.bak” -mtime +30 -exec rm { } ;
  • 可用性建议
    如需更细粒度与告警,可在有 SQL Server Agent 的环境中使用代理作业;在 Linux 上常用 Cron 替代。

四 恢复流程

  • 完整恢复(最常见)
    • RESTORE DATABASE [YourDB]
      FROM DISK = N’/var/opt/mssql/backups/YourDB_2025-09-01_020000.bak’
      WITH RECOVERY;
  • 差异与日志恢复(完整恢复模型)
    • 完整:RESTORE DATABASE [YourDB] FROM DISK = N’/backups/YourDB_Full.bak’ WITH NORECOVERY;
    • 差异:RESTORE DATABASE [YourDB] FROM DISK = N’/backups/YourDB_Diff.bak’ WITH NORECOVERY;
    • 日志:RESTORE LOG [YourDB] FROM DISK = N’/backups/YourDB_Log.trn’ WITH RECOVERY;
  • 覆盖现有数据库
    RESTORE DATABASE [YourDB] FROM DISK = N’/backups/YourDB.bak’ WITH REPLACE, RECOVERY;
  • 从 Windows 迁移到 CentOS
    1. 在 Windows 上备份(SSMS 或 T‑SQL)生成 .bak
    2. 使用 WinSCP/SFTP 将 .bak 上传至 CentOS(如 /SQLServer/SQLBackup);
    3. 在 CentOS 上用 SSMS 或 sqlcmd 执行 RESTORE。

五 验证与常见问题

  • 备份可用性验证
    • 检查文件存在与大小:ls -l /var/opt/mssql/backups/;
    • 还原前校验头部:RESTORE HEADERONLY FROM DISK = N’/var/opt/mssql/backups/YourDB.bak’;
    • 还原后完整性:DBCC CHECKDB([YourDB]);
  • 常见要点
    • 目标库恢复模式需为 FULL 才能做差异/日志备份与时间点恢复;
    • 路径必须对 mssql 用户可读写(建议 /var/opt/mssql/backups 且权限 700);
    • 跨服务器恢复时,注意 版本兼容 与文件路径映射(WITH MOVE);
    • 建议定期做恢复演练与备份文件校验,确保可恢复性。

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


若转载请注明出处: SQL Server在CentOS的备份恢复
本文地址: https://pptw.com/jishu/754269.html
CentOS Hadoop容器化部署怎么做 CentOS Hadoop虚拟机环境怎么搭建

游客 回复需填写必要信息