2013-01-12 33 views
0

我無法管理備份我的MySQL數據庫。我用下面的命令:mysqldump是不是傾銷任何表

mysqldump --user=user --password=password db > db.sql 

這是輸出文件的樣子:

-- MySQL dump 10.11 
-- 
-- Host: localhost Database: db 
-- ------------------------------------------------------ 
-- Server version 5.0.96-community 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

就是這樣。沒有任何CREATE TABLE,也沒有任何INSERT ...我也注意到在類似問題的帖子中,在輸出結束處總是有一個-- Dump completed on YYYY-MM-DD HH:MM:SS,這裏不是這種情況。我的用戶名和密碼是正確的,並且用戶擁有所有可能的權限。

我在做什麼錯?

+0

如果使用'root'用戶嘗試它,它會工作嗎? – tadman

+0

你可以在做一個mysql修復後嘗試'mysqldump'。例如:'mysqlcheck --auto-repair db_name' – Suku

+0

使用過的用戶有什麼特權? – Lars

回答

1

由於提出這個問題,我的虛擬主機停用了shell_exec()命令,所以現在我使用PHP腳本來備份我的數據庫。下面是我使用的功能:

function backup_tables($host, $user, $pass, $name, $tables='*', $backup_path) { 
    $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); 
    } 

    $droptables = 'DROP TABLE IF EXISTS '; 

    for ($i = sizeof($tables) - 1; $i >= 0; $i--) { 
     $droptables .= '`' . $tables[$i] . '`'; 
     if ($i > 0) { 
      $droptables .= ', '; 
     } else { 
      $droptables .= ';'; 
     } 
    } 

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

     // $droptables.= '`' . $table . '`, '; 
     $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
     $data .= "\n\n".$row2[1].";\n\n"; 

     for ($i = 0; $i < $num_fields; $i++) { 
      while($row = mysql_fetch_row($result)) { 
       $data .= 'INSERT INTO '.$table.' VALUES('; 

       for ($j = 0; $j < $num_fields; $j++) { 
        if (isset($row[$j])) { 
         $row[$j] = addslashes($row[$j]); 
         $row[$j] = ereg_replace("\n","\\n",$row[$j]); 
         $data .= '"'.$row[$j].'"' ; 
        } else { 
         $data .= 'NULL'; 
        } 

        if ($j < ($num_fields-1)) { 
         $data .= ','; 
        } 
       } 

       $data .= ");\n"; 
      } 
     } 

     $data .= "\n\n\n"; 
    } 

    $return = $droptables . $return; 

    //save file 
    $date = date('Ymd-His'); 
    $filename = 'db-backup-' . $date . '.sql'; 
    $handle = fopen($backup_path.$filename,'w+'); 
    fwrite($handle, utf8_encode($return)); 
    fclose($handle); 

    $gzfile = $filename . '.gz'; 
    $handle = gzopen($backup_path.$gzfile, 'w9'); 
    gzwrite($handle, file_get_contents($backup_path.$filename)); 
    gzclose($handle); 
} 

用法示例:backup_tables('localhost','user','pass','database', 'users, posts, comments, subscriptions', '/home/user/db_backups/');。你只需要記住把外鍵的表放在列表的最後。

1

嘗試相同,但與正常mysql命令,也就是說,如果你有

mysqldump --user=root --password=secret db 

然後嘗試

mysql --user=root --password=secret db 

你應該能夠看到所有的表格和數據的方式,如果你'不是這可能是用戶錯了。

+0

我嘗試了'mysql'命令,但我甚至不確定它的工作原理。只運行'mysql'而沒有任何參數不會給我任何輸出,這對我來說似乎很奇怪。另外,我必須通過PHP腳本運行所有這些命令,因爲我的主機拒絕了我的請求來啓用我的帳戶的shell訪問權限......任何想法? – PLPeeters

+0

如何在沒有shell訪問權限的情況下運行mysqldump? –

+0

通過帶'shell_exec()'的PHP腳本。我的意思是說我沒有遠程shell訪問。 – PLPeeters

2

試試這個:

mysqldump -u username -p DB_Name > dumpfile.sql 

它應該工作。

+0

我想它確實應該,但是自從問這個問題我的主機已經停用了'shell_exec()'命令,所以我現在使用PHP腳本來備份我的數據庫。我會在一分鐘後發佈腳本。 – PLPeeters

-1

試試這個MySQL的ü根 - P DB_NAME < mydb.sql

-1

這爲我工作。請嘗試一次

mysql -u <username> -p"<password>" database_name < sqlfile.sql 
+0

您提供的命令是用於導入的,所以它根本不回答問題。 – PLPeeters