SQL Server在CentOS的备份恢复
导读:在 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(推荐)
- 备份脚本 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" - 赋权:chmod +x backup.sh
- 定时任务(每天 02:00 执行):
0 2 * * * /path/to/backup.sh
- 备份脚本 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]
- 差异与日志恢复(完整恢复模型)
- 完整: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
- 在 Windows 上备份(SSMS 或 T‑SQL)生成 .bak;
- 使用 WinSCP/SFTP 将 .bak 上传至 CentOS(如 /SQLServer/SQLBackup);
- 在 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
