首页主机资讯SQL Server在Ubuntu上的备份与恢复流程

SQL Server在Ubuntu上的备份与恢复流程

时间2025-10-10 00:23:03发布访客分类主机资讯浏览869
导读:一、备份流程 1. 准备工作:安装SQL Server命令行工具 在Ubuntu上使用sqlcmd工具需先安装对应客户端包,执行以下命令: sudo apt-get update && sudo apt-get instal...

一、备份流程

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
GCC在Linux中的版本如何选择 Ubuntu上如何实现SQL Server的高可用性

游客 回复需填写必要信息