温馨提示×

ubuntu下sqlserver如何备份

小樊
38
2026-09-28 00:52:37
栏目: 云计算

在 Ubuntu(Linux)下备份 Microsoft SQL Server(SQL Server on Linux),常见做法有以下几种,按使用频率从高到低说明。


一、使用 sqlcmd + T-SQL 备份(最常用)

1. 安装 sqlcmd(如未安装)

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list | sudo tee /etc/apt/sources.list.d/mssql-server.list
sudo apt update
sudo apt install mssql-tools unixodbc-dev

加入环境变量(可选):

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

2. 使用 T-SQL 备份数据库

全量备份

sqlcmd -S localhost -U sa -P '你的密码' \
-Q "BACKUP DATABASE [数据库名] TO DISK = '/var/opt/mssql/backup/数据库名.bak' WITH COMPRESSION"

⚠ 注意:

  • 备份路径必须 SQL Server 有权限写入
  • 推荐放 /var/opt/mssql/backup/

创建目录:

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

3. 差异备份

sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [数据库名] TO DISK = '/var/opt/mssql/backup/数据库名_diff.bak' WITH DIFFERENTIAL"

4. 事务日志备份

sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP LOG [数据库名] TO DISK = '/var/opt/mssql/backup/数据库名_log.trn'"

(数据库必须是 FULL 恢复模式)


二、使用 mssql-scripter(逻辑备份,生成 SQL 脚本)

适合小数据库或迁移:

pip install mssql-scripter
mssql-scripter -S localhost -U sa -P '密码' -d 数据库名 > backup.sql

三、使用 SQL Server Agent(自动备份)

  1. 启用 SQL Server Agent
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
  1. 用 sqlcmd 创建作业(Job) 适合定期备份,但配置稍复杂。

四、定时自动备份(cron)

示例:每天凌晨 2 点备份

crontab -e

添加:

0 2 * * * sqlcmd -S localhost -U sa -P '密码' -Q "BACKUP DATABASE [DB] TO DISK='/var/opt/mssql/backup/DB_$(date +\%F).bak' WITH COMPRESSION"

五、备份文件管理建议

  • 定期清理旧备份
  • 备份到远程(NFS / 对象存储)
  • 测试恢复(非常重要)

六、恢复示例(补充)

sqlcmd -S localhost -U sa -P '密码' \
-Q "RESTORE DATABASE [DB] FROM DISK='/var/opt/mssql/backup/DB.bak' WITH MOVE 'DB' TO '/var/opt/mssql/data/DB.mdf', MOVE 'DB_log' TO '/var/opt/mssql/data/DB_log.ldf'"

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

  • SQL Server 版本(2017 / 2019 / 2022)
  • 是否要 自动备份
  • 是否要 跨服务器备份

我可以帮你写完整脚本。

0 踩