データベースサーバ(MySQL)

MySQL は高速性と堅牢性を追及したマルチユーザ・マルチスレッドのSQLデータベースで、 世界で最も人気のあるフリーのリレーショナルデータベースサーバ。 Movable TypeとかNucleus等を利用する場合は各種データをMySQLデータベースに保存するようになっているので、ここではMySQLを使ったデータベースサーバを構築する。
■MySQLインストール

mysql-serverをインストール
[root@server1 ~]# yum -y install mysql-server

■MySQL設定
MySQLサーバーの文字コードとMySQLクライアントの文字コードをUTF-8にする

[root@server1 ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set = utf8   ← 追加
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
最終行に追加
[mysql]
default-character-set = utf8

■MySQL起動

MySQLの起動
[root@server1 ~]# /etc/init.d/mysqld start
MySQL データベースを初期化中:  Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h server1.yokensaka.com password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
[  OK  ]
mysqld を起動中:                                           [  OK  ]

■MySQL自動起動設定

MySQLの自動起動設定
[root@server1 ~]# chkconfig mysqld on
MySQLの自動起動設定確認
[root@server1 ~]# chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
           ランレベル2~5がオンの状態であることを確認

■rootユーザへのパスワード設定
MySQLのrootユーザにはデフォルトではパスワードが設定されていないため、安全のためにパスワードを設定。

MySQLサーバーへrootユーザでログイン
[root@server1 ~]# mysql -u root
[root@server1 higo]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
登録済ユーザ及びパスワードの確認
mysql> select user,host,password from mysql.user;
+------+-----------------------+----------+
| user | host                  | password |
+------+-----------------------+----------+
| root | localhost             |          | ← パスワードが設定されていない
| root | server1.yokensaka.com |          | ← パスワードが設定されていない
| root | 127.0.0.1             |          |
|      | localhost             |          |
|      | server1.yokensaka.com |          |
+------+-----------------------+----------+
5 rows in set (0.00 sec)
localhostのrootユーザにパスワードを設定
mysql> set password for root@localhost=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
server1.yokensaka.comのrootユーザにパスワードを設定
mysql> set password for root@server1.yokensaka.com=password('パスワード');
Query OK, 0 rows affected (0.00 sec)
mysql> exit ← いったんログアウト
Bye
rootユーザでパスワードありでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
登録済ユーザ及びパスワードの確認
mysql> select user,host,password from mysql.user;
+------+-----------------------+-------------------------------------------+
| user | host                  | password                                  |
+------+-----------------------+-------------------------------------------+
| root | localhost             | *4202C8EE0ABB7FD2186E1CB0180B55C5272A8556 | ← パスワードが設定された
| root | server1.yokensaka.com | *4202C8EE0ABB7FD2186E1CB0180B55C5272A8556 | ← パスワードが設定された
| root | 127.0.0.1             |                                           |
|      | localhost             |                                           |
|      | server1.yokensaka.com |                                           |
+------+-----------------------+-------------------------------------------+
5 rows in set (0.00 sec)
mysql> exit ← いったんログアウト
Bye

※ドメインにハイフン(-)が入ってる場合はドメインをシングルクォーテーションで囲む
■匿名ユーザの削除
MySQLには匿名ユーザがデフォルトで登録されており、ユーザ名とパスワードなしでMySQLサーバーへログインできてしまうため、安全のためにこのユーザを削除。

rootユーザでパスワードありでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
登録ユーザの確認
mysql> select user,host from mysql.user;
+------+-----------------------+
| user | host                  |
+------+-----------------------+
| root | 127.0.0.1             |
|      | localhost             |
| root | localhost             |
|      | server1.yokensaka.com |
| root | server1.yokensaka.com |
+------+-----------------------+
5 rows in set (0.00 sec)
匿名ユーザを削除
mysql> delete from mysql.user where user='';
Query OK, 2 rows affected (0.00 sec)
匿名ユーザが削除されてるか確認
mysql> select user,host from mysql.user;
+------+-----------------------+
| user | host                  |
+------+-----------------------+
| root | 127.0.0.1             |
| root | localhost             |
| root | server1.yokensaka.com |
+------+-----------------------+
3 rows in set (0.01 sec)
mysql> exit ← いったんログアウト
Bye
匿名ユーザでMySQLサーバーへログインできないことを確認
[root@server1 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

■testデータベースの削除
MySQLにはデフォルトでtestという空のデータベースが登録されているが、不要のため、このデータベースを削除。

rootユーザでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
登録データベースを確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)
testデータベースを削除
mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)
testデータベースが削除されてるか確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)
mysql> exit ← ログアウト
Bye

■MySQL確認

rootでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
takaデータベースへの全てのアクセス権限を持った、新規ユーザtakaを登録
mysql> grant all privileges on taka.* to taka@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.00 sec)
mysql> select user from mysql.user where user='taka'; ← takaユーザ登録確認
+--------+
| user   |
+--------+
| taka   |
+--------+
1 row in set (0.00 sec)
mysql> exit ← ログアウト
Bye
takaユーザでMySQLサーバーへログイン
[root@server1 ~]# mysql -u taka -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database taka; ← takaデータベース作成
Query OK, 1 row affected (0.00 sec)
mysql> show databases; ← データベース作成確認
+--------------------+
| Database           |
+--------------------+
| information_schema |
| taka               |
+--------------------+
2 rows in set (0.00 sec)
mysql> use taka ← takaデータベースへ接続
Database changed
mysql> create table taka(num int, name varchar(50)); ← takaテーブル作成
Query OK, 0 rows affected (0.01 sec)
mysql> show tables; ← テーブル作成確認
+----------------+
| Tables_in_test |
+----------------+
| taka           |
+----------------+
1 row in set (0.00 sec)
mysql> insert into taka values(1,'データAB'); ← takaテーブルへデータ登録
Query OK, 1 row affected (0.00 sec)
mysql> select * from taka; ← データ登録確認
+------+----------+
| num  | name     |
+------+----------+
|    1 | データAB |
+------+----------+
1 row in set (0.01 sec)
mysql> update taka set name='データAB'; ← takaテーブル内データ更新
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0
mysql> select * from taka; ← データ更新確認
+------+----------+
| num  | name     |
+------+----------+
|    1 | データAB |
+------+----------+
1 row in set (0.00 sec)
mysql> delete from taka where num=1; ← takaテーブル内データ削除
Query OK, 1 row affected (0.02 sec)
mysql> select * from taka; ← データ削除確認
Empty set (0.00 sec)
mysql> drop table taka; ← testテーブル削除
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; ← テーブル削除確認
Empty set (0.00 sec)
mysql> drop database taka; ← データベースtaka削除
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ← データベース削除確認
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
mysql> exit ← ログアウト
Bye
rootでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
takaユーザから全てのデータベースへのアクセス権限を剥奪
mysql> revoke all privileges on *.* from taka@localhost;
Query OK, 0 rows affected (0.00 sec)
takaユーザ削除
mysql> delete from mysql.user where user='taka' and host='localhost';
Query OK, 1 row affected (0.03 sec)
takaユーザ削除確認
mysql> select user from mysql.user where user='taka';
Empty set (0.00 sec)
mysql> flush privileges; ← takaユーザの削除をMySQLサーバーへ反映
Query OK, 0 rows affected (0.02 sec)
mysql> exit ← ログアウト
Bye

■文字セットの確認
MySQLを使ったブログ等が文字化けしたときは、以下のコマンドでサーバーが持っている文字セットとクライアントが持っている文字セットを確認できる。

[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |
| character_set_connection | utf8   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | utf8   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.00 sec)

クライアント側の設定が反映される項目
character_set_client
character_set_connection
character_set_results
サーバー側の設定が反映される項目
character_set_database
character_set_server
■Movable Typeの初期設定
Movable Typeのブログデータを保存するデータベースの初期設定を行います。

rootでMySQLサーバーへログイン
[root@server1 ~]# mysql -u root -pパスワード
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.52 Source distribution
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
「mt」というデータベースを作成
mysql> create database mt;
Query OK, 1 row affected (0.01 sec)
管理DBをデフォルト(管理をカレント)
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
「mt」というデータベースにログインするユーザー名とパスワードを設定
mysql> grant usage on mt.* to higo@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.00 sec)
「mt」というデータベースに対してすべての権限を「higo」に許す
mysql> grant all on mt.* to higo@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> exit ← ログアウト
Bye