2013/09/24
MySQL 5.1.70

MySQLのインストールと基本設定

近年Oracleに買収されたことで、色々言われていますが、それでもまだまだ多くの現場で使用されています。
同じオープンソースのデータベースとしては、PostgreSQLがありますが、MySQLの方が高速化や可用性の手法が確立されている感があります。
一方PostgreSQLはデータの制約がしっかりしていたりと、データ自体への安心感があります。
今後はさらに、MySQLからフォークしたMariaDBも選択肢に入って来るでしょう。
ただどれを学ぶにしても、多くの実績を残しているMySQLを知っておいて損はないと思います。

MySQLのインストール

$ emerge dev-db/mysql
インストールされたMySQLのバージョンは5.1.70 でした。

MySQLの起動

MySQLを起動する前にデータベースをインストールします。
$ /usr/bin/mysql_install_db
MySQLを起動します。
$ /etc/init.d/mysql start
MySQLが起動したら、セキュリテイのためにルートのパスワードを変更しておきます。
$ /usr/bin/mysqladmin -u root password 'new-password'

MySQLへの接続

MySQLを起動しているホストから、先ほど設定したパスワードで接続します。
$ mysql -u root -h localhost -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.70-log Gentoo Linux mysql-5.1.70

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

データベースとユーザーを作成する

アプリケーションを作る際は専用のデータベースとユーザーを作る必要があります。
データベースと、そのデータベースにアクセスするためのユーザーを作成します。

データベースの作成

データベースを作成します。
create database文でgsideデータベースを作成して、show databasesコマンドで確認しています。
mysql> create database gside;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| gside              |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

ユーザーの作成

ユーザーを作成します。
create user文でユーザーを作成して、mysql.userテーブルを検索して確認しています。
mysql> create user guser identified by 'gside';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+-------+-----------+
| user  | host      |
+-------+-----------+
| guser | %         |
| root  | 127.0.0.1 |
|       | localhost |
| root  | localhost |
+-------+-----------+
4 rows in set (0.00 sec)

権限の追加

作成したguserユーザーに対して、gsideデータベースに対する操作を行う権限を追加します。
接続先として、localhostとリモートホスト(192.168.122.1)を許可するように権限を設定しています。
mysql> grant select,update,insert,delete ON gside.* to guser@"localhost" identified by 'gside';
Query OK, 0 rows affected (0.01 sec)
mysql> grant select,update,insert,delete ON gside.* to guser@"192.168.122.1" identified by 'gside';
Query OK, 0 rows affected (0.00 sec)
/etc/mysql/my.confから以下の行ををコメントアウトします。
#bind-address                           = 127.0.0.1
MySQLを再起動すれば、リモートからguserでアクセスできるようになります。

トラブルシューティング

bind-addressの設定が127.0.0.1になっている場合

$ mysql -h 192.168.122.102 --port=3306 -u guser -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.122.102' (111)
/etc/mysql/my.confの設定を確認する必要があります。
以下のコメントアウトを確認してください。
#bind-address                           = 127.0.0.1

権限が与えられていない場合

$ mysql -h 192.168.122.102 --port=3306 -u guser --protocol=TCP
ERROR 1130 (HY000): Host '192.168.122.1' is not allowed to connect to this MySQL server
リモートホストに対して権限を設定していないかもしれません。 接続仕様としているリモートホスト(下記の例では192.168.122.1)に権限を設定してください。
mysql> grant select,update,insert,delete ON gside.* to guser@"192.168.122.1" identified by 'gside';
Query OK, 0 rows affected (0.00 sec)