以下是在CentOS下备份SQL Server数据的实用技巧:
一、基础备份操作
-
安装工具
需先安装mssql-tools和unixODBC-devel:sudo yum install -y mssql-tools unixODBC-devel -
使用sqlcmd命令行备份
- 完整数据库备份:
sqlcmd -S localhost -U sa -P '密码' -Q "BACKUP DATABASE 数据库名 TO DISK='/var/opt/mssql/backup/备份名.bak' WITH FORMAT" - 差异备份:
sqlcmd -S localhost -U sa -P '密码' -Q "BACKUP DATABASE 数据库名 TO DISK='/var/opt/mssql/backup/备份名_diff.bak' WITH DIFFERENTIAL" - 事务日志备份(需启用完整恢复模式):
sqlcmd -S localhost -U sa -P '密码' -Q "BACKUP LOG 数据库名 TO DISK='/var/opt/mssql/backup/备份名_log.trn' WITH NORECOVERY"
- 完整数据库备份:
-
指定备份路径与压缩
- 路径需提前创建(如
/var/opt/mssql/backup),建议包含日期参数:BACKUP DATABASE 数据库名 TO DISK='/var/opt/mssql/backup/数据库名_$(date +%F).bak' WITH COMPRESSION
- 路径需提前创建(如
二、自动化备份策略
-
通过crontab定时任务
编辑定时任务脚本:sudo crontab -e添加如下内容(每日凌晨2点执行完整备份):
0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '密码' -Q "BACKUP DATABASE 数据库名 TO DISK='/var/opt/mssql/backup/数据库名_$(date +\%F).bak' WITH FORMAT" -
远程备份到其他服务器
通过SMB或NFS挂载远程目录,或使用scp传输备份文件:scp /var/opt/mssql/backup/备份名.bak user@远程服务器:/远程路径/
三、安全与优化建议
-
权限管理
- 确保备份目录权限仅允许SQL Server服务账户和备份脚本访问:
sudo chown -R mssql:mssql /var/opt/mssql/backup sudo chmod -R 700 /var/opt/mssql/backup
- 确保备份目录权限仅允许SQL Server服务账户和备份脚本访问:
-
备份验证
定期检查备份文件完整性,可通过RESTORE VERIFYONLY命令测试:sqlcmd -S localhost -U sa -P '密码' -Q "RESTORE VERIFYONLY FROM DISK='/var/opt/mssql/backup/备份名.bak'" -
保留策略
结合find命令清理过期备份(如保留7天):find /var/opt/mssql/backup -name "*.bak" -mtime +7 -exec rm -f {} \;
四、工具选择参考
- 图形化工具:通过SQL Server Management Studio(SSMS)连接后直接操作,适合新手。
- 命令行工具:
sqlcmd适合自动化场景,支持脚本批量执行。 - 高级需求:对于大规模数据库,可考虑使用第三方工具(如Vinchin Backup)实现多线程备份和压缩。
注意:备份前需确认SQL Server服务正常运行,且备份路径有足够磁盘空间。建议定期测试备份恢复流程,确保数据可正常还原。