さくらのVPS を改めて使いはじめる 5 – MySQL をセットアップする

2012年4月19日 9 開発 ,

さくらのVPS(v3) 2GB プランへの環境構築メモ 5。今回は MySQL をセットアップする。

もくじ

MySQL のインストール

まずは MySQL がインストールされているか調べる。

$ rpm -qa mysql-server

ありません。というわけで、改めてインストールする。今回も Apache の時 と同様に yum から入れる。

$ sudo yum install mysql-server

インストールしたらバージョンを確認しておく。

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.61, for redhat-linux-gnu (x86_64) using readline 5.1

yum からだと 5.1.61 になるようだ。現在の最新は 5.5.23 なので、系がひとつ古い。とはいえ、この VPS で利用する予定の WordPress 3.3 と Redmine 1.4 は MySQL 5.0 以上なら動くので、とりあえずよしとする。

インストールできたので、次は初期設定をおこなってゆく。

文字コードの設定

MySQL の文字コードを設定する。

設定ファイルは /etc/my.cnf となる。ユーザー HOME の backup ディレクトリへバックアップを取ってから、vi で開く。

$ cd
$ cp /etc/my.cnf $HOME/backup
$ sudo 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

# character-set
default-character-set=utf8
skip-character-set-client-handshake

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

9 行目で既定の文字コードを UTF-8 に、10 行目でクライアントの文字コードを無視するように設定している。16 行目からは機能ごとの文字コード設定となる。

サービス登録と起動

サーバー OS が起動した時、MySQL も自動起動されるようにする。

まずは現状を確認。chkconfig コマンドで MySQL の起動情報を表示する。

$ chkconfig --list mysqld
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

すべて off になっているので、改めて設定したあと、再び起動情報を確認する。

$ sudo chkconfig mysqld on
$ chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

ランレベル 2 ~ 5 が on になったので、OK。これで自動起動は有効になったが、まだ MySQL 自体を動かしていないので、起動する。

$ sudo service mysqld start
MySQL データベースを初期化中:  Installing MySQL system tables...
... 中略 ...
mysqld を起動中:                                           [  OK  ]

無事、動きだした。

初期状態の MySQL は、全権限をもつ root ユーザーにパスワードが設定されていないため、非常に危険である。というわけで、すぐに対策する。

root ユーザーにパスワードを設定

MySQL のユーザーにパスワードを設定するには、mysqladmin コマンドを使用する。root ユーザーを対象とする場合、以下のようにする。

$ sudo mysqladmin -u root password 'パスワード'

正しく設定されたことを確認するために、root でログインしてみる。コマンドは mysql -u root -p となる。 -u でユーザー-p でパスワードの使用を指定する。パスワード入力を求められたら何も入力せずに Enter を押す。

$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

エラーになったので、パスワードが設定されていることがわかる。今度はパスワードを入力する。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.61 Source distribution

Copyright (c) 2000, 2011, 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>

パスワードが通り、root ユーザーでログインできた。

プロンプトが mysql> になっているときは、MySQL のコマンドラインツールが起動している。この状態では通常のシェルコマンドを受け付けないので注意する。

抜ける場合は quit と入力して Enter キーを押すか、Ctrl + D キーを押す。するとプロンプトに Bye と表示されてシェルに戻れる。

コマンドラインツールは専用コマンドと SQL の直接実行をサポートしている。操作については以下を参照のこと。

コマンドラインツールが苦手なら、MySQL Workbench という GUI ツールも利用できる。

ただし、この記事でおこなう作業ではコマンドラインツールを利用する。GUI を使った説明は大変すぎる ( スクリーンショットだらけになる ) ので。

不要なユーザーとデータベースの削除

さきほど root ユーザーにパスワードを設定したが、初期状態の MySQL には不要なユーザーやデータベースも含まれているので、これらも消しておく。

まず、どのようなユーザーが存在するのか確認する。mysql のコマンドラインツールを起動して、user テーブルの内容を表示する。

$ mysql -u root -p mysql
mysql> SELECT user, password, host FROM user;
+------+------------------+-----------------------+
| user | password         | host                  |
+------+------------------+-----------------------+
| root | XXXXXXXXXXXXXXXX | localhost             |
| root |                  | wwwXXXXX.sakura.ne.jp |
| root |                  | 127.0.0.1             |
|      |                  | localhost             |
|      |                  | wwwXXXXX.sakura.ne.jp |
+------+------------------+-----------------------+
5 rows in set (0.00 sec)

上記のうち、パスワードを設定したユーザーは root@localhost となる。他のユーザーは要らない

出力された内容を見ると、root@localhost 以外の root が 2 名、匿名ユーザーが 2 名、登録されている。以下の SQL を発行して、これらのユーザーを消す。

mysql> DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );
Query OK, 4 rows affected (0.00 sec)

削除されたことを確認するため、user テーブルの内容を表示してみる。

mysql> SELECT user, password, host FROM user;
+------+-------------------------------------------+-----------+
| user | password                                  | host      |
+------+-------------------------------------------+-----------+
| root | XXXXXXXXXXXXXXXX                          | localhost |
+------+-------------------------------------------+-----------+
1 row in set (0.00 sec)

root@localhost しかいないので、成功。

次は不要なデータベースを削除する。まずはデータベースを確認。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

3 つのデータベースがある。information_schema と mysql は必須で、test が不要。というわけで、以下のように消す。

mysql> DROP DATABASE test;
Query OK, 0 rows affected (0.00 sec)

消えたことを確認する。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

ばっちり消えてる。さよなら test。もう会うことはないだろう。

…今回はここまで。次回は 独自ドメインの取得と設定について書く。


TRACKBACKS

COMMENTS

  • maigoofy
    2012年9月11日 4:04 PM 返信

    こんにちは。いつも参考にさせて頂いてます。勝手な質問で申し訳ないのですが、もし、Apacheのhttpd.confのいい設定方法を御存知でしたらお教えください。いろいろと調べたのですが、さっぱり検討がつきません。例えば、さくらのVPS 2GBと4GBではどうなるのでしょう。

    以下はデフォルト

    StartServers 8
    MinSpareServers 5
    MaxSpareServers 20
    ServerLimit 256
    MaxClients 256
    MaxRequestsPerChild 4000

    お時間がある時に教えて頂けたら感謝いたします。

    maigoofy

  • 2012年9月17日 6:11 PM 返信

    maigoofy さん、こんばんは。返答が遅くなってしまい、申し訳ありません。

    設定値については、サーバーのスペックだけでなく、アクセス状況なども加味して決めるのが一般的です。デフォルト値で運用していて問題がなければ、そのままでよいともいえます。

    私の場合、prefork.c はデフォルト、worker.c については StartServers が 4、MaxClients を 300 として残りはデフォルトとしています。これは単に、デフォルト値より気持ち多めとしているだけですが、思い切って増やしてもよいのかもしれません。

    他にも KeepAlive 系をいじったかもしれませんが、デフォルト値が思い出せず。ただ、前述のように問題がない限りはこのまま運用する予定です。

    Apach のチューニングにおいて、さまざまな設定が登場しますが、それらの現実的な意味について知りたい場合は以下の書籍が参考になると思います。

    Amazon.co.jp: Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集:
    http://www.amazon.co.jp/dp/4873113814

    また、すこし前のものになりますが、以下のブログ記事もよいですね。

    pound と apache をバランスよくチューニングする必要性について :: drk7jp
    http://www.drk7.jp/MT/archives/001593.html

    Apache2 – worker MPM のプロセス&スレッド数のチューニング :: drk7jp
    http://www.drk7.jp/MT/archives/001594.html

    個人的には Apache と nginx ( リバースプロキシとして利用 ) を組み合わせてみるとか、Web アプリ側のキャッシュ機能 ( WordPress なら Super Chache など ) を利用するほうが、Apache 自体をいじるより即物的に効果を得られるのでは、と考えています。

REPLY

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です