CentOS中SQL Server的备份与恢复流程
导读: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]
- 差异与日志恢复(完整恢复模型)
- 完整备份后恢复差异:
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;
- RESTORE DATABASE [YourDatabase]
- 覆盖已有数据库
- 在恢复命令末尾追加 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 { } ;
- 示例(每天 02:00 备份单库,文件名含日期):
- 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
