mssql-tools(包含sqlcmd命令行工具),用于执行T-SQL命令。sudo yum install -y mssql-tools unixODBC-devel
/var/opt/mssql/backups)并设置权限,仅允许mssql用户访问。sudo mkdir -p /var/opt/mssql/backups
sudo chown mssql:mssql /var/opt/mssql/backups
sudo chmod 700 /var/opt/mssql/backups
通过sqlcmd连接SQL Server,执行BACKUP DATABASE命令。以下脚本实现完整备份(可扩展为差异/日志备份):
#!/bin/bash
BACKUP_DIR="/var/opt/mssql/backups"
DB_NAME="your_database_name"
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.bak"
# 执行备份(覆盖已有备份文件)
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "your_sa_password" -Q \
"BACKUP DATABASE [$DB_NAME] TO DISK = N'$BACKUP_FILE' WITH FORMAT, INIT, STATS = 10;"
FORMAT, INIT:覆盖现有备份文件;STATS = 10:每完成10%显示进度;your_database_name和your_sa_password为实际值。1433);/var/opt/mssql/backups/your_db.bak);通过crontab设置定时任务,例如每天凌晨2点执行备份脚本:
sudo crontab -e
添加以下内容(替换脚本路径):
0 2 * * * /path/to/backup_script.sh >> /var/opt/mssql/backups/backup.log 2>&1
保存后,cron会自动执行备份任务。
sudo systemctl stop mssql-server
.bak)复制到SQL Server备份目录(/var/opt/mssql/backups)。通过sqlcmd连接SQL Server,执行RESTORE DATABASE命令。以下为完整恢复流程:
# 以单用户模式启动SQL Server(确保无其他连接干扰)
sudo /opt/mssql/bin/sqlservr -m &
# 连接到SQL Server
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "your_sa_password" <<EOF
RESTORE DATABASE [your_database_name]
FROM DISK = N'/var/opt/mssql/backups/your_db.bak'
WITH REPLACE, RECOVERY; -- REPLACE覆盖现有数据库,RECOVERY恢复正常模式
GO
EOF
# 停止单用户模式,重启SQL Server服务
sudo systemctl stop mssql-server
sudo systemctl start mssql-server
REPLACE:若数据库已存在,强制覆盖;RECOVERY:恢复完成后将数据库设为可用状态(若需恢复后续日志,用NORECOVERY)。/var/opt/mssql/backups/your_db.bak);SELECT name, state_desc FROM sys.databases WHERE name = 'your_database_name';
USE your_database_name;
SELECT TOP 10 * FROM your_table_name;
mssql用户访问,避免未授权修改;RESTORE VERIFYONLY命令检查备份文件完整性:/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "your_sa_password" -Q \
"RESTORE VERIFYONLY FROM DISK = N'/var/opt/mssql/backups/your_db.bak';"
cron输出),便于排查恢复失败问题;gpg),并将备份存储至远程存储(如S3兼容对象存储),防止数据丢失。