電子書籍の厳選無料作品が豊富!

お世話になっております。

Linuxを勉強しようと思い、VMwareエミュレータを使用してWindows上でCentosを動かしています。
そこで、PHPとApacheとMySQLが必要になったのでyumレポジトリからapache、Mysqlをインストール。PHPはソースをダウンロードしインストールしました。

MySQLのインストールで実行したスクリプト
[root@localhost~#]yum -y install mysql mysql-server
[root@localhost~#]vi /etc/my.cnf
[mysqld]
default-character-set = utf8
|_____この1行を追加しました。
[root@localhost~#]/etc/rc.d/init.d/mysqld start
|_____MySQLの起動が確認できました。
[root@localhost~#]/usr/local/mysql/bin/mysql_install_db --user=mysql
|_____MySQLの初期化を行いました。
[root@localhost~#]mysql -u root
|_____ERROR 1045(28000):Access denied for user 'root'@'localhost'(Using Password:NO)
というエラーが返されてしまいます。初期rootのパスワードは設定されていないと調べてわかったので、-pオプションはつけませんでした。

また、「my.cnf」ファイル内の[mysqld]フィールドに「skip-grant-tables」と追加記述しMySQLを再起動致しました。
するとログインできますが、rootユーザーのパスワードをアップデートしようと試みましたが、上記「「skip-grant-tables」とMySQLサーバが一緒に起動しています!とのエラーが出てしまい、結局rootユーザから接続できない状態です。

どなたか解決方法をご存知の方いらっしゃいましたら、アドバイスをお願い致します。

A 回答 (6件)

>|___ERROR: 1004 Can't create file '/tmp/#sqlb06_1_0.frm' (errno: 13)


と言ってますので、
"ls -l / | grep tmp"
で確認してください。通常/tmpは"chmod 777"ですから、
そうでなければ変更してください。
その後再度、
# /usr/bin/mysql_install_db
を実行してエラーがないか確認してください。
    • good
    • 0
この回答へのお礼

mimzyさん

ご回答頂きまして、大変ありがとうございます。
上記エラーは、パーミッションの関係でファイル作成ができていなかったのですね。

# ls -l \ |grep tmp
|____drwxr-xr-x 12 root root 4096 12月 16 11:35 tmp
パーミッションは、"755"となっておりました。
# chmod 777 /tmp
___drwxrwxrwx 12 root root 4096 12月 16 11:35 tmp
ご指摘頂いた通りパーミッションを"777"にし、

# /usr/bin/mysql_install_db
___Installing MySQL system tables...
___OK
___Filling help tables...
___OK
エラーがなく初期化に成功しました。

mysqlの再起動をおこなったあと、mysqlへのログインに試みてみました。
# mysql -u root
するとパスワードを聞かれたので、そのままEnterキーを押しました。
mimzyさん、ログインできました!

mimzyさんのご回答(No.5)に記載の
mysql>grant all privileges on *.* to root@localhost identified by 'password';
を実行し、自分で決めたパスワードでログインできるか試してみましたがしっかりとログインできることが確認できました。
また、パスワードでなしでログインを試みるとしっかりと拒否してくれます。
これで、PHPからmysqlの操作ができるようになります。大変有り難いです。

mimzyには、多岐に渡ってご回答下さいましたこと本当に感謝しております。
本当は、全ての回答に良回答20ptを付与したいぐらいです。
この解決は、今後Linuxの勉強を進めていくための糧になっていくと思います。

mimzyさん、この度は大変ありがとうございました。

お礼日時:2009/12/18 16:12

>mysql>select user, host, password from user;


|___Empty set (0.00 sec)

もしuserテーブルが空なら、skip-grant-tablesを使わずにmysqldを再起動後、-uを使わず
$>mysql mysql
でログインできますか?もしできたら、
mysql>grant all privileges on *.* to root@localhost identified by 'password';
を試してください。
このmysqlのバージョンは何ですか?
rpm -qa | grep mysql

この回答への補足

mimzyさん

返信が遅くなってしまい申し訳ありません。追加回答までして頂きありがとうございました。mimzyさんのご回答頂きました通り、
# mysql mysql
skip-grant-tablesを使用せずにコマンドを実行してみましたが、やはり、同じようなエラーメッセージが返されログインできませんでした。

# rpm -qa | grep mysql
|____mysql-5.0.77-3.el5
|____mysql-server-5.0.77-3.el5
mysqlのバージョンンは上記の通りでした。mysqlに限らず、インストールにはやはりバージョンが深く関係してくるのでしょうか?

>/usr/bin/mysql_install_dbはエラーがでなかったんですよね?
もう一度確認してみました。すると、エラーメッセージが出ておりました。念入りに確認していなかったため、エラーの位置に気付きませんでした。大変申し訳ありません。

# /usr/bin/mysql_install_db
|___Installing MySQL system tables...
|___091215 15:56:04 [Warning] option 'max_join_size': unsigned |___value 18446744073709551615 adjusted to 4294967295
|___091215 15:56:04 [Warning] option 'max_join_size': unsigned |___value 18446744073709551615 adjusted to 4294967295
|___ERROR: 1004 Can't create file '/tmp/#sqlb06_1_0.frm' (errno: 13)
|___091215 15:56:05 [ERROR] Aborting
|___091215 15:56:05 [Note] /usr/libexec/mysqld: Shutdown complete
|___Installation of system tables failed!
データベースの初期化が失敗としっかり出ていました。

上記エラーをgoogleで検索してみましたが、別バージョンにアップデートしたときに、古いバージョンのmy.cnfがDB初期化に問題を起こしていたとの記載がありましたが、mysqlとmysql-serverのバージョンは一致しておりましたし、新規インストールでしたので、原因がわかりません。my.cnfに代わる別のファイルが動作を邪魔しているのでしょうか?

毎度ご回答して下さるmimzyさんには、本当に感謝しております。
もうしばらく、ご協力のほどお願い致します。

補足日時:2009/12/17 20:17
    • good
    • 0

>mysql>select user, host, password from user;


>でユーザの確認を行いましたが、こちらでも空っぽでした。

これはおかしいですね。何らかのユーザが入っているはずです。
/usr/bin/mysql_install_dbはエラーがでなかったんですよね?
mysql-serverインストールがエラーなく終了したにも関わらずこの現象が起きるということは再インストールしても同じ結果になる可能性がありまが、
一度アンインストールしてから、再インストールし、エラーなく終了したのを確認した上、同じテストをしてみる、結果が同じなら別のmysqlバージョンを試してみてはどうでしょう。
    • good
    • 0

mysql>UPDATE user SET Password=PASSWORD('newpassword') WHERE User='root';


|____Query OK, 0 rows affected (0.01 sec)
|____Rows matched: 0 Changed: 0 Warnings: 0
これはuser rootがないこと意味していると考えられます。
私はこれまで、--user=mysqlでmysql_install_dbしたことはなく、このオプションは/var/lib/mysql以下を含めたパーミッションだけと思っていましたが、そうではないのかもしれませんね。とりあえずこれを実効してください。
mysql>select user, host, password from user;
多分rootがないと予想しますので、rootを作ってください。
mysql>grant all privileges on *.* to root@localhost identified by 'password';
これはあくまでlocalhostからのアクセス許可です。
mysql>flush privileges;
これでskip-grant-tablesなしでmysqldを再起動すればいいはずです。
もし、mysqlというユーザがuserテーブルすでに存在すれば、
mysql>UPDATE user SET PASSWORD=PASSWORD('newpassword') WHERE User='mysql'';
として以後ユーザmysqlをrootに置き換えて操作できると思います。
もし、これまでrootでの操作をすべて成功させるてめには--user=mysqlを使わずにmysql_install_dbを実行していればうまくいったのかなとも考えましたが、マニュアルを見る限りそれが原因かどうかは私には読み取ることはできませんでした。
----------------------------------------------------------------
http://dev.mysql.com/doc/refman/5.1/ja/mysql-ins …
マニュアル参照:
mysql_install_db --user=user_name
mysqld を実行するときのログイン ユーザ名。このユーザで、mysqld で作成するファイルやディレクトリの操作を行う。このオプションを使用するときは、root であることが必要。デフォルトでは、ログイン中の名前で mysqld が動作し、ファイルやディレクトリはそのログイン ユーザの所有となる。
---------------------------------------------------------------

一度ご自身--user=mysqlを使わずにmysql_install_dbを実行し確認してみてください。

この回答への補足

mimzyさん

お世話になっております。引き続き、ご回答頂きましてありがとうございます。毎度、補足ばかりの投稿になってしまい申し訳ありません。

>これはuser rootがないこと意味していると考えられます。
>多分rootがないと予想しますので、rootを作ってください。

ご指摘の通りでした。以下が実行結果ですが、ユーザが存在しません。
>mysql>select user, host, password from user;
|___Empty set (0.00 sec)

また、mimzyさんが仰ったとおり、以下を実行致しました。
mysql>grant all privileges on *.* to root@localhost identified by 'password';
|___ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement ・・・(1)

上記のようなエラーが出てしまいユーザを作成できません。おそらく、my.cnfに「skip-grant-tables」オプションを記述していることが原因のようです。しかし、my.cnfより「skip-grant-tables」記述をしないとmysqlには接続できません。

また、上記マニュアルを拝見致しました。
mysql_install_db --user=user_name
mysqld を実行するときのログイン ユーザ名。このユーザで、mysqld で作成するファイルやディレクトリの操作を行う。ということであれば、--user=mysqlとしてデータベースを初期化したのであれば、userテーブルにmysqlが存在しないといけないのではないかと考えました。
しかし、実際のところは、ユーザが空っぽと出てしまいます。

>これまでrootでの操作をすべて成功させるてめには--user=mysqlを使わずにmysql_install_dbを実行していればうまくいったのかなとも考えました
>一度ご自身--user=mysqlを使わずにmysql_install_dbを実行し確認してみてください。

解りやすい説明をありがとうございます。/var/lib/mysql以下を一度削除し、再度以下を実行致しました。
[root@localhost~]# /usr/bin/mysql_install_db (--user==usernameオプションなし)
[root@localhost~]# /etc/rc.d/init.d/mysqld restart
[root@localhost~]# mysql -u root
*** 接続できず ***
my.cnfに「skip-grant-tables」に記述し、
[root@localhost~]# /etc/rc.d/init.d/mysqld start
[root@localhost~]# mysql -u root
*** 接続できます ***
mysql起動画面で、
mysql>select user, host, password from user;
でユーザの確認を行いましたが、こちらでも空っぽでした。
grant文でユーザの作成を試みても、上記(1)のエラーで処理ができません。

mimzyさんのおっしゃる通り、
>このオプションは/var/lib/mysql以下を含めたパーミッションだけと思っていましたが、そうではないのかもしれませんね。
そうであるならば、再インストールの必要性もあるのでしょうか?

ご多忙の中、毎度ご回答下さり感謝致します。つきましては、もう少々の間、ご協力の程お願い致します。Linux初心者であるため、的外れな補足の部分もあると思いますが、ご容赦下さい。

補足日時:2009/12/14 14:41
    • good
    • 0

>恐らく、再起動をし忘れてしまいました。

そういった場合、一度MySQLをアンインストールし再インストールする必要がありますでしょうか?
再インストールする必要はありません。

mysql>UPDATE user SET Password=PASSWORD('newpassword') WHERE User='root';
はタイプミスなどによるエラーなく実行されたんですよね?
もうパスワードなしではログインできないんですよね?
そうなら手続きはあってます。
passwordはcase sensitiveですが、その辺は大丈夫ですか?
他にアカウントを操作出来るユーザは作りましたか?
もしrootが唯一のユーザでログイン出来ないとなるとmysqlの作り直しとなります。
centosなら、mysqldを停止し、/var/lib/mysql/以下を削除した後、mysql_install_dbからやり直してください。

この回答への補足

ご回答頂きましてありがとうございます。

>タイプミスなどによるエラーなく実行されたんですよね?
mysql>UPDATE user SET Password=PASSWORD('newpassword') WHERE User='root';
|____Query OK, 0 rows affected (0.01 sec)
|____Rows matched: 0 Changed: 0 Warnings: 0
実行はエラーなく出来たのですが、Changed:0が気になります。恐らくパスワードの変更がされていないのではないでしょうか?

>passwordはcase sensitiveですが、その辺は大丈夫ですか?
大文字、小文字は注意してタイプしていますので大丈夫です。

>他にアカウントを操作出来るユーザは作りましたか?
他にユーザーは作っていません。

>centosなら、mysqldを停止し、/var/lib/mysql/以下を削除した後、mysql_install_dbからやり直してください。
上記を試してみましたが、やはり接続エラーになってしまいます。

my.cnfに、「skip-grant-tables」と記述すると接続できるのですが、このまま「skip-grant-tables」を記述したままにしておいても、イントラネットでmysqlを使用する分には問題ないのでしょうか?

度重なる質問をしてしまい申し訳ありません。ご丁寧にもご回答下さり、大変感謝しております。

補足日時:2009/12/12 23:51
    • good
    • 0

centosのyumでmysqlをインストールすると、mysql_install_dbは


/usr/local/mysql/bin/mysql_install_dbになります?
それはさておき、
[root@localhost~#]/usr/local/mysql/bin/mysql_install_db --user=mysqlの後、mysqldの再起動はされましたか?
my.cnf変更し、mysqldを再起動後ログインできたわけですから、もう一度「skip-grant-tables」を削除し、mysqldを再起動したらうまくいきませんか?

この回答への補足

ご回答頂きましてありがとうございます。

>centosのyumでmysqlをインストールすると、mysql_install_dbは、/usr/local/mysql/bin/mysql_install_dbになります?
[root@localhost /]# locate mysql_install_db
|_____/usr/bin/mysql_install_db
上記の/usr/local/mysql/bin/mysql_install_dbではありませんでした。

>[root@localhost~#]/usr/local/mysql/bin/mysql_install_db --user=mysqlの後、mysqldの再起動はされましたか?
恐らく、再起動をし忘れてしまいました。そういった場合、一度MySQLをアンインストールし再インストールする必要がありますでしょうか?

>mysqldを再起動後ログインできたわけですから、もう一度「skip-grant-tables」を削除し、mysqldを再起動したらうまくいきませんか?
ご指摘の通り、
[root@localhost /]# vi /etc/my.cnf
[mysqld]のフィールドに、「skip-grant-tables」 の1行を追加しました。
[root@localhost /]# /etc/rc.d/init.d/mysqld restart
|____MySQLの再起動を行いました。
[root@localhost /]# mysql -u root
|____MySQLへの接続が可能でした。・・・・・・(1)
*****しかし問題はこのあとです。*****
[root@localhost /]# vi /etc/my.cnf
|____「skip-grant-tables」 の1行を削除しました。
[root@localhost /]# /etc/rc.d/init.d/mysqld restart
|____MySQLの再起動を行いました。
[root@localhost /]# mysql -u root -p ・・・・・・(2)
|____ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
とエラーが返されてしまいます。

ところで、(1)の時点で、
mysql>use mysql;
mysql>UPDATE user SET Password=PASSWORD('newpassword') WHERE User='root';
mysql>FLUSH PRIVILEGES;
mysql>\q
と実行し、rootパスワードの変更を試みました。
そして、(1)以降の処理を実行し、(2)の時点で、上記で設定しなおしたパスワードを使ってログインを試みましたが、エラーが返されてしまいます。

長文失礼致しました。
お忙しいところ申し訳ありませんが、何卒ご協力お願い致します。

補足日時:2009/12/11 13:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!