Ubuntu上SQL Server如何备份
导读:Ubuntu上SQL Server备份实操指南 一 准备与工具 安装命令行工具:执行 sudo apt-get update && sudo apt-get install -y mssql-tools unixodbc-...
Ubuntu上SQL Server备份实操指南
一 准备与工具
- 安装命令行工具:执行 sudo apt-get update & & sudo apt-get install -y mssql-tools unixodbc-dev,确保可用 sqlcmd。如使用本机实例,连接主机可填 localhost。为稳妥,建议使用具有备份权限的账户(如 SA 或具备相应权限的域/本地账户)。备份目录需对运行 SQL Server 的 mssql 用户可写(常见路径如 /var/opt/mssql/backup 或 /var/opt/mssql/data/backup)。
二 使用 sqlcmd 执行备份
- 完全备份(示例将文件写入 /var/opt/mssql/backup,文件名含日期)
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “BACKUP DATABASE [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB_$(date +%F).bak’
WITH INIT, SKIP, NAME = ‘YourDB-Full $(date +%F)’” - 差异备份(基于最近一次完全备份)
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “BACKUP DATABASE [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB_$(date +%F)_diff.bak’
WITH DIFFERENTIAL, INIT, SKIP, NAME = ‘YourDB-Diff $(date +%F)’” - 事务日志备份(数据库需为 FULL 或 BULK_LOGGED 恢复模式)
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “BACKUP LOG [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB_$(date +%F)_log.trn’
WITH INIT, SKIP, NAME = ‘YourDB-Log $(date +%F)’” - 常用选项说明:INIT 覆盖同名文件、SKIP 跳过过期备份检查、NAME 指定备份集名称。路径建议使用 N’…’ 前缀避免转义问题。
三 自动化与远程备份
- 定时任务(crontab)
- 每天 01:00 做完全备份:
0 1 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “BACKUP DATABASE [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB_$(date +%F).bak’ WITH INIT, SKIP, NAME = ‘YourDB-Full $(date +%F)’” - 每天 03:30 做差异备份、03:40 做日志备份(示例):
30 3 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “BACKUP DATABASE [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB_$(date +%F)diff.bak’ WITH DIFFERENTIAL, INIT, SKIP, NAME = ‘YourDB-Diff $(date +%F)’" 40 3 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q "BACKUP LOG [YourDB] TO DISK = N’/var/opt/mssql/backup/YourDB$(date +%F)_log.trn’ WITH INIT, SKIP, NAME = ‘YourDB-Log $(date +%F)’” - 提示:crontab 中 % 需转义为 %,或使用脚本封装 date 命令。
- 每天 01:00 做完全备份:
0 1 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
- 异地/对象存储备份(rclone 示例)
- 安装:sudo apt-get install -y rclone
- 配置:rclone config(按向导添加如 minio、s3、onedrive 等远端)
- 同步:rclone sync /var/opt/mssql/backup remote_name:bucket/mssql-backup
- 可将同步命令加入 crontab,实现“本地保留 N 天 + 远端长期留存”的双地备份策略。
四 恢复与校验
- 基本恢复(示例)
- 完全恢复:
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backup/YourDB_2025-08-30.bak’ WITH RECOVERY” - 使用 NORECOVERY 做分阶段恢复(先完全,再差异/日志):
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backup/YourDB_full.bak’ WITH NORECOVERY” sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “RESTORE DATABASE [YourDB] FROM DISK = N’/var/opt/mssql/backup/YourDB_diff.bak’ WITH NORECOVERY” sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
-Q “RESTORE LOG [YourDB] FROM DISK = N’/var/opt/mssql/backup/YourDB_log.trn’ WITH RECOVERY”
- 完全恢复:
sqlcmd -S localhost -U SA -P ‘YourStrong@Passw0rd’
- 一致性校验
- 在 SSMS 或 sqlcmd 中执行:DBCC CHECKDB ([YourDB]),确保恢复后数据页与索引一致。
- 恢复模式要点
- 需要日志备份时,数据库恢复模式应为 FULL 或 BULK_LOGGED;仅做时点恢复或不需要日志截断时可用 SIMPLE。
五 常见问题与最佳实践
- 权限与路径:确保备份目录对 mssql 用户可写(chown mssql:mssql /your/backup/dir),否则会报“操作系统错误 5(拒绝访问)”。路径建议使用 N’…’ 并避免空格。
- 保留策略:在脚本中按日期滚动保留(如保留最近 7 天),并定期清理过期文件,避免磁盘被占满。
- 监控与告警:将备份日志重定向到文件(> > /var/log/mssql/backup.log 2> & 1),并配置简单告警(如日志出现 “ERROR” 时邮件/企业微信/钉钉通知)。
- 安全性:避免在命令行中明文写密码,生产可用 SQL Server 身份验证的集成安全、mssql.conf 凭据文件 或 环境变量 + 权限最小化 的方式;对远端存储启用 加密与最小权限访问。
- 图形化工具:需要可视化时可用 SSMS 连接 Ubuntu 上的 SQL Server 执行备份/恢复,适合临时操作或演练。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上SQL Server如何备份
本文地址: https://pptw.com/jishu/750529.html
