2013-02-16 64 views
1

我使用我的虚拟主机提供商Cpanel2,并且它有完整的备份选项,但是这不是我所需要的。MySQL的每日备份与PHP

我正在想办法让我的应用程序对数据库进行日常备份并通过电子邮件发送给我文件。

我想我可以用一个PHP页面来做到这一点,用登录或运行它,但它不安全,它类似于Cpanel备份本身。

有什么办法让我的phpmyadmin或cPanel发送邮件备份数据库吗?

编辑:我试了system("mysqldump -h $dbhost -u $dbuser -p$dbpass $dbname > $backupfile");但我得到的是0KB空文件。

回答

1

根据数据库的大小,您的主机可能不支持发送这样一个大文件。你需要做的是建立一个cron作业(与PHP),或在phpMyAdmin调度工作,将创建数据库的转储。然后,您需要一个将备份发送给您的脚本。

+0

你好,这也是我的问题现在。关于CRON工作和phpMyAdmin,你能否告诉我如何开始这项工作?也许是一个教程的链接?非常感谢。 – xjshiya 2014-09-10 06:53:34

+0

@xjshiya你可以在这个网站上搜索条件'mysql cron' – Kermit 2014-09-10 12:24:02

2

两种方式:

1)

<?php 
$db_file_name = $_GET['file_name']; 
backup_tables($_GET['host'],$_GET['user'],$_GET['pass'],$_GET['database']); 

/* backup the db OR just a table */ 
function backup_tables($host,$user,$pass,$name,$tables = '*') 
{ 
    global $db_file_name; 
    $link = mysql_connect($host,$user,$pass); 
    mysql_select_db($name,$link); 

    //get all of the tables 
    if($tables == '*') 
    { 
    $tables = array(); 
    $result = mysql_query('SHOW TABLES'); 
    while($row = mysql_fetch_row($result)) 
    { 
     $tables[] = $row[0]; 
    } 
    } 
    else 
    { 
    $tables = is_array($tables) ? $tables : explode(',',$tables); 
    } 

    //cycle through 
    foreach($tables as $table) 
    { 
    $result = mysql_query('SELECT * FROM '.$table); 
    $num_fields = mysql_num_fields($result); 

    $return.= 'DROP TABLE IF EXISTS '.$table.';'; 
    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
    $return.= "\n\n".$row2[1].";\n\n"; 

    for ($i = 0; $i < $num_fields; $i++) 
    { 
     while($row = mysql_fetch_row($result)) 
     { 
     $return.= 'INSERT INTO '.$table.' VALUES('; 
     for($j=0; $j<$num_fields; $j++) 
     { 
      $row[$j] = addslashes($row[$j]); 
      $row[$j] = ereg_replace("\n","\\n",$row[$j]); 
      if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
      if ($j<($num_fields-1)) { $return.= ','; } 
     } 
     $return.= ");\n"; 
     } 
    } 
    $return.="\n\n\n"; 
    } 
    //save file 
    $handle = fopen($db_file_name.'.sql','w+'); 
    fwrite($handle,$return); 
    fclose($handle); 
} 

?> 

这将节省您从运行此文件夹中的任何一个.sql文件。然后,只需做一个简单的PHP邮件附件,然后离开你。

2)我一直在使用syncsage.com进行这个和网站备份。它仍处于测试阶段,但到目前为止它是惊人的。

+0

我更喜欢第一个,这是我的第一个想法,但在这种情况下,我必须每天/每天手动运行文件,而且我需要它会在午夜自动执行。这对我来说 – Nutic 2013-02-16 15:56:11

+0

易peasy困难的部分!要把你的服务器上的脚本,建立一个cron作业在午夜运行,它会运行和向您发送电子邮件。 – David 2013-02-16 15:58:07

+0

继承人一个伟大的职位关于PHP和电子邮件附件: http://stackoverflow.com/questions/9926808/regarding-email-with-attachment-in-php – David 2013-02-16 16:00:15