SQL Server在Ubuntu上的备份恢复流程是什么
导读:一、准备工作 安装SQL Server及工具 在Ubuntu上安装SQL Server和sqlcmd命令行工具(参考Microsoft官方文档):sudo apt-get update sudo apt-get install -y ms...
一、准备工作
- 安装SQL Server及工具
在Ubuntu上安装SQL Server和sqlcmd命令行工具(参考Microsoft官方文档):sudo apt-get update sudo apt-get install -y mssql-server mssql-tools unixodbc-dev sudo ln -sfn /opt/mssql-tools/bin/sqlcmd /usr/bin/sqlcmd # 添加sqlcmd到系统路径 - 配置备份目录权限
创建专用备份目录并设置正确的属主和权限(避免权限问题导致备份失败):sudo mkdir -p /var/opt/mssql/backup sudo chown mssql:mssql /var/opt/mssql/backup sudo chmod 700 /var/opt/mssql/backup
二、备份流程
1. 使用sqlcmd命令行备份(手动/脚本)
- 完整备份(Full Backup)
完整备份是基础,包含数据库所有数据,建议每周执行1次(或根据业务需求调整):sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backup/YourDatabaseName_Full_$(date +%Y%m%d).bak' WITH FORMAT, COMPRESSION, STATS=10" # FORMAT覆盖旧备份,COMPRESSION节省空间,STATS显示进度 - 差异备份(Differential Backup)
仅备份自上次完整备份后修改的数据,建议每天执行1次(在完整备份基础上):sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backup/YourDatabaseName_Diff_$(date +%Y%m%d).bak' WITH DIFFERENTIAL, INIT, STATS=10" # DIFFERENTIAL仅增量,INIT覆盖上次差异备份 - 事务日志备份(Transaction Log Backup)
备份自上次日志备份后的事务日志,用于实现“时间点恢复”,建议每1-2小时执行1次(在完整/差异备份基础上):sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP LOG [YourDatabaseName] TO DISK='/var/opt/mssql/backup/YourDatabaseName_Log_$(date +%Y%m%d_%H%M).bak' WITH INIT, STATS=10" # INIT覆盖上次日志备份
2. 自动化备份(可选但推荐)
通过crontab定时执行备份脚本,减少人工干预:
- 创建备份脚本(如
/opt/mssql/scripts/backup.sh):#!/bin/bash BACKUP_DIR="/var/opt/mssql/backup" DB_NAME="YourDatabaseName" DATE=$(date +%Y%m%d) # 完整备份(每周日凌晨2点执行,可通过crontab判断星期几) if [ $(date +%u) -eq 1 ]; then sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [$DB_NAME] TO DISK='$BACKUP_DIR/${ DB_NAME} _Full_$DATE.bak' WITH FORMAT, COMPRESSION, STATS=10" else # 差异备份(其他时间) sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [$DB_NAME] TO DISK='$BACKUP_DIR/${ DB_NAME} _Diff_$DATE.bak' WITH DIFFERENTIAL, INIT, STATS=10" fi - 添加可执行权限:
chmod +x /opt/mssql/scripts/backup.sh - 配置crontab(每天凌晨2点执行):
crontab -e # 添加以下行(根据需求调整频率) 0 2 * * * /opt/mssql/scripts/backup.sh
三、恢复流程
1. 手动恢复(命令行)
恢复顺序:完整备份 → 差异备份(若有) → 事务日志备份(若有),最后用WITH RECOVERY使数据库可用。
- 恢复完整备份(NORECOVERY模式):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_Full_20251020.bak' WITH NORECOVERY, REPLACE, STATS=10" # REPLACE覆盖现有数据库,NORECOVERY保持数据库不可用 - 恢复差异备份(NORECOVERY模式):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_Diff_20251021.bak' WITH NORECOVERY, STATS=10" - 恢复事务日志备份(最后一次用RECOVERY):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backup/YourDatabaseName_Log_20251021_1200.bak' WITH RECOVERY, STATS=10" # 最后一步用RECOVERY使数据库可用
2. 验证恢复结果
恢复完成后,使用DBCC CHECKDB检查数据库完整性(避免数据损坏):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS"
若输出无错误,则恢复成功。
四、注意事项
- 备份策略:根据业务重要性选择备份类型(如关键业务用“完整+差异+日志”,非关键业务用“完整+差异”)。
- 备份存储:定期将备份文件复制到异地(如云存储),防止本地磁盘故障导致数据丢失。
- 权限管理:备份目录仅允许
mssql用户访问,避免未授权修改。 - 测试恢复:定期在测试环境验证备份文件的可用性(避免备份文件损坏无法恢复)。
- 监控备份:通过邮件或日志监控备份任务的执行状态(如crontab执行结果)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SQL Server在Ubuntu上的备份恢复流程是什么
本文地址: https://pptw.com/jishu/735122.html
