webdevqa.jp.net

mysqldump --passwordは本当にそれを実行しますか?

mysqldumpを使用してスキーマをダンプしようとしていますが、ほとんど機能しますが、1つの好奇心に遭遇しました。_-p_または_--password_オプションは、設定以外のことをしているようですパスワード(manページと_--help_の出力がそうするように).

具体的には、ここに示されていることを実行しているようです。 http://snippets.dzone.com/posts/show/36 -つまり、データベースをダンプするように設定します。

私のやや風変わりな主張を裏付けるために、_--password_(または_-p_)オプションを指定しない場合、コマンドは使用法ステートメントを出力し、エラーで終了することをお伝えします。指定すると、すぐにパスワード(!)を入力するように求められ、次に_--password_オプションで指定されたデータベースがダンプされます(または、パスワードがどのデータベースにも一致しないという通常の場合はエラーが発生します)名前が指定された)。

ここにトランスクリプトがあります:

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

だから、何を与えるのですか?これはこれが機能するはずの方法ですか?それは確かに意味をなさないようであり、公式のドキュメントと一致しません。そして最後に、これがそのまま機能する場合、自動化されたジョブで使用されるパスワードをどのように指定するのですか? expect ???

mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486)を使用しています。

34
John Zwinck

Man mysqldumpから:

--password [= password]、-p [password]

サーバーに接続するときに使用するパスワード。短いオプション形式(-p)を使用する場合、オプションとパスワードの間にスペースを入れることはできません。コマンドラインで--passwordオプションまたは-pオプションに続くパスワード値を省略すると、パスワードの入力を求められます。
コマンドラインでパスワードを指定することは、安全ではないと見なされます。 6.6項「パスワードの保護」を参照してください。

構文的には、-passwordスイッチを正しく使用していません。そのため、コマンドラインパーサーは、「[失う]」の使用をスタンドアロンの引数として認識し、mysqldumpがmysqldump loseのような簡単なコマンドを試行した場合と同じようにデータベース名として解釈します。

これを修正するには、--password=loseまたは-ploseを使用するか、-pまたは--passwordを使用して、プロンプトが表示されたらパスワードを入力します。

79
antik

別のオプションは、ファイル〜/ .my.cnfを作成することです(権限は600である必要があります)。

これを.my.cnfファイルに追加します

[client]
password=lose

これにより、実際にパスワードを入力しなくてもパスワードを要求するMySQLユーザーとして接続できます。 -pや--passwordも必要ありません。

Mysqlおよびmysqldumpコマンドのスクリプト作成に非常に便利です。

13
Mark Biek

これは、パスワードに特殊文字が含まれている場合に発生することがわかりました。ここのmysqlパスワードには!その中で、== password = 'xxx!xxxx'を実行して、正しく機能するようにする必要があります。 'マークに注意してください。

9
Phil Gordemer

--passwordバージョンで機能するかどうかはわかりませんが、-pを使用すると、直後にパスワードを指定できます(キーにはスペースを含めないでください)。

mysqldump -pmypassword ...

3
nathan

次のように--passwordの間に「=」を挿入してみてください:

--password=lose

-pを使用する場合、-pとパスワードの間にスペースを入れることはできません(つまり、「-plose」)。

3
Steve Baker

--password = whatever-password-isを試しましたか?

多分私は質問を逃しているが、それは私がツールを実行するために行うことです。

2
itsmatt

引数なしで-pまたは--passwordを使用すると、パスワードの挿入を求めるプロンプトが表示されます。

コマンドラインでパスワードを指定する場合は、-pYOURPASSWORDまたは--password = YOURPASSWORDを使用する必要があります。 -pの後にスペースがなく、-passwordの後に「=」記号があることに注意してください。

あなたの例では、mysqldumpはパスワードを要求し、次に「紛失」をデータベース名として扱います。それがあなたのパスワードであれば、「=」を含めるべきだった

1
Giuseppe Maxia

--password [=パスワード]

これが documentation です

0

-pオプションは引数を必要としません。 -pまたは--passwordを指定して、データベースにアクセスするためにパスワードを使用することを示します。 -pの後に指定した名前のデータベースをダンプするのは、mysqldumpの最後の引数が、ダンプするデータベースの名前(または、すべてが必要な場合は--all-databases)であるためです。

@ネイサンの答えも真実です。 -pスイッチの後にパスワード即時を指定できます(スクリプトなどで、コマンドの実行後に手動で入力できない場合に便利です)。

0
Justin Bennett