レンタルサーバー選びの迷いを解決!全力サポートします

Google or AdMax Promotion (srv)

MacPortで入れたMySQLサーバーがLISTEN:3306しない訳

MacPortでインストールしたMySQLサーバーに対して、
初期設定、my.cnfの設定などを行った上に苦労の末に起動し、
さぁクライアントから接続しようと思っても接続できなかった経験はありませんか?
MacPortからインストールしたMySQLにはちょっとした落とし穴が仕込まれています。

 

MacPortでインストールしたMySQLがLISTEN:3306しない訳

MacPortでインストールしたMySQLサーバーを起動してみたが接続できない。
なんで接続ができないのかと、LISTENしているポートの確認をしてみるも、
標準のポート3306ばかりか、mysqld実行ファイルが全くLISTENしていない。

そうなんですよね、デフォルト状態ではLISTENしないんです。

ここでお話しする内容は以下の手順を済ませている前提でお話しします。

では、MacPortでインストールしたMySQLの起動を行います。
通常は以下のコマンドでMySQLサーバーを起動します。

起動: sudo port load mysql55-server

毎回ターミナル操作も面倒なので、
私はWordkbenchを利用して起動終了をするようにしています。

 

次に、起動したプロセスを確認します。
起動しているプロセスを確認する手順は以下でご紹介しています。

no-listen-mysql-mp_st07

最低限のオプション指定・実行プロセスのパス確認

 

今回、起動中の「mysqld」実行ファイルのパスが正しい事を確認して、
プロセスIDが「30930」であることが上記で確認できます。

では、次にこの「mysqld」がどこのポートに対してLISTENしているのかを確認します。
LISTEN中のポートを確認するには以下の手順で確認ができます。

しかし、以下の通り「mysqld」は、
一切 LISTENしているリストに表示されてきません。

no-listen-mysql-mp_st04

mysqldがLISTENしない(MacPort)・LISTENプロセスの確認

 

通常、MySQLサーバーをインストールして起動すると、
「*:3306」という風に、すべてのIPアドレスの3306ポートに対して、
LISTENし待ち受け状態になりますが、

MacPortでインストールしたMySQLサーバーでは初期状態ではLISTENしていません。

 

諸悪の根源は「macport-default.cnf」

諸悪の根源と言うか、セキュリティー設定の為に導入されている一文が、
「macport-default.cnf」というファイルに記載されています。

MacPortでインストールしたMySQLサーバーの
「my.cnf」参照先ディレクトリにあります。

macport-using-wb_st01

my.cnf ディレクトリの確認・MacPortMySQLをWordkbenchで利用

 

MySQLサーバーが参照している「my.cnf」ディレクトリの
調べ方は以下でご紹介しています。

その調べたディレクトリに存在している「macport-default.cnf」は、
同じディレクトリに配置された「my.cnf」ファイル内で、
読み込まれる設定になっています。

macport-using-wb_st03

my.cnf(初期状態)・MacPortMySQLをWordkbenchで利用

 

では読み込まれる側の「macport-default.cnf」の中身を確認します。

実体は「[mysqld]」のサーバー用セレクタ文字列と、
「skip-networking」だけです。

[mysqld]
skip-networking

macport-using-wb_st02

macport-default.cnf(初期状態)・MacPortMySQLをWordkbenchで利用

 

「skip-networking」はTCP/IP接続を無効化

この「skip-networking」の設定が本丸です。

要はこの設定を導入することで
「ソケット接続」によってのみ接続が可能な状態になります。

一般的にTCP/IPを利用する接続方法

  • localhost:3306
  • 127.0.0.1:3306
  • 192.168.1.xxx:3306

等はすべて利用することができません。

--skip-networking

TCP/IP 接続を listen しません。mysqld とのすべての対話は、名前付きパイプまたは共有メモリー (Windows の場合) または UNIX ソケットファイル (UNIX の場合) を使用して行う必要があります。このオプションは、ローカルクライアントのみが許可されているシステムで強く推奨します。セクション8.11.5.2「DNS ルックアップの最適化とホストキャッシュ」を参照してください。

(引用)MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.3 サーバーコマンドオプション

 

では、その読み込み設定をコメントアウトして停止します。
これで「skip-networking」がOFFになります。

no-listen-mysql-mp_st06

my.cnfの変更(MacPort)・MacPortのMySQLサーバーTCP/IP有効化

 

再び、LISTENしているかどうかの確認を行います。
設定を無効にしたことによって、LISTENが行われるようになりました。

no-listen-mysql-mp_st05

mysqldがLISTEN(MacPort)・LISTENプロセスの確認

 

こうすることでMacPortでインストールしたMySQLサーバーでも、
TCP/IPによって接続ができるようになります。

が、それって必要ですか?

プロモーション

Google or AdMax Promotion (srvpos)

MacPortではこの設定で利用することを勧めて初期設定に

よく見かけるこの回避方法として、

「skip-networking」をコメントアウトする。

という方法が見受けられます。

「macport-default.cnf」の編集はアップデートで失われる

この場合「macport-default.cnf」を開き、編集しコメントアウトすることになります。
しかし、元々2行しか記述されていない「macport-default.cnf」の読み込みを、
止めることで回避は十分です。

また「macport-default.cnf」を編集することについては注意が必要です。

どこで書いてあったのかソースが提供できないのですが、
「macport-default.cnf」は、
MacPortでMySQLサーバーのアップデートを行うと、
上書きされて変更が失われてしまうという事なのです。

自動的にアップデートされることはないとしても、
MacPortからなんとなくMySQLのアップデートを行って変更が失われてしまっては、
忘れたことにTCP/IP接続ができなくなってしまうことになりかねません。

そういう意味では変更を「my.cnf」のみに行って、
「macport-default.cnf」は編集しない方が無難と言えます。

 

ソケット接続(UNIXソケット)接続を利用すればいい場合が大半

さらに言えば、

MySQLサーバーにTCP/IPで接続する必要性がどれくらいあるのか?

という点です。

同一ホスト上にM.A.M.P(Mac上にApache,MySQL,PHP)環境を構築した場合、
接続方法はローカル接続に限定されている
「ソケット接続(UNIXソケット)」を利用すれば事足りるのです。

Webサーバーとデータベースサーバーを別のホスト上で動作させて、
他の端末からデータベースへアクセスする必要がある場合には、
初めてこの「skip-networking」の設定が問題になるだけばのです。

同一ホストで「localhost」や「127.0.0.1」でアクセスする設定を利用するなら、
最初から「ソケット接続(UNIXソケット)」を利用しても同じです。

安易に「skip-networking」の設定を解除する前に、
解除する必要性があるのかどうかを十分に検討する必要があると私は思います。

当然、MySQLのGUI管理ツールMySQLWordkbenchでも、
「ソケット接続(UNIXソケット)」を利用しての接続が行えます。

 

参考

そのままではありますが、
セキュリティーを考慮したデフォルト設定「–skip-networking」が困惑する原因です。

--skip-networking

TCP/IP 接続を listen しません。mysqld とのすべての対話は、名前付きパイプまたは共有メモリー (Windows の場合) または UNIX ソケットファイル (UNIX の場合) を使用して行う必要があります。このオプションは、ローカルクライアントのみが許可されているシステムで強く推奨します。セクション8.11.5.2「DNS ルックアップの最適化とホストキャッシュ」を参照してください。

(引用)MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.3 サーバーコマンドオプション

 


AdMax Promotion

公開日:

コンテンツナビ
すべて展開 | すべて省略

AdMax Promotion

カテゴリ
すべて展開 | すべて省略

QRコードからもこのURLを開けます。