35

私はmysqldumpスキーマをダンプするために使用しようとしていますが、ほとんどは機能しますが、1 つの好奇心に遭遇しました: -por--passwordオプションは、パスワードの設定以外のことをしているようです (manページと--help出力がそうすべきだと言っているように)。

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

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

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

    $ mysqldump -u test -h myhost --no-data --tables --password lose
    パスワードを入力する:
    -- MySQL ダンプ 10.10
    mysqldump: エラーが発生しました: 1044: ユーザー 'test'@'%' へのアクセスが拒否されました
    データベースの選択時にデータベースが「失う」

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

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

4

10 に答える 10

80

man mysqldump から:

--password[=パスワード], -p[パスワード]

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

構文的に、 --password スイッチを正しく使用していません。そのため、コマンド ライン パーサーは、スタンドアロンの引数として "lose" が使用されていることを認識しており、mysqldump はこれをデータベース名として解釈します。mysqldump lose

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

于 2008-09-29T14:41:13.970 に答える
13

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

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

[client]
password=lose

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

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

于 2008-09-29T14:45:27.813 に答える
11

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

于 2010-04-08T16:18:17.547 に答える
4

--password lose のように「=」を間に入れてみてください。

--password=lose

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

于 2008-09-29T14:41:41.270 に答える
3

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

mysqldump -pmypassword ...

于 2008-09-29T14:39:41.213 に答える
2

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

おそらく私は質問を見逃していますが、それがツールを実行するために私がしていることです。

于 2008-09-29T14:39:13.180 に答える
1

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

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

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

于 2008-09-29T14:46:40.573 に答える
0

--password[=パスワード]

ここにドキュメントがあります

于 2008-09-29T14:42:28.507 に答える
0

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

@Nathanの答えも当てはまります。-p スイッチの直後にパスワードを指定できます(コマンドの実行後に手動で入力できないスクリプトなどで役立ちます)。

于 2008-09-29T14:40:07.093 に答える
-2

ユーザー「test」には、「lose」データベースにアクセスする権限がない可能性がありますか?

于 2008-09-29T15:11:00.000 に答える