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兼容对象存储),防止数据丢失。