Debian下SQL Server的备份与恢复流程是怎样的
导读:Debian下SQL Server备份与恢复流程 一、备份流程 备份是保护数据的核心环节,Debian下主要通过命令行工具(sqlcmd)或自动化脚本实现,支持完整备份(Full Backup)、差异备份(Differential Back...
Debian下SQL Server备份与恢复流程
一、备份流程
备份是保护数据的核心环节,Debian下主要通过命令行工具(sqlcmd
)或自动化脚本实现,支持完整备份(Full Backup)、差异备份(Differential Backup)、事务日志备份(Transaction Log Backup)三种类型。
1. 前提准备
- 确保已安装SQL Server及
mssql-tools
(包含sqlcmd
):sudo apt update & & sudo apt install -y mssql-tools unixodbc-dev
- 授权备份目录:默认备份路径为
/var/opt/mssql/backup
,需确保SQL Server服务对该目录有写入权限(通常默认可写)。
2. 使用sqlcmd
执行备份
通过命令行工具sqlcmd
连接SQL Server实例,执行BACKUP DATABASE
命令:
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, INIT, STATS = 10"
- 参数说明:
-S
:SQL Server实例地址(本地为localhost
);-U
/-P
:登录凭据(sa
为用户,YourStrongPassword
为密码);FORMAT
:覆盖现有备份文件;INIT
:初始化备份设备;STATS = 10
:每完成10%显示进度。
3. 自动化备份(可选)
通过cron
定时任务实现定期备份,避免手动操作:
- 编辑备份脚本
/usr/local/bin/backup_sql.sh
:#!/bin/bash BACKUP_DIR="/var/opt/mssql/backup" DB_NAME="YourDatabaseName" DATE=$(date +%Y%m%d) BACKUP_FILE="$BACKUP_DIR/${ DB_NAME} _Full_$DATE.bak" sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "BACKUP DATABASE [$DB_NAME] TO DISK = '$BACKUP_FILE' WITH FORMAT, INIT, STATS = 10" # 检查备份是否成功 if [ $? -eq 0 ]; then echo "$(date): Backup of $DB_NAME succeeded." > > /var/log/sql_backup.log else echo "$(date): Backup of $DB_NAME failed!" > > /var/log/sql_backup.log fi
- 赋予执行权限并添加
cron
任务:
上述配置表示每天凌晨2点执行备份。chmod +x /usr/local/bin/backup_sql.sh echo "0 2 * * * /usr/local/bin/backup_sql.sh" | sudo tee -a /etc/crontab
4. 验证备份
备份完成后,检查备份文件是否存在及大小是否符合预期:
ls -lh /var/opt/mssql/backup/
二、恢复流程
恢复是将备份文件还原到SQL Server实例的过程,需根据备份类型(完整/差异/日志)选择对应命令。
1. 准备工作
- 确保备份文件路径正确且未被损坏;
- 若恢复到现有数据库,需先删除原数据库(或使用
WITH REPLACE
覆盖)。
2. 使用sqlcmd
执行恢复
-
恢复完整备份(首次恢复需使用完整备份):
sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_Full_20250929.bak' WITH REPLACE, RECOVERY, STATS = 10"
REPLACE
:覆盖现有数据库;RECOVERY
:将数据库恢复至可用状态(若需应用事务日志,改为NORECOVERY
)。
-
恢复差异备份(需在完整备份后执行):
sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_Diff_20250929.bak' WITH RECOVERY, STATS = 10"
-
恢复事务日志备份(需在完整备份+差异备份后执行):
# 先恢复完整备份(NORECOVERY) sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "RESTORE DATABASE [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_Full_20250929.bak' WITH NORECOVERY, STATS = 10" # 再恢复事务日志(NORECOVERY) sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_Log_20250929.trn' WITH NORECOVERY, STATS = 10" # 最后恢复最新事务日志(RECOVERY) sqlcmd -S localhost -U sa -P 'YourStrongPassword' -Q "RESTORE LOG [YourDatabaseName] FROM DISK = '/var/opt/mssql/backup/YourDatabaseName_Log_20250930.trn' WITH RECOVERY, STATS = 10"
3. 使用SSMS恢复(图形界面)
若习惯图形操作,可通过SQL Server Management Studio(SSMS)恢复:
- 打开SSMS,连接至Debian上的SQL Server实例;
- 右键点击“数据库”→“还原数据库”;
- 在“常规”页签中,选择“设备”→“浏览”→添加备份文件(.bak);
- 在“选项”页签中,勾选“覆盖现有数据库”,点击“确定”即可。
4. 处理恢复挂起状态
若数据库处于“恢复挂起”状态(如恢复失败),可通过以下命令修复:
-- 设置为紧急模式(允许访问)
ALTER DATABASE [YourDatabaseName] SET EMERGENCY;
-- 检查数据库一致性(修复错误)
DBCC CHECKDB([YourDatabaseName], REPAIR_ALLOW_DATA_LOSS);
-- 设置为多用户模式(恢复正常)
ALTER DATABASE [YourDatabaseName] SET MULTI_USER;
三、注意事项
- 备份路径权限:确保
/var/opt/mssql/backup
目录对mssql
用户可写; - 备份验证:定期测试备份文件的可用性(如尝试恢复到测试数据库);
- 安全存储:敏感备份文件建议加密或存储至异地;
- 恢复测试:生产环境恢复前,务必在测试环境验证流程;
- 日志模式:若需事务日志恢复,需将数据库设置为“完整恢复模式”(Full Recovery Mode)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian下SQL Server的备份与恢复流程是怎样的
本文地址: https://pptw.com/jishu/720035.html