温馨提示×

ubuntu sqlserver怎样备份

小樊
50
2026-08-31 21:56:01
栏目: 云计算

Ubuntu 上备份 SQL Server(Microsoft 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. 完整备份数据库

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

示例:

sqlcmd -S localhost -U sa -P 'Pass@123' \
-Q "BACKUP DATABASE [TestDB] TO DISK = '/var/opt/mssql/backup/TestDB.bak'"

⚠️ 目录需存在且 SQL Server 有写权限

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

3. 差异备份 / 事务日志备份

-- 差异备份
BACKUP DATABASE [TestDB]
TO DISK = '/var/opt/mssql/backup/TestDB_diff.bak'
WITH DIFFERENTIAL;

-- 日志备份
BACKUP LOG [TestDB]
TO DISK = '/var/opt/mssql/backup/TestDB_log.trn';

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

适合跨版本迁移:

pip install mssql-scripter
mssql-scripter -S localhost -U sa -P '密码' -d TestDB > testdb.sql

三、自动定时备份(crontab)

1. 编写备份脚本

sudo nano /opt/backup_sql.sh

内容:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [TestDB] TO DISK = '/var/opt/mssql/backup/TestDB_$DATE.bak'"

赋权:

chmod +x /opt/backup_sql.sh

2. 添加定时任务

crontab -e

每天凌晨 2 点备份:

0 2 * * * /opt/backup_sql.sh

四、使用 Docker 中的 SQL Server(常见)

如果 SQL Server 是 Docker 容器:

docker exec -u mssql sqlserver \
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '密码' \
-Q "BACKUP DATABASE [TestDB] TO DISK = '/var/opt/mssql/backup/test.bak'"

并挂载备份目录:

-v /host/backup:/var/opt/mssql/backup

五、恢复数据库(补充)

sqlcmd -S localhost -U sa -P '密码' \
-Q "RESTORE DATABASE [TestDB] FROM DISK = '/var/opt/mssql/backup/TestDB.bak'"

总结推荐

场景 推荐方式
日常备份 T-SQL BACKUP
定时任务 crontab + sqlcmd
跨平台迁移 mssql-scripter
Docker docker exec

如果你能说明:

  • SQL Server 版本(2017 / 2019 / 2022)
  • 是否 Docker
  • 单库还是整实例

我可以给你更精确的备份方案。

0