ChocoMemo

学んだことをメモがわりにアップしていきます!

さくらVPSサーバーにMySQLをセットアップ


MySQLのインストール

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

$ rpm -qa mysql-server

ない場合は、さくらVPS初期設定 10 - Apacheのセットアップ - chocomemoと同様にyumでインストールする。 ※さくらVPS初期設定 6 - sudoの設定 - chocomemoをしていない場合は、rootでおこなう。

$ sudo yum install mysql-server

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

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

VPSサーバーで使用するWordPress3.6はMySQL5.0以上なら動くので、5.1.69ならとりあえず大丈夫。

文字コードの設定

MySQLの文字コードを設定する。 設定ファイルは/etc/my.cnfとなる。cpコマンドで日付を付けてバックアップを取ってから、viで開く。 ※YYYYMMDDに日付

$ cp /etc/my.cnf /etc/my.cnf_YYYYMMDD_default
$ 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  ]

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 17025
Server version: 5.1.69 Source distribution

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>

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

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

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

コマンドラインツールは専用コマンドとSQLの直接実行をサポートしている。操作については以下を参照のこと。 MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.9.2 mysql(コマンドラインツール)

コマンドラインツールが苦手なら、MySQL :: MySQL Workbench 6.0A5:SQL Mk-2 - フリーの汎用SQL開発ツール/ER図ツールCommon SQL Environmentの詳細情報 : Vector ソフトを探す!などのツールを使うといい。

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

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

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

$ mysql -u root -p mysql
mysql> select user,password,host from user;
+------+------------------+------------------------+
| user | password         | host                   |
+------+------------------+------------------------+
| root | xxxxxxxxxxxxxxxxx| localhost              |
| root |                  | wwwxxxxxx.sakura.ne.jp |
| root |                  | 127.0.0.1              |
|      |                  | localhost              |
|      |                  | wwwxxxxxx.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 rows 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が消えている。

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