web-dev-qa-db-ja.com

dbテーブルの基本的なMySQLdumpが「Permission denied」で失敗するのはなぜですか

これは迅速かつ簡単なはずですが、Googleで調査した後も、まだ困惑しています。私は主に初心者です:サーバー管理者、CLI、MySQL。

PHP=サイトをローカルで開発していて、新しいMySQLテーブルをローカルの開発セットアップからリモートテストサイトに移動する必要があります。最初のステップは、テーブルをダンプすることです。時間。

私は次のように私のローカルMySQLに正常にログインします:

Govind% /usr/local/mysql/bin/mysql -uroot

しかし、このディレクトリにいる間(そしてMySQLにログインしていない場合):

/usr/local/mysql/bin

...これを試してみると

mysqldump -uroot -p myDBname myTableName > myTestDumpedTable.sql

..それから私はこれを続けます:

"myTestDumpedTable.sql: Permission denied."

私がそれにバリエーションを行った場合も同じ結果になります(db全体をダンプしたり、 '-p'を削除したりするなど)。

これが信じられないほど単純であるか、私の知識のギャップ(基本)の穴を明らかにするだけであると確信しているので、私は恥ずかしいです。 ..しかし、助けてください;-)

14
govinda

その答えは、MySQLリストの有能な人からのものでした。
皆さん(Ansonとkrazybean)が考えていたように、私には/usr/local/mysql/bin/ディレクトリへの書き込み権限がありませんでした。しかし、他のディレクトリから開始すると、mysqldumpへの呼び出しは失敗しました。これは、シェルのPATH変数(私がそう言った場合)がまだ別のディレクトリからのmysqldumpを処理するように設定されていないためです。また、何らかの理由でまだ理解できていないため、mysqldumpを効果的に呼び出している場合でも、出力への書き込み権限がある場合でも、outputでフルパスを使用する必要がありました。 dir(例~/myTestDumpedTable.sql。これが今のところ私のチケットです(クイックアンサー):

Govind% /usr/local/mysql/bin/mysqldump -uroot -p myDBname myTableName > /Users/Govind/myTestDumpedTable.sql

シェルユーザーがアクセスを許可されている場所であればどこにでも書き込むことができます。ユーザーのホームディレクトリを選択しました。

これがいつか誰かを助けることを願っています。
乾杯。

25
govinda

一般的に私はとにかくホスト名を定義することに固執しますが、あなたがrootであることはそれが問題になるとは思われないので、これをどこに書き込むのか疑問に思いますか? >〜/ myTestDumpedTable.sqlにダンプするとどうなりますか

3
krazybean

私の場合、$ Sudo mkdir /directory/to/store/sql/filesを使用してディレクトリを作成しました。そのディレクトリの所有者はrootです。そのため、$ Sudo chown me:me /directory/to/store/sql/filesを使用して所有者を変更し、権限を多分$ Sudo chmod 744 /directory/to/store/sql/filesに変更すると、うまくいきました。

1
Pathros

正しい引数の使用方法については、mysqldumpのマニュアルページを参照してください。次のように、-uフラグとユーザー名の間にスペースが必要です。

mysqldump -u root -p myDBname myTableName > myTestDumpedTable.sql

あるいは、あなたは行うことができます

mysqldump --user=root -p myDBname myTableName > myTestDumpedTable.sql

引数のリストでパスワードを指定していないので、パスワードの入力を求められるはずです。引数のリストでいつでもパスワードを指定できますが、そのマイナス面はクリアテキストで表示され、シェルのコマンド履歴に表示されることです。

1
Anson

コマンドから./が欠落していると思います。試してみてください:内部にいる

/usr/local/mysql/bin$ ./mysqldump -u root -p myDBname > "/Users/yourUserName/Documents/myTestDumpedTable.sql"

したがって、これはスクリプトであり、Linuxでは./myscriptを使用してスクリプトを実行します。今日それを見つけたのですが、私のMac OSXでは-pを使用しませんでした。おそらくパスワードが不要なため、まだわかりません。つまり、次も試してください:

./mysqldump -u root myDBname > "/Users/yourUserName/Documents/myTestDumpedTable.sql"
0
Agusti Febrer

次のようなSQLバックアップファイルのフルパスを指定する必要があります。

mysqldump -u root -p databasexxx > /Users/yourusername/Sites/yoursqlfile.sql
0
Lisong