温馨提示×

Debian如何备份SQLServer

小樊
35
2026-08-13 23:21:16
栏目: 云计算

在 Debian 上备份 Microsoft SQL Server,常见做法取决于你是 备份数据库数据(推荐),还是 备份整个 SQL Server 环境。下面按常见场景给你说明。


一、使用 sqlcmd 备份 SQL Server 数据库(推荐)

这是 最标准、最安全 的方式。

1. 安装 SQL Server 工具(如果还没装)

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/debian/11/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list

sudo apt update
sudo apt install -y mssql-tools unixodbc-dev

加入环境变量(可选):

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

2. 连接 SQL Server

sqlcmd -S localhost -U sa -P 'YourPassword'

3. 执行数据库备份(T-SQL)

备份单个数据库

BACKUP DATABASE YourDB
TO DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH COMPRESSION, INIT, STATS = 10;
GO

⚠️ 注意:

  • /var/opt/mssql/backup/ 目录必须存在
  • mssql 用户要有写权限

创建目录示例:

sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup

4. 备份所有数据库(脚本方式)

sqlcmd -S localhost -U sa -P 'YourPassword' -Q "
SELECT name FROM sys.databases WHERE name NOT IN ('master','model','msdb','tempdb')
" -h -1 | while read db
do
  sqlcmd -S localhost -U sa -P 'YourPassword' -Q "
  BACKUP DATABASE [$db]
  TO DISK = '/var/opt/mssql/backup/${db}.bak'
  WITH COMPRESSION, INIT"
done

二、在 Debian 上备份 SQL Server 相关文件(不推荐单独使用)

1. 停止 SQL Server

sudo systemctl stop mssql-server

2. 备份数据目录

sudo tar -czvf mssql-data-$(date +%F).tar.gz /var/opt/mssql

3. 启动 SQL Server

sudo systemctl start mssql-server

⚠️ 风险说明

  • 文件级备份 不能保证一致性
  • 仅适合 灾难恢复 / 迁移
  • 不建议作为日常备份方式

三、使用 cron 定时自动备份(生产推荐)

示例 cron 脚本

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/var/opt/mssql/backup

sqlcmd -S localhost -U sa -P 'YourPassword' -Q "
BACKUP DATABASE YourDB
TO DISK = '${BACKUP_DIR}/YourDB_${DATE}.bak'
WITH COMPRESSION"

加入 cron:

crontab -e

每天凌晨 2 点:

0 2 * * * /path/to/backup.sh

四、备份策略建议

生产环境推荐

  • T-SQL BACKUP DATABASE
  • 开启压缩(WITH COMPRESSION
  • 定期清理旧 .bak 文件
  • 备份文件同步到远程存储(rsync / 对象存储)

不推荐

  • 只复制 /var/opt/mssql
  • 不测试还原流程

五、还原数据库示例

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH REPLACE;
GO

如果你愿意,可以告诉我:

  • SQL Server 版本
  • 是否 Docker 部署
  • 是否需要远程备份 / 加密 / 增量备份

我可以给你一套 完整可落地的备份方案

0