アプリ版:「スタンプのみでお礼する」機能のリリースについて

mysqlサーバーにLAN内のリモートホストから接続するとき、
mysqlサーバーの/etc/mysql/my.conf 内の
bind-address = xxx.xxx.xxx.xxx
を削除すれば接続できますが、
LAN(192.168.1.0/24)内のリモートホストとサーバー自身からの接続に限定しようとして
/etc/mysql/my.confに
bind-address = 127.0.0.1
bind-address = 192.168.1.0/24
を記述すると、mysqlが起動しません。
( Ubuntu/LInuxで、# service mysql restart や # /etc/init.d/mysql を実行したらプロンプトに戻らない)
bind-address = 127.0.0.1
bind-address = 192.168.1.1
と記述しても起動しません。

bind-address = 127.0.0.1 192.168.1.0/24
と記述すると、起動はしますがlocalhostからしか接続できません。

localhostと特定のリモートホストに接続を限定する方法はないでしょうか?

2011年9月6日

A 回答 (3件)

http://donrails.araki.net/archives/id/5732

/etc/hosts.allowを使うやり方もあるみたいです。
    • good
    • 0
この回答へのお礼

nora1962様、たびたびありがとうございます。
「mysqlに接続するhostを制限する」という質問の趣旨にはこの方法が適しています。

【個別アプリで問題が片付かなければ、システムで対処してみる】ということですね。

2011年9月6日

お礼日時:2011/09/06 22:26

bind-address は接続元リモートホストのIPアドレスを制限するものではなく、


「サーバが複数の IPアドレスを持っている場合に、特定のアドレスでしか
待ち受けないようにする」オプションだそうです。

http://www.mysql.gr.jp/mysqlml/mysql/msg/9635
http://www.nilab.info/zurazure2/000318.html
http://somenotes.seesaa.net/article/140067960.html
http://dev.mysql.com/doc/refman/5.1/en/server-op …

LANからの接続に限るというのであれば、

bind-address = サーバーのLANのIPアドレス

になるかと思います。(その場合サーバー自身から 127.0.0.1 で接続できなくなると思われます)


手元の環境で実験してみました。
設定を変えて再起動し、netstat -lntp で待ち受けの状態を調べました。
MySQLのバージョンは 5.0.77 です。


(1) bind-address 記述なし

サーバーが持っている全てのIPアドレスで待ち受けています。
-----------------------------------------------
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9383/mysqld
-----------------------------------------------


(2) bind-address = 0.0.0.0

記述なしの場合と同じです。
-----------------------------------------------
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 365/mysqld
-----------------------------------------------


(3) bind-address = 127.0.0.1

127.0.0.1 でのみ待ち受けています。
-----------------------------------------------
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 32707/mysqld
-----------------------------------------------


(4) bind-address = xxx.xxx.xx.xx (サーバーIPアドレス、伏せてます)

サーバーのIPアドレスで待ち受けしています。
ちなみにこの時はサーバー自身から mysql -h 127.0.0.1 で接続できませんでした。
-----------------------------------------------
tcp 0 0 xxx.xxx.xx.xx:3306 0.0.0.0:* LISTEN 695/mysqld
-----------------------------------------------


(5) bind-address = 192.168.0.1 (サーバーが持っていないIPアドレス)

MySQLサーバーが起動しません。
TCP/IPポートのバインドができないとのことで異常終了しています。

-----------------------------------------------
110906 19:21:35 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
110906 19:21:35 [ERROR] Do you already have another mysqld server running on port: 3306 ?
110906 19:21:35 [ERROR] Aborting
-----------------------------------------------

(6) 2行書いてみた

bind-address = 127.0.0.1
bind-address = xxx.xxx.xx.xx

最後に書いてあるものが有効になるようです。
-----------------------------------------------
tcp 0 0 xxx.xxx.xx.xx:3306 0.0.0.0:* LISTEN 1927/mysqld
-----------------------------------------------

(7) スペース区切りで並べて書いてみた

bind-address = 127.0.0.1 xxx.xxx.xx.xx 192.168.0.1

最初のアドレスが有効になるようです。
-----------------------------------------------
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2652/mysqld
-----------------------------------------------
    • good
    • 0
この回答へのお礼

tomaju様、非常に詳細に御確認頂き、大変ありがとうございます。
my.confでのbind-addressの書式の問題ではなく、そういう仕様ということで了解しました。

2011年9月6日

お礼日時:2011/09/06 22:18

検索したらこんなの見つけました。



http://pman0214.blog37.fc2.com/blog-entry-129.html

bind-addressで複数の接続先の範囲設定はできないのでGRANT構文でユーザー名の指定のところでIPアドレスを指定するばいいとのことらしい。

家庭内LANなので実際有効か検証できないけれど
GRANT ALL ON root@'192.168.11.%' identified by 'xxxx';
は通った(接続もできる)。
    • good
    • 0
この回答へのお礼

nora1962様、ありがとうございます。

御指摘と同様の

mysql> grant all privileges on DB.* to USER@"192.168.1.%" identified by 'PASSWORD' with grant option ;

を既に実行しております。
確かに、これでユーザーとホストの限定ができるのですが、my.confの設定で一つのIPネットワークしか指定できないのは変な感じがしますので、今は「my.confの設定ではどこまでできるのか」を知りたいです。

2011年9月6日

お礼日時:2011/09/06 18:39

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