スポンサーサイト

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

Windows JavaアプリケーションからCentOSマシンのMySqlサーバへの接続エラー ~2.MySQL側の問題~

前回からの続きになりますが、Windows上のJavaアプリケーションからLinuxマシン上のMySQLサーバへ接続しようとした場合に発生した問題の、今回はMySQL側の問題についてとりあげます。

[前回の記事]
Linux OSをクライアントマシンとして使ってみる Windows JavaアプリケーションからCentOSマシンのMySqlサーバへの接続エラー ~1.CentOS側の問題~

2.MySQL側の問題

前回記事にも取り上げましたが、現状の状態で接続を試みると、以下のエラーが発生します。

- コンソール出力エラーコード2 -
ComDbUnit Init Error:java.sql.SQLException: null,  
message from server: "Host '×××.×××.×.××' is not allowed to connect to this MySQL server"

このエラーコードを解析しますと、
MySQLサーバへ接続するのにHost '×××.×××.×.××'は許可されていないということを訴えています。MySQLというデータベースをにわか知識で操る僕としましては、ネットで調査したところ、
外部からのアクセスには権限を与えてやる必要があるとのこと。
で、現状の権限がどうなっているか?はMySQLサーバが持つ”mysql”データベースが管理しています。
# mysqlshow

【実行結果1:root権限のデータベース一覧】
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+

ということで、"mysql"データベースにログインします。
# mysql -u root mysql

ログインが完了したら、以下のSQLコードを実行してみてください。
mysql> SELECT Host, User, Select_priv, Insert_priv,Update_priv, Delete_priv FROM user;

実行結果2のように出力されるはずです。Host名にはlocalhostのみしか表示されておらず外部からのhostを受け付けるような設定にはなってないことがわかります。

【実行結果2:ユーザテーブルの確認】
+-----------------------+------+-------------+-------------+-------------+-------------+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv |
+-----------------------+------+-------------+-------------+-------------+-------------+
| localhost | root | Y | Y | Y | Y |
| localhost.localdomain | root | Y | Y | Y | Y |
| localhost.localdomain | | N | N | N | N |
| localhost | | N | N | N | N |
+-----------------------+------+-------------+-------------+-------------+-------------+

MySQLサーバのroot権限はこのままlocalhostのみからのアクセスに限定させておくとして、
新しくユーザを作成し、そのユーザでログインできるようにします。
以下のコマンドを実行すれば、developユーザが追加されます。
mysql>GRANT ALL PRIVILEGES ON *.* TO develop@"%" IDENTIFIED BY 'test';
mysql>flush privileges;


簡単に上記コマンドを説明します。

GRANT構文はユーザを登録するコマンドです。「develop」は追加するユーザ名です。

「*.*」としてるところがアクセス可能なデータベースおよび、テーブルになりますが、ワイルドカードで*.*としているので、全データベース全テーブルがアクセス対象となります。

アットマークの後ろにある"%"は許可するホスト名です。IPアドレス等でも可です。"%"もワイルドカードで、すべてのhostを受け付けるというちょっと危険な設定です。IPアドレスやホスト名で限定することが望ましいです。

最後の'test'はパスワードになります。

そして、GRANT構文を反映させるために、「flush privileges」というコマンドを実行しています。
では、再び以下のSQLコマンドで追加されていることを確認します。
mysql> SELECT Host, User, Select_priv, Insert_priv,Update_priv, Delete_priv FROM user;

確認できたら、Javaアプリケーションから今回追加したユーザでログインできるように設定し、実行すると見事接続が完了しました。
スポンサーサイト

「Can't connect to local MySQL server through socket」エラーについて

MySqlのサーバを導入してみることにしました。

Windowsマシンと違って、Cent OSの場合はあらかじめ用意してあるので、
メニューバーの「アプリケーション」-「ソフトウェアの追加/削除」を選択すると、
パッケージマネージャダイアログが表示されるので、その中の”サーバ”項目内に「MySQLデータベース」にチェックを付けます。すでについている場合はインストール済みです。
その後”適用”ボタンをクリックすれば、インストールが開始されます。

Windowsの場合は、MySQLのサイトからファイルをダウンロードして、インストーラを起動してなどの作業がある為、面倒ですが、CentOSの場合はとても簡単に導入できます。

で、インストールが完了したので、GNOME 端末から以下のコマンドで起動してみることにしました。
# mysql -u root


そうすると表題のようなエラーが・・
Can't connect to local MySQL server through socket


で、どうやら、なんてことない、原因はMySqlサーバが起動していなかったということです。
以下に起動に関するコマンドを掲載しておきます。

■MySqlサーバをコマンドで起動
#/usr/bin/mysqld_safe &

以下が端末上に表示されれば起動OKです。
Starting mysqld daemon with databases from /var/lib/mysql

■MySqlサーバをコマンドで停止
#mysqladmin shutdown


■MySqlサーバの起動確認
#mysqladmin ping


コマンドが面倒だという方はGUI上からサービスに登録することができます。
メニューバー[システム] - [管理] - [サービス]からサービスの設定ダイアログを表示させ、
mysqldにチェックを付けて、開始ボタンを押下します。下図参照。

サービスの設定


サーバの起動確認ができたら、下記のコマンドでログインできることを確認しましょう。

■MySqlへログイン
#mysql -u root

【参考】
「Can't connect to local MySQL server through socket」エラーについて
プロフィール

白鯖

Author:白鯖
安い寄せ集めの部品で構築し、CentOS5をインストールしました。主に、Webサーバ、アプリケーションサーバとして運用中。ハードの知識はあまり無いプログラマですが、全部自前で作るのは、手間はかかるけど、レン鯖より面白いです。

ハードウェア構成

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
Max TDP控え目なCPU
安くて静音なクーラー
検索フォーム
ユーザータグ
RSSフィード
はてな
スポンサード リンク
おすすめ書籍
twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。