mysqldump 无法正确运行
我用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这可能是权限问题,或者您没有传递密码。要查看错误,请使用
2>&1
将 STDERR 路由到 STDOUT这将显示您通常在命令行上看到的错误。
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
This will show you the errors you'd normally see on the command line.
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.之后直接传递用户名相同的密码
您必须在 -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
试试这个!
try this!
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.