2012年04月18日

mysqlで ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist と Access denied for user 'root'@'localhost'

【環境】
mysql 5.5.22 MySQL Community Server (GPL) by Remi
CentOS 5.5

【状況】
mysqlでflush privilegesを実行しようとすると、以下のエラーメッセージが表示される。
mysql> flush privileges;
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist

参考サイト:Go for it! mysql.serversテーブル
以下のSQLを実行し、DB:mysqlにテーブルを作成すればOK。
> use mysql
Database changed

> CREATE TABLE `servers` (
`Server_name` char(64) NOT NULL,
`Host` char(64) NOT NULL,
`Db` char(64) NOT NULL,
`Username` char(64) NOT NULL,
`Password` char(64) NOT NULL,
`Port` int(4) DEFAULT NULL,
`Socket` char(64) DEFAULT NULL,
`Wrapper` char(64) NOT NULL,
`Owner` char(64) NOT NULL,
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

次に、ユーザー作成&権限付与をしようとしたらエラー発生。
mysql> grant all privileges on *.* to hogehoge@localhost;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ちなみに、rootにパスワードを設定して using password: YES としても同じエラーになる。

参考サイト:MySQLでの「Access denied for user ‘root’@'localhost’ (using password: NO) 」への対処

かなり参考サイトまんまコピペになってしまい申し訳ありません。

1.MySQLの停止
[root ~]# service mysqld stop

2.オプション付きで起動
MySQLを skip-grant-tablesオプション付きで起動
このオプションはMySQLの権限システムを使用しないで起動するためのもの
[root ~]# mysqld_safe --skip-grant-tables &

3.mysqlコマンドプロンプトに入る
[root ~]# mysql -u root
mysql>

4.rootへの権限設定
まずは、現状の権限設定を確認してみます。
mysql> use mysql;
Database changed
mysql> select User,Password,Host from user;
+-----------+-------------------------------------------+---------------+
| User | Password | Host |
+-----------+-------------------------------------------+---------------+
| root | *0ED3F3036636C1EBCDC403F2798C4F13A0A41126 | localhost |
| root | | centos-test01 |
| root | | 127.0.0.1 |
| | | localhost |
| | | centos-test01 |
| hogehoge | *0ED3F3036636C1EBCDC403F2798C4F13A0A41126 | localhost |
+-----------+-------------------------------------------+---------------+
6 rows in set (0.00 sec)

参考サイトではこのテーブルが「空」の前提でしたが、私の場合はroot@localhostなどが登録されていました。
参考サイト手順の通り、userテーブルを全件削除してから、設定を実行します。
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option;
mysql> flush privileges;

実行結果を確認します。
mysql> select User,Password,Host from user;
+------+-------------------------------------------+-----------+
| User | Password | Host |
+------+-------------------------------------------+-----------+
| root | *0ED3F3036636C1EBCDC403F2798C4F13A0A41126 | localhost |
+------+-------------------------------------------+-----------+
1 row in set (0.00 sec)

5.MySQLの再起動(通常起動)
これでrootユーザへの権限設定ができましたので、MySQLを通常起動します。
mysql> quit;
[root ~]# kill -KILL [mysqld_safe のPID]
[root ~]# kill -KILL [mysqld のPID]
[root ~]# service mysqld start
mysqld を起動中: [ OK ]

6. 再度ユーザー作成
mysql> grant all privileges on *.* to hogehoge@localhost identified by 'hogehoge';
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
またエラーが出る。

mysql> grant all on *.* to hogehoge@localhost identified by 'hogehoge';
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
「grant all privileges」を「grant all」にしてみたがダメ。

mysql> grant all on hogehogedb.* to hogehoge@localhost identified by 'hogehoge';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
*.* を [db名].* に変更したらいけた。

mysqlはremiで入れないようがよさげか…?php5.3をremiで入れたらいっしょに入っちゃったのよね…。
先にmysql5.5をインストールしておいたほうがよかったかな?
posted by まきすけ at 20:59 | Comment(1) | TrackBack(0) | Linuxとか
この記事へのコメント
この方法でmysql 5.5.39zipから
インストールの
初期設定が出来ました
(ERROR 1045ではまっていました)
ありがとうございます。
Posted by りにょ at 2014年09月04日 15:26
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/265392121
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック