2013-12-22 225 views
0

我試圖使用下面的PHP腳本對我的MySQL數據庫「備份」進行備份,但由於某種原因,它不起作用。任何想法有什麼不對?我想在包含數據的同一文件夾中創建一個名爲test.sql的文件(因爲數據庫非常大,我只選擇Temp> 35的值,但以後可以更改)。現在,當我運行它時,我得到了回聲,但沒有創建文件。使用PHP備份MySQL數據庫

<?php 
$dbhost = '...'; 
$dbuser = '...'; 
$dbpass = '...'; 
$dbname = 'backup'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
mysql_select_db($dbname); 

$tableName = 'backup'; 
$backupFile = 'test.sql'; 
$query  = "SELECT * WHERE Temp>35 INTO OUTFILE '$backupFile' FROM $tableName"; 
$result = mysql_query($query); 
echo "Backed up"; 
?> 
+0

確保mysqld的是允許寫入到文件'$ backupFile' –

+0

我該如何檢查? – Jachym

+0

提供絕對路徑,確保文件/目錄對於運行mysqld的用戶是可寫的。此外,'echo mysql_error();'可能會給你一個線索。 –

回答

0

試試吧。

$query = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName WHERE Temp>35"; 
$result = mysql_query($query) or die(mysql_error()); 
+0

我得到: 訪問被拒絕用戶'...'@'%'(使用密碼:是) – Jachym

+0

所以我試圖添加: 將$ dbname。*的所有權限授予'...'@'%',由'...'標識; 現在我得到: 解析錯誤:語法錯誤,意外的T_STRING在... – Jachym

+0

@ user2370078你在你的機器或遠程服務器上運行這個嗎? –

0
Try this and let me know: 

    <?php 
    $dbhost = '...'; 
    $dbuser = '...'; 
    $dbpass = '...'; 
    $dbname = 'backup'; 
    $conn = mysql_connect($dbhost, $dbuser, $dbpass); 
    mysql_select_db($dbname); 

    $databasename = 'backup'; 
    $backupFile = 'test.sql'; 
    $query  = "SELECT * INTO OUTFILE '$backupFile' FROM $databasename WHERE Temp>35"; 
    $result = mysql_query($query); 
    echo "Backed up"; 
    ?> 
+0

訪問拒絕用戶'...'@'%'(使用密碼:是) – Jachym

+0

授予此特權:只需點擊Server:localhost(當您打開phpMyAdmin時應該是開始頁面),然後點擊權限,選擇你的用戶,並在數據部分添加勾號或FILE(所以,不要向下滾動並選擇一個特定的數據庫) –

0
<?php 
    $source_db='source_db'; 
    $target_db='target_db'; 

    $server='127.0.0.1'; 
    $user='root'; 
    $password=''; 

    mysql_connect($server,$user,$password); 
    mysql_select_db($source_db); 

    // Get names of all tables in source database 
    $result=mysql_query("show tables"); 
    while($row=mysql_fetch_array($result)){ 
     $name=$row[0]; 
     $this_result=mysql_query("show create table $name"); 
     $this_row=mysql_fetch_array($this_result); 
     $tables[]=array('name'=>$name,'query'=>$this_row[1]); 
    } 

    // Connect target database to create and populate tables 
    mysql_select_db($target_db); 

    $total=count($tables); 
    for($i=0;$i < $total;$i++){ 
     $name=$tables[$i]['name']; 
     $q=$tables[$i]['query']; 

     mysql_query($q); 
     mysql_query("insert into $name select * from $source_db.$name"); 
    } 

?>