--- title: Ubuntu の mysql サーバーを外部からアクセス可能にする author: kazu634 date: 2009-11-08 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4907;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - mysql - ubuntu ---

Ubuntu の設定ではまったので、書いておきます。

参考にしたサイト

設定

Ubuntu側で設定します。設定には、

  1. mysql サーバ自身に外部からアクセスできるようにする設定
  2. mysql 上で設定したユーザーがデーターベースに接続できるようにする設定

の二種類があります。

mysql サーバーを外部からアクセス可能にする

参考にしたサイトにはこんなことが書いてありました:

調べてみると、以下の箇所を修正する必要がある様だ。

  1. MySQL Serverの設定ファイルmy.cnfを開き、[mysqld]の項目以下の、bind-addressを探す。
  2. bind-addressを、コメントアウトする。

修正し終わったら、MySQL Serverを再起動すると、外部ホストからも接続可能となる。

404 Not Found

というわけで、 /etc/mysql にある my.cnf を編集します。

kazu634@srv634% sudo vi my.cnf                                                       /etc/mysql [7304]
kazu634@srv634% diff my.cnf_20091108 my.cnf                                          /etc/mysql [7305]
57c57
< bind-address          = 127...1
---
> # bind-address                = 127.0.0.1

mysql 上で設定したユーザーがデーターベースにアクセスできるようにする

とりあえずローカルなネットワークはこのような構成です:

というわけで、192.168.11のネットワークからアクセスできるように設定します。

kazu634@srv634% mysql -uroot -pxxxxxxxx                                                        ~ [7291]
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 398
Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user, host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| redmine          | %         |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
| root             | localhost |
| root             | srv634    |
+------------------+-----------+
5 rows in set (.02 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| money              |
| mysql              |
| phone              |
| redmine            |
| shop               |
| words              |
+--------------------+
7 rows in set (.00 sec)
mysql> grant all privileges on shop.* to root@"192.168.11.%"
-> identified by 'musashi' with grant option ;
Query OK,  rows affected (.07 sec)
mysql> exit
Bye

最後に

mysql サーバーを再起動します:

kazu634@srv634% sudo /etc/init.d/mysql restart                                       /etc/mysql [7308]
* Stopping MySQL database server mysqld                                                        [ OK ]
* Starting MySQL database server mysqld                                                        [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.

テスト

アクセスできました♪

~ on kazu634 [517] $: hostname
musashi-kazuhiro-no-iMac.local
~ on kazu634 [518] $: mysql -h srv634 -uroot -p
-bash: mysql: command not found
~ on kazu634 [519] $: mysql5 -h srv634 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5..75-0ubuntu10.2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use shop;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_shop |
+----------------+
| Starbucks      |
| renoir         |
+----------------+
2 rows in set (0.00 sec)
mysql> select * from renoir\G
*************************** 1. row ***************************
id: 1
shopname: 喫茶室ルノアール 池袋東口店
address: 東京都豊島区東池袋1-40-2
tel: 03-3980-6352
shophour: 年中無休全日:7:30-23:00
accomodation: 禁煙席:38席喫煙席:32席
access: JR池袋駅東口出て明治通り左並びの東池袋1丁目交差点ヤマダ電機隣
lat: 35.7320862
lng: 139.7138367