WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート MySQL

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

同じ理由でハマったのが2度めで、尚且つ中々思い出せずハマったのでメモしておきます。

開発用サーバーに本番サーバーからデータベースのdumpを流し込んだらAccess denied for userで接続できませんでした。対象DBにGRANTすると正常にGRANT出来るのですがそれでも接続できません。

結論をいうと流し込んだ後にmysqlサーバーを再起動しないとダメみたいです。大丈夫な時もあったような気がするのでなにか条件が重なるとなるのかも。やった手順は下記のとおりです。


mysqldump -u root --add-drop-database --all-databases > /tmp/db.dump

丸っとDBをdumpしました。このファイルを開発用サーバーにコピーして

mysql -u root dbname < /path/to/db.dump

こんな感じで流し込みました。

    このエントリーをはてなブックマークに追加

SSHのトンネルを使ってサーバーに接続した時、MySQLのユーザー@hostnameはどこのホストを許可しておけば接続できるのか、というよりも、この設定自体を勘違いをしていたのでメモしておきます。

puttyの設定で
接続>SSH>トンネルで

源ポートのところにWindowsのポート
送り先にlocalhost:3306

このように設定してputtyを接続した状態にし、Windowsから設定したポートに接続した時、パケットをSSH経由でフォワードしてくれます。EclipseのプラグインDBViewerなどを使う時に便利です。

上の例だと、対象サーバーで
mysql -h localhost
と接続した時と同じホストで接続してきたように見えます。

ここにグローバルIPが設定してありハマりました。もうSSHの接続は確立してるのでここはlocalhostでOKなんですね。



    このエントリーをはてなブックマークに追加

ネットで探すと、結構エントリーを見つけるのですが、意外に手こずったので載せておきます。

まずCSVで書きだすSQLですが


SELECT * INTO OUTFILE "file.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' FROM table;
こんな感じです。で実行してみたら
Access denied for user 'user'@'localhost'
とでました。あれ?ログインしてるのに・・・と調べてみるとAccess denied エラーの原因
「MySQL サーバに接続はできるけれども、SELECT ... INTO OUTFILE または LOAD DATA INFILE を発行すると、Access denied が出る場合は、user テーブルのエントリで、FILE 権限がないことを意味します。」
と発見。なるほどと思い

GRANT file ON db_name.* TO 'user'@'localhost';
と実行してみる、今度は
Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
というエラーが。FILE権限はDB単位に与えるものではなくGlobalな権限なので

GRANT file ON *.* TO 'user'@'localhost';
と実行する必要があります。

また、当然ですが、書き出しはmysqlユーザーで行われますので、書き出し先にmysqlが書き込める必要があります。

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。