2013-05-03 59 views
0

什么是备份的最佳方式利用MySQL的PHP​​和后台数据的数据库,我试图寻找在线教程,但我似乎不明白很好很好,我写这虽然它不是很好的工作,即时得到这些错误和警告如何在PHP中创建一个备份数据库脚本和zip它

Warning: gzopen(backups/adminpanel/adminpanel_aggrement_1367616442.sql.gz): failed to open stream: No such file or directory in C:\xampp\htdocs\how are things\admin panel\backup.php on line 17 

Notice: Undefined variable: time in C:\xampp\htdocs\how are things\admin panel\backup.php on line 30 
The file--backups/adminpanel/aggrement_.sql.gz--could not be opened for writing. 

上线17和30的代码是这样

if ($fp = gzopen ("$dir/{$db_name}_{$table}_{$bu_time}.sql.gz", 'w9')) { 



    echo "<p>The file--$dir/{$table}_{$time}.sql.gz--could not be opened for writing.</p>\n"; 

这是我的代码

<?php 
$db_name = 'adminpanel'; 
$dir = "backups/$db_name"; 
if (!file_exists('path/to/directory')) { 
    @mkdir('path/to/directory'); 
} 
$bu_time = time(); 
$dbc = @mysqli_connect (localhost, root, nokiae71, adminpanel); 
$q = 'SHOW TABLES'; 
$r = mysqli_query($dbc, $q); 
if (mysqli_num_rows($r) > 0) { 
    echo "<p>Backing up database '$db_name'.</p>\n"; 
    while (list($table) = mysqli_fetch_array($r, MYSQLI_NUM)) { 
     $q2 = "SELECT * FROM $table"; 
     $r2 = mysqli_query($dbc, $q2); 
     if (mysqli_num_rows($r2) > 0) { 
      if ($fp = gzopen ("$dir/{$db_name}_{$table}_{$bu_time}.sql.gz", 'w9')) { 
           while ($row = mysqli_fetch_array($r2, MYSQLI_NUM)) { 
        foreach ($row as $value) { 

         gzwrite ($fp, "'$value', "); 
        } 
        gzwrite ($fp, "\n"); 

       }    
       // Close the file: 
       gzclose ($fp); 

      } else { // Could not create the file! 
       echo "<p>The file--$dir/{$table}_{$time}.sql.gz--could not be opened for writing.</p>\n"; 
       break; 
      } 
     } 
    } 
} else { 
    echo "<p>The submitted database--$db_name--contains no tables.</p>\n"; 
} 

?> 

我怎样才能使这项工作或者有没有更好的剧本,我可以使用那里......

+1

尝试我如何把这个命令到一个PHP脚本,使其执行 – ROMMEL 2013-05-03 21:54:40

回答

2

现在,这个解决方案使用cron,但我觉得很容易,所以我认为这是值得一提。 Cron可能已经安装在您使用的服务器上。

这是我安排cron来一晚一次运行命令:

mysqldump -h URL_TO_YOUR_DATABASE.com -u YOUR_MYSQL_USERNAME -pYOUR_MYSQL_PASSWORD --single-transaction YOUR_DATABASE_NAME | gzip > ~/PATH_WHERE_YOU_WANT_TO_PLACE_BACKUPS/db_backup_$(date +%Y-%m-%d).sql.gz

就是这样。

这告诉mysqldump的转储你的整个数据库的SQL。然后gzip压缩它。然后将它存储在服务器上的一个位置,并将日期追加到文件名的末尾。

如果你真的想用php而不是cron触发它,你可以尝试调用mysqldump from php

+0

在我的答案结尾的链接,你会看到如何从PHP调用它。你可以使用'exec'命令。因此,这将是'EXEC('的mysqldump -h URL_TO_YOUR_DATABASE.com -u YOUR_MYSQL_USERNAME -pYOUR_MYSQL_PASSWORD --single事务YOUR_DATABASE_NAME | gzip的>〜/ PATH_WHERE_YOU_WANT_TO_PLACE_BACKUPS /在db_backup _ $(日期+%Y-%间%d).sql.gz ');'。请记住将实际的数据库信息放入ALL_CAPS中的文字中。这只会按需运行。要安排它,你需要使用cron。 – NaveenThally 2015-02-20 11:44:23

+0

@NaveenThally如果按照这个[一](http://www.dzone.com/snippets/back-mysql-database-php) – Andrew 2015-02-21 18:31:30