mysqldump --passwordは本当に言っていることをしますか?
-
02-07-2019 - |
質問
スキーマをダンプするために mysqldump
を使用しようとしていますが、ほとんど機能しますが、好奇心に陥りました: -p
または-password
オプションは、パスワードの設定以外のことを行っているようです( man
ページと-help
の出力が示すとおり)。
具体的には、ここで示されていることを実行しているように見えます: 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、pc-linux-gnu(i486)を使用しています
。
解決
man mysqldumpから:
-password [= password]、-p [password]
サーバーに接続するときに使用するパスワード。使用する場合 短いオプション形式(-p)、オプション間にスペースを入れることはできません およびパスワード。次のパスワード値を省略した場合 コマンドラインで--passwordまたは-pオプションを選択すると、プロンプトが表示されます one。
コマンドラインでパスワードを指定することを検討する必要があります 安全でない。セクション6.6、「パスワードを安全に保つ」を参照してください。
構文的には、-passwordスイッチを正しく使用していません。そのため、コマンドラインパーサーは、「失う」の使用を確認しています。 mysqldumpが mysqldump lose
これを修正するには、-password = lose
または -plose
を使用するか、単に -p
または-passwordを使用してください
プロンプトが表示されたらパスワードを入力します。
他のヒント
別のオプションは、ファイル〜/ .my.cnf を作成することです(アクセス許可は600である必要があります)。
これを.my.cnfファイルに追加します
[client]
password=lose
これにより、実際にパスワードを入力しなくても、パスワードが必要なMySQLユーザーとして接続できます。 -pや--passwordも必要ありません。
mysql&のスクリプト作成に非常に便利mysqldumpコマンド。
パスワードに特殊文字が含まれている場合、これが発生することがわかりました。ここのmysqlパスワードには!その中で、私はそれが正しく動作するために== password = 'xxx!xxxx'をしなければなりません。 'マークに注意してください。
-passwordバージョンで機能するかどうかはわかりませんが、-pを使用すると、すぐにパスワードを指定できます(キーにスペースを含めることはできません):
mysqldump -pmypassword ...
--passwordの間に「=」を入れてみてください:
--password=lose
-pを使用する場合、-pとパスワードの間にスペースを入れないでください(例: '-plose')。
-password = whatever-password-isを試しましたか?
おそらく質問がありませんが、それがツールを実行するために行うことです。
引数なしで-pまたは--passwordを使用すると、パスワードの挿入を求めるプロンプトが表示されます。
コマンドラインでパスワードを指定する場合は、-pYOURPASSWORDまたは--password = YOURPASSWORDを使用する必要があります。 -pの後にスペースがなく、" ="があることに注意してください。 --passwordの後に署名します。
あなたの例では、mysqldumpはパスワードを要求し、「失う」を扱います。データベース名として。それがパスワードだった場合、" ="
を含める必要がありました。-pオプションには引数は必要ありません。 -pまたは--passwordを入力するだけで、データベースにアクセスするためにパスワードを使用することを示します。 -pの後に指定した名前のデータベースをダンプする理由は、mysqldumpの最後の引数が、ダンプするデータベースの名前(または、必要な場合は--all-databases)であることです。
@Nathanの答えも正しい。 -pスイッチの後にパスワードをすぐに指定できます(スクリプトなどで便利です。コマンドの実行後に手で入力することはできません)。
-password [= password]
ユーザーの" test"あなたの「失う」にアクセスする権限がありません。データベース?