2

我正在尝试编写一个 PHP 脚本来备份 MySQL 数据库:

   if ( $db_resource = mysql_connect($db_server, $db_username, $db_password, $db_newlink) )
   {
      if ( mysql_select_db( $db_name, $db_resource ) )
      {
         $backupFile = $db_name."_".date( "Y-m-d-H-i-s" ).".gz";
         $command = "mysqldump --opt -h ".$db_server." -u ".$db_username." -p ".$db_password." ".$db_name." | gzip > ".$db_save_dir."/".$backupFile;
         system( $command );
      }
   }

   mysql_close( $db_resource );

当我从 shell 终端运行它时,我得到了这个:

[黄貂鱼]$ php /[绝对路径]/db_backup.php

输入密码:[我输入密码]

mysqldump:出现错误:1044:选择数据库时,用户 '[ USERNAME ]'@'208.113.128.0/255.255.128.0' 对数据库 '[ PASSWORD ]' 的访问被拒绝

好的,现在我真的不明白为什么它将数据库称为我的密码。如果我将网络浏览器指向该文件,它运行得很好。有谁知道我应该做什么?就个人而言,我真的不在乎它是 PHP、Python、CGI 等,只要它可以在 Apache 服务器上运行即可。

谢谢。

4

5 回答 5

3

密码标志的语法不同。删除 -p 标志后的空格并再试一次。

于 2009-12-08T15:47:07.410 回答
1

尝试使用完整的选项名称;我有类似的问题,但没有时间解决失败的真正根源;但是,这对我有用并且对我有用:

/usr/bin/mysqldump \
--user=username \
--password=password \
dbname > mysqldump.sql
于 2009-12-08T15:50:58.087 回答
1

1:-p 和 PASSWORD 之间没有空格 例如:-p".$db_password."

2:为该数据库的特定用户授予所有(如果需要)权限。

3:赋予文件正确的执行命令的权限。

于 2013-01-24T21:23:13.603 回答
0

如果您只是备份内容,我强烈建议您使用这个非常简单、可配置的开源 cron 备份脚本。这太棒了,我想你会喜欢的,如果这就是你所追求的。

如果确实需要通过 apache 运行,您可以使用反引号远程触发脚本,然后您可以免费获得备份轮换和每周/每月备份、压缩和日志记录。

于 2009-12-08T16:33:35.287 回答
0

我建议你使用SqlBuddy,它像你一样解决了我的问题。

仅当您想使用 cron 或自动脚本时才继续使用自定义脚本。

于 2010-08-25T14:10:12.310 回答