2008-09-29 43 views
34

我試圖用mysqldump傾倒一個模式,它主要工作,但我遇到了一個好奇:在-p--password選項好像是做比設定的密碼(如man頁面和--help輸出說其他的東西這應該)。mysqldump --password是否真的做了它所說的?

具體而言,它看起來像是在做什麼在這裏指示:http://snippets.dzone.com/posts/show/360 - 即設置數據庫轉儲。

爲了支持我有點古怪的說法,我可以告訴你,如果我沒有指定--password(或-p)選項,那麼該命令將打印使用語句並退出並顯示錯誤。如果我指定它,系統會立即提示輸入密碼(!),然後轉儲--password選項中指定的數據庫(或者在通常情況下會給出錯誤,指出密碼與指定的數據庫名稱不匹配) 。

這裏的成績單:

 
    $ mysqldump -u test -h myhost --no-data --tables --password lose 
    Enter password: 
    -- MySQL dump 10.10 
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to 
    database 'lose' when selecting the database 

那麼,是什麼原因呢?這是否應該這樣工作?它肯定沒有意義,也不符合官方文件。最後,如果這只是它的工作方式,我該如何指定在自動化作業中使用的密碼?使用expect ???

我正在使用mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486)

+0

刪除了通用標籤,增加了gotcha – Sklivvz 2008-09-29 15:01:45

回答

79

從人的mysqldump:

--password [=密碼],-P [口令]

密碼連接到服務器時使用。如果使用 短選項表單(-p),則在選項 和密碼之間不能有空格。如果在命令行上省略了 --password或-p選項後面的密碼值,系統將提示您輸入 之一。
在命令行中指定密碼應視爲 不安全。請參見第6.6節「確保您的密碼安全」。

語法上,您沒有正確使用--password開關。因此,在命令行解析器看到您的「失去」作爲mysqldump的解釋爲數據庫名獨立的參數使用,因爲它會如果你試圖像mysqldump lose

一個簡單的命令,要解決這個問題,嘗試使用--password=lose-plose或僅使用-p--password,並在出現提示時鍵入密碼。

+18

你說得很對 - 謝謝。 '-u username`選項允許有一個空格,但`-ppassword`選項不能。不是一個直觀的設計。 – 2008-09-29 15:19:59

+1

任何想法如何讓`mysqldump`給我「警告:在命令行界面上使用密碼可能不安全」? – 2013-06-28 09:53:56

2

你試過--password = whatever-password-is?

也許我錯過了這個問題,但那是我做運行該工具。

3

我不知道它是否適合在--password版本,但是如果你使用-p你可以隨即指定密碼(關鍵是不包括空格):

的mysqldump -pmypassword。 ..

0

-p選項不需要參數。您只需將-p或--password指示您將使用密碼訪問數據庫。之所以轉儲名爲-p的數據庫,是因爲mysqldump的最後一個參數應該是要轉儲的數據庫的名稱(或者--all-databases,如果您希望它們全部轉換的話)。

@納森的答案也是如此。您可以在-p開關後立即指定密碼(在執行該命令後無法手動輸入的腳本等)。

3

嘗試在放置一個「=」之間 - 密碼失去像:

--password=lose 

如果使用-p,那麼就不可能有-p和密碼,即「-plose」之間沒有空格。

13

另一個選項是創建該文件〜/ .my.cnf(權限需要是600)。

而不必實際輸入密碼本到.my.cnf文件

[client] 
password=lose 

這可讓您連接爲誰需要密碼的MySQL用戶添加。你甚至不需要-p或--password。

對於腳本編寫非常方便mysql & mysqldump命令。

1

如果使用不帶參數的-p或--password,則會收到提示,要求輸入密碼。

如果要在命令行上指示密碼,則必須使用-pYOURPASSWORD或--password = YOURPASSWORD。請注意,-p後沒有空格,並且--password後面有一個「=」符號。

在您的示例中,mysqldump要求輸入密碼,然後將「lost」視爲數據庫名稱。如果這是你的密碼,你應該包括一個「=」

-2

也許你的用戶「測試」沒有訪問你的「失去」數據庫的權限?

9

我發現如果您的密碼中有特殊字符,就會發生這種情況。這裏的mysql密碼有一個!在其中,所以我必須做== = password ='xxx!xxxx'才能正確工作。注意'標記。

相關問題