我在 Ubuntu Server 22.04 和 PHP 8.3 上使用 SQL Server 2022 Express。 我正在尝试备份数据库,指令是:
BACKUP DATABASE WEBDEV TO DISK = '/temp/WEBDEV.bak'
,当我从 Management Studio 执行它时,它会正确创建文件,但是当我从 PHP 执行它时,它不会显示任何错误,但文件不是创建的。我已经将 /temp/
目录设置为 777 权限,结果是一样的,它不会创建备份文件,也不会显示任何错误。
我的代码是这样的:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$conn = new PDO("sqlsrv:server=localhost;database=WEBDEV;TrustServerCertificate=true", "bkuser", "thepassword");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "BACKUP DATABASE WEBDEV TO DISK = '/temp/WEBDEV.bak'";
try {
$conn->exec($sql);
echo "Backup completed successfully";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
它不显示任何错误消息,它显示“备份成功完成”消息。 SQL Server 错误日志显示如下:
BACKUP 无法完成命令 BACKUP DATABASE WEBDEV。检查备份应用程序日志以获取详细消息。
但是到处都没有备份日志。
我检查了 SQL Server 用户对该目录的访问权限,正如我所说,它从 Management Studio 正确创建。这就是为什么我尝试使用 777 权限来确定对该目录的访问权限。
有什么想法吗?
您可能会遇到此问题,因为 SQL Server 的服务帐户 (mssql) 缺乏必要的权限。请按照以下步骤操作:
sudo chown mssql:mssql /temp/ 须藤 chmod 777 /临时/
检查 SELinux/AppArmor:确保它们没有阻止 SQL Server 访问 /temp/。暂时禁用以进行测试。
验证错误日志:检查 /var/opt/mssql/log/errorlog 以获取其他线索。
替代解决方案:在 shell 脚本中使用 sqlcmd 进行备份并通过 PHP 调用:
sqlcmd -S localhost -U bkuser -P thepassword -Q“将数据库 WEBDEV 备份到磁盘='/temp/WEBDEV.bak'”
让我知道这是否有效!