Ubuntu上SQL Server备份与恢复方法
导读: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分钟) 的组合;日志备份要求数据库恢复模式为 FULL 或 BULK_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
