从 PHP 备份 Linux 上的 SQL Server 数据库

问题描述 投票:0回答:1

我在 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 权限来确定对该目录的访问权限。

有什么想法吗?

php sql sql-server ubuntu backup
1个回答
0
投票

您可能会遇到此问题,因为 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'”

让我知道这是否有效!

© www.soinside.com 2019 - 2024. All rights reserved.