温馨提示×

Ubuntu上SQL Server备份与恢复方法

小樊
41
2025-11-14 12:29:11
栏目: 云计算

Ubuntu上SQL Server备份与恢复方法

一 环境准备与权限

  • 安装客户端工具:执行 sudo apt-get update && sudo apt-get install -y mssql-tools unixodbc-dev,确保可以使用 sqlcmd。如使用本机实例,连接主机名可用 localhost。为备份目录(如 /var/opt/mssql/backups)设置属主与权限:sudo mkdir -p /var/opt/mssql/backups && sudo chown mssql:mssql /var/opt/mssql/backups && sudo chmod 700 /var/opt/mssql/backups。备份前确认 SQL Server 服务运行:sudo systemctl status mssql-server。为提高安全性,建议使用 SA 以外的专用账户并配置最小权限。

二 使用 sqlcmd 的备份与恢复

  • 手动完整备份(示例):sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “BACKUP DATABASE [YourDatabaseName] TO DISK = N’/var/opt/mssql/backups/YourDatabaseName_full.bak’ WITH FORMAT, COMPRESSION, STATS = 10”。FORMAT 会在首次或覆盖时重建介质;COMPRESSION 减少备份体积;STATS 显示进度。
  • 差异与日志备份:差异 sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “BACKUP DATABASE [YourDatabaseName] TO DISK = N’/var/opt/mssql/backups/YourDatabaseName_diff.bak’ WITH DIFFERENTIAL, INIT, SKIP, NAME ‘YourDatabaseName-diff’”;日志 sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “BACKUP LOG [YourDatabaseName] TO DISK = N’/var/opt/mssql/backups/YourDatabaseName_log.bak’ WITH INIT, SKIP”。
  • 恢复流程:先恢复完整备份(NORECOVERY 以便后续还原差异/日志),再恢复差异(NORECOVERY),最后恢复日志(WITH RECOVERY 使数据库上线)。示例:RESTORE DATABASE [YourDatabaseName] FROM DISK = N’/var/opt/mssql/backups/YourDatabaseName_full.bak’ WITH NORECOVERY;RESTORE DATABASE [YourDatabaseName] FROM DISK = N’/var/opt/mssql/backups/YourDatabaseName_diff.bak’ WITH NORECOVERY;RESTORE LOG [YourDatabaseName] FROM DISK = N’/var/opt/mssql/backups/YourDatabaseName_log.bak’ WITH RECOVERY
  • 恢复后完整性校验:sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “DBCC CHECKDB ([YourDatabaseName])”。

三 自动化与异地备份

  • 定时任务备份脚本示例(/opt/mssql-tools/bin/sqlcmd 全路径更稳妥):#!/bin/bash;DB=“YourDatabaseName”;D=$(date +%F);/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q “BACKUP DATABASE [$DB] TO DISK = N’/var/opt/mssql/backups/${DB}${D}.bak’ WITH INIT, COMPRESSION, STATS = 10"。赋权 chmod +x 后用 crontab -e 添加,如每天 01:00 执行:0 1 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘YourPassword’ -Q "BACKUP DATABASE [$DB] TO DISK = N’/var/opt/mssql/backups/${DB}$(date +%F).bak’ WITH INIT, COMPRESSION, STATS = 10”。注意在 crontab 中对 % 进行转义。
  • 保留策略与清理:例如每天 02:00 删除 30 天前的备份:0 2 * * * find /var/opt/mssql/backups/ -name “*.bak” -mtime +30 -delete。
  • 异地/对象存储备份:安装 rclone 后将备份目录同步到远程(如 MinIO/S3):rclone sync /var/opt/mssql/backups minio:database-180。可结合加密与定期校验提升可靠性。

四 实用建议与常见问题

  • 备份策略:生产库建议采用 FULL(每日)+ DIFFERENTIAL(每小时)+ LOG(每15分钟) 的组合;日志备份要求数据库恢复模式为 FULLBULK_LOGGED
  • 恢复顺序要点:完整备份用 NORECOVERY,差异/日志依次 NORECOVERY,最后一步用 RECOVERY 上线;若仅需覆盖还原,可在恢复命令中加入 REPLACE
  • 权限与路径:备份目录必须对 mssql 用户可写;在 SQL 中使用 N’路径’ 避免编码问题;WITH INIT 会覆盖同名介质,WITH FORMAT 会重建介质集。
  • 远程恢复:从 Windows 拷贝的 .bak 可在 Ubuntu 上直接 RESTORE;若遇到设备/路径不兼容,优先在同版本实例上还原验证,再迁移。
  • 验证与演练:定期执行 DBCC CHECKDB 并做恢复演练,确保备份可用;在 低峰时段 执行大规模还原,减少对业务影响。

0