首页主机资讯Ubuntu上SQL Server备份与恢复方法

Ubuntu上SQL Server备份与恢复方法

时间2025-11-14 19:25:03发布访客分类主机资讯浏览1331
导读:Ubuntu上SQL Server备份与恢复方法 一 环境准备与权限 安装客户端工具:执行 sudo apt-get update && sudo apt-get install -y mssql-tools unixod...

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 并做恢复演练,确保备份可用;在 低峰时段 执行大规模还原,减少对业务影响。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu上SQL Server备份与恢复方法
本文地址: https://pptw.com/jishu/748326.html
如何在Ubuntu上配置SQL Server的高可用性 Linux vsftp如何优化连接数

游客 回复需填写必要信息