一 环境准备与权限
- 安装客户端工具:执行 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分钟) 的组合;日志备份要求数据库恢复模式为 FULL 或 BULK_LOGGED。
- 恢复顺序要点:完整备份用 NORECOVERY,差异/日志依次 NORECOVERY,最后一步用 RECOVERY 上线;若仅需覆盖还原,可在恢复命令中加入 REPLACE。
- 权限与路径:备份目录必须对 mssql 用户可写;在 SQL 中使用 N’路径’ 避免编码问题;WITH INIT 会覆盖同名介质,WITH FORMAT 会重建介质集。
- 远程恢复:从 Windows 拷贝的 .bak 可在 Ubuntu 上直接 RESTORE;若遇到设备/路径不兼容,优先在同版本实例上还原验证,再迁移。
- 验证与演练:定期执行 DBCC CHECKDB 并做恢复演练,确保备份可用;在 低峰时段 执行大规模还原,减少对业务影响。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1451225.html