mysqldump 无法正确运行

发布于 2024-09-01 11:48:37 字数 288 浏览 4 评论 0原文

我用 PHP 编写了一些代码来备份数据库。

这是我的代码:

exec("mysqldump --opt -h localhost -u root test > mydb.sql");

但是我的文件 (mydb.sql) 中得到了 0 字节。我还使用 passthru()、system() 运行,但它仍然得到 0 字节。

我尝试使用命令。有用。

我为我的本地主机使用最新的 XAMPP。

那么,我该如何做才能使其正常工作呢?

I write some code with PHP to backup database.

Here my code:

exec("mysqldump --opt -h localhost -u root test > mydb.sql");

But I get 0-byte in my file (mydb.sql). I also run with passthru(), system(), but it still gets 0-byte.

I try to use command. It works.

I use the lastest XAMPP for my localhost.

So, how can I do to make it works correctly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

空气里的味道 2024-09-08 11:48:37

这可能是权限问题,或者您没有传递密码。要查看错误,请使用 2>&1 将 STDERR 路由到 STDOUT

exec("mysqldump --opt -h localhost -u root test > mydb.sql 2>&1", $output);
print_r($output);

这将显示您通常在命令行上看到的错误。

It's likely a permissions issue, or the fact you're not passing a password. To see errors, route STDERR to STDOUT using 2>&1

exec("mysqldump --opt -h localhost -u root test > mydb.sql 2>&1", $output);
print_r($output);

This will show you the errors you'd normally see on the command line.

哆兒滾 2024-09-08 11:48:37

mysqldump 很可能不在 PHP/Apache 的路径中。这将导致 shell 在 STDERR 上吐出“命令未找到”错误,并且在 STDOUT 上没有输出(您将其重定向到文件并以 0 长度结束)。

尝试添加 mysqldump 的完整路径(c:\mysql\bin\mysqldump 或其他),然后重试。

Most likely mysqldump is not in PHP/Apache's path. That will cause the shell to spit out a "command not found" error on STDERR, and no output on STDOUT (which you redirect to a file and ends up with 0 length).

Try adding the full path to mysqldump (c:\mysql\bin\mysqldump or whatever) and try again.

守护在此方 2024-09-08 11:48:37

之后直接传递用户名相同的密码

您必须在 -p 选项后传递没有空格的密码,并且在 -u exec("mysqldump --opt -h localhost -uUSER -pPASSWORD DBNAME > mydb.sql");

我在共享主机上遇到另一个问题,结果我必须使用主机用户名和密码而不是数据库用户名和密码

you have to pass the password with no space after the -p option and the same for the username goes directly after -u

exec("mysqldump --opt -h localhost -uUSER -pPASSWORD DBNAME > mydb.sql");

i anther problem on a shared host it turned out i have to use the host username and password not the database username and password

落在眉间の轻吻 2024-09-08 11:48:37

试试这个!

$username = "root";
$password = "";
$hostname = "localhost";
$dbname   = "test";

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .date("Y-m-d_H-i-s").".sql"));

$command = "C:\AppServ\MySQL\bin\mysqldump --add-drop-table --host=$hostname --   user=$username --password=$password ".$dbname;

system($command);

try this!

$username = "root";
$password = "";
$hostname = "localhost";
$dbname   = "test";

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .date("Y-m-d_H-i-s").".sql"));

$command = "C:\AppServ\MySQL\bin\mysqldump --add-drop-table --host=$hostname --   user=$username --password=$password ".$dbname;

system($command);
怀里藏娇 2024-09-08 11:48:37

exec() 和 system() 等命令并不在所有服务器上工作,仅适用于本地服务器和专用服务器,如果您托管服务器则必须查看您的托管计划是否允许访问 exec(命令) 和 system() 如果您不允许雇用其他计划。

commands such as exec () and system () do not work on all servers, only local servers and dedicated servers, if you host a server will have to see whether your hosting plan allows access to exec (command) and system () if you will not allow to hire another plan.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文