用于备份MySQL数据库的PHP脚本

时间:2009-12-08 15:44:19

标签: php mysql database-backups mysql-error-1044

我正在尝试编写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终端运行它时,我明白了:

  

[stingray] $ php / [ ABSOLUTE   PATH ] / db_backup.php

     

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

     

mysqldump:收到错误:1044:访问   拒绝用户   '[ USERNAME ]' @ '208.113.128.0/255.255.128.0'   数据库'[ PASSWORD ]'时   选择数据库

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

感谢。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

/usr/bin/mysqldump \
--user=username \
--password=password \
dbname > mysqldump.sql

答案 2 :(得分:1)

1: -p和PASSWORD之间没有空格 例如:-p“。$ db_password。”

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

3:为文件提供执行命令的正确权限。

答案 3 :(得分:0)

如果您只是支持我,我强烈建议您使用this very easy, very configurable, open source cron backup script。它是一流的,我想你会喜欢它,如果这就是你所追求的。

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

答案 4 :(得分:0)

我建议您使用SqlBuddy,它解决了我的问题。

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