SQL Server在Ubuntu上的备份与恢复流程
一、备份流程
1. 准备工作:安装SQL Server命令行工具
在Ubuntu上使用sqlcmd
工具需先安装对应客户端包,执行以下命令:
sudo apt-get update &
&
sudo apt-get install -y mssql-tools unixodbc-dev
安装完成后,将工具路径加入环境变量(便于全局调用):
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >
>
~/.bashrc &
&
source ~/.bashrc
2. 创建备份目录并设置权限
为避免权限问题,需将备份目录归属mssql
用户(SQL Server默认运行用户):
sudo mkdir -p /var/opt/mssql/backups # 创建备份目录
sudo chown mssql:mssql /var/opt/mssql/backups # 修改所有者
sudo chmod 700 /var/opt/mssql/backups # 限制仅mssql用户访问
3. 使用sqlcmd执行备份命令
(1)完整备份(Full Backup)
完整备份包含数据库所有数据,是恢复的基础。推荐开启压缩(减少存储空间)和初始化(覆盖旧备份文件):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_Full_$(date +%Y%m%d).bak' WITH INIT, COMPRESSION, STATS=10"
STATS=10
:每完成10%显示进度;$(date +%Y%m%d)
:自动添加日期后缀,便于区分备份版本。
(2)差异备份(Differential Backup,可选)
差异备份仅记录自上次完整备份后的数据变化,减少备份时间和存储占用。需在完整备份后执行:
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_Diff_$(date +%Y%m%d).bak' WITH DIFFERENTIAL, INIT, STATS=10"
(3)事务日志备份(Transaction Log Backup,可选)
事务日志备份记录所有事务操作,用于实现时间点恢复(Point-in-Time Recovery)。需在完整备份后定期执行(如每小时):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP LOG [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_Log_$(date +%Y%m%d_%H%M).bak' WITH INIT, STATS=10"
4. 自动化备份(Crontab定时任务)
通过crontab
设置定时任务,实现无人值守备份。编辑当前用户的crontab:
crontab -e
添加以下内容(示例:每天凌晨2点执行完整备份,每小时执行事务日志备份):
# 每天凌晨2点执行完整备份
0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_Full_$(date +\%Y\%m\%d).bak' WITH INIT, COMPRESSION, STATS=10"
# 每小时执行事务日志备份(需提前完成完整备份)
0 * * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP LOG [YourDatabaseName] TO DISK='/var/opt/mssql/backups/YourDatabaseName_Log_$(date +\%Y\%m\%d_\%H\%M).bak' WITH INIT, STATS=10"
保存后,cron会自动加载任务。可通过crontab -l
查看当前任务列表。
5. 备份文件维护(可选)
为避免备份文件占用过多磁盘空间,可设置定时任务删除超过30天的旧备份:
# 在crontab中添加以下内容(每天凌晨3点执行)
0 3 * * * find /var/opt/mssql/backups -name "*.bak" -mtime +30 -exec rm {
}
\;
二、恢复流程
1. 准备工作:确认备份文件位置
确保备份文件(.bak
)存储在SQL Server可访问的路径(如/var/opt/mssql/backups
)。可通过以下命令验证:
ls -lh /var/opt/mssql/backups/
2. 恢复完整备份(基础步骤)
恢复完整备份时,需指定WITH NORECOVERY
(表示未完成恢复,后续可能需要应用差异/日志备份):
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_Full_20250930.bak' WITH NORECOVERY, REPLACE, STATS=10"
REPLACE
:若数据库已存在,则替换(需谨慎使用,避免覆盖现有数据);NORECOVERY
:保留数据库在“恢复中”状态,允许后续应用差异/日志备份。
3. 恢复差异备份(若有)
若存在差异备份,需在完整备份后执行,仍使用WITH NORECOVERY
:
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_Diff_20250930_1800.bak' WITH NORECOVERY, STATS=10"
4. 恢复事务日志备份(若有)
事务日志备份需按顺序恢复(从最早到最新),最后一次恢复使用WITH RECOVERY
(使数据库可用):
# 恢复第一个日志备份
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_Log_20250930_1800.bak' WITH NORECOVERY, STATS=10"
# 恢复第二个日志备份(若有)
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_Log_20250930_1900.bak' WITH NORECOVERY, STATS=10"
# 最后一次恢复,使数据库可用
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK='/var/opt/mssql/backups/YourDatabaseName_Log_20250930_2000.bak' WITH RECOVERY, STATS=10"
5. 验证恢复结果
恢复完成后,可通过以下命令检查数据库完整性:
sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "DBCC CHECKDB([YourDatabaseName]) WITH NO_INFOMSGS"
若输出无错误,则表示数据库恢复成功。
注意事项
- 权限问题:确保备份/恢复目录的权限正确(
mssql:mssql
),避免因权限不足导致操作失败; - 备份策略:根据业务需求选择备份类型(完整+差异+日志可实现高可用恢复);
- 测试恢复:定期在测试环境中验证备份文件的可用性,避免正式环境恢复失败;
- 密码安全:避免在脚本中硬编码密码,可使用
sqlcmd
的-P
参数交互式输入,或通过配置文件(如~/.sqlcmd
)管理凭证; - 磁盘空间:监控备份目录的磁盘使用情况,避免因空间不足导致备份失败。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SQL Server在Ubuntu上的备份与恢复流程
本文地址: https://pptw.com/jishu/721968.html