2009-09-17 67 views
0

我試圖寫一個PHP程序自動創建MySQL表作爲服務器上的SQL文件的備份:mysqldump的結果,沒有實質內容

 

$backup = "$path/$tablename.sql"; 
$table = "mydbname.mytablename"; 

exec(
    sprintf(
    '/usr/bin/mysqldump --host=%s --user=%s --password=%s %s --quick --lock-tables --add-drop-table > %s', 
    $host, 
    $user, 
    $password, 
    $table, 
    $backup 
) 
); 

所有我在結果得到.sql文件是這樣的:

 
-- MySQL dump 10.10 
-- 
-- Host: localhost Database: mydbname.mytablename 
-- ------------------------------------------------------ 
-- Server version 5.0.27 

/*!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 */; 

看起來魚虎得意的結果列表Database:mydbname.mytablename。

我不知道從哪裏開始尋找。我的主機在幫助我最初設置程序時說,我需要關閉safe_mode(已經完成)並且允許訪問二進制文件(我不知道這意味着什麼)。

由於主持人每次回答問題需要兩天的時間回覆,如果可能,我想自己解決。

回答

5

你mysqldump的命令是這樣的:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD TABLE --quick --lock-tables --add-drop-table 

看着the manual of mysqldump,我要說的是,它會認爲表實際上是數據庫(引用)的名稱

有三種通用方式可以調用 mysqldump:

shell> mysqldump [options] db_name [tables] 
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...] 
shell> mysqldump [options] --all-databases 

顯然,您必須在要轉儲的表的名稱之前放置數據庫的名稱。

所以,舉例來說,這樣的事情可能做的伎倆:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DBNAME TABLE --quick --lock-tables --add-drop-table 


希望這有助於!


編輯:其實我做了一個快速測試,使用「databasename.tablename」,像你這樣:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME.TABLENAME 

我得到的同類,你有輸出的......但我也有一個錯誤:

mysqldump: Got error: 1102: Incorrect database name 'DBNAME.TABLENAME' when selecting the database 

其中,我猜,是要在錯誤輸出,而不是標準輸出(你只重定向是第二個到文件)

如果我使用:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME TABLENAME 

一切正常OK:沒有錯誤,我有轉儲。

+0

我在數據庫名稱和表名稱(而不是句點)之間加了一個空格,它工作正常。謝謝! – 2009-09-17 17:17:25

+0

不客氣:-)玩得開心! – 2009-09-17 17:56:20