在 Ubuntu(Linux)下备份 Microsoft SQL Server(SQL Server on Linux),常用方法有三种:sqlcmd / T-SQL 备份、mssql-tools 脚本备份、以及通过 SQL Agent 定时备份。下面按最常见、最实用的方式说明。
如果还没安装 sqlcmd:
sudo apt update
sudo apt install mssql-tools unixodbc-dev
加入环境变量(可选):
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
sqlcmd -S localhost -U SA -P '你的密码' \
-Q "BACKUP DATABASE [数据库名] TO DISK = '/var/opt/mssql/backup/数据库名.bak'"
示例:
sqlcmd -S localhost -U SA -P 'P@ssw0rd' \
-Q "BACKUP DATABASE [TestDB] TO DISK = '/var/opt/mssql/backup/TestDB.bak'"
⚠ 注意:
- 目录必须存在
- SQL Server 运行用户(
mssql)必须有写权限
创建备份目录:
sudo mkdir -p /var/opt/mssql/backup
sudo chown mssql:mssql /var/opt/mssql/backup
sqlcmd -S localhost -U SA -P '密码' \
-Q "SELECT name FROM sys.databases WHERE database_id > 4" \
-h -1 | while read db
do
sqlcmd -S localhost -U SA -P '密码' \
-Q "BACKUP DATABASE [$db] TO DISK = '/var/opt/mssql/backup/$db.bak'"
done
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server
USE msdb;
GO
EXEC dbo.sp_add_job
@job_name = N'DailyBackup';
EXEC sp_add_jobstep
@job_name = N'DailyBackup',
@step_name = N'BackupDB',
@subsystem = N'TSQL',
@command = N'BACKUP DATABASE [TestDB] TO DISK = ''/var/opt/mssql/backup/TestDB.bak''';
EXEC sp_add_schedule
@schedule_name = N'Daily',
@freq_type = 4,
@freq_interval = 1,
@active_start_time = 020000;
EXEC sp_attach_schedule
@job_name = N'DailyBackup',
@schedule_name = N'Daily';
EXEC sp_add_jobserver
@job_name = N'DailyBackup';
/opt/backup_sql.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
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
crontab -e
添加:
0 2 * * * /opt/backup_sql.sh
.bak 文件是 SQL Server 原生备份RESTORE DATABASEgzip 压缩备份文件1. 权限错误
sudo chown mssql:mssql /var/opt/mssql/backup
2. 无法连接
sqlcmd -S 127.0.0.1,1433 -U SA
如果你需要:
可以继续告诉我你的使用场景。