アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

さくらのVPS を使いはじめる 5 – MySQL のインストールと初期設定

September 18, 2010開発MySQL, さくらのVPS

さくらのVPS への作業メモ 5。今回は MySQL のインストールと初期設定をおこなう。

CentOS の環境を日本語にする

今回の内容とはあまり関係ないのだが、さくらのVPS の CentOS は初期状態が英語環境なので日本語にしておく。この設定は /etc/sysconfig/i18n に指定されているので vi で開く。

$ sudo vi /etc/sysconfig/i18n

すると以下のような内容になっているので

LANG="C"
SYSFONT="latarcyrheb-sun16"

LANG の内容を変更する。

LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

編集が完了したら保存して再ログインするとメッセージが日本語化される。例えば ls -l を実行したときの内容を比べると初期状態では

$ ls -l
total 36
-rw-r--r-- 1 root root 33726  9月 15 22:30 httpd.conf

となっているが日本語化されると以下のように「total」という表記が「合計」へ変わる。

$ ls -l
合計 36
-rw-r--r-- 1 root root 33726  9月 15 22:30 httpd.conf

日本語版のマニュアルが用意されているコマンドなら man コマンドによる表示も日本語化されるので便利だと思う。

MySQL のインストール

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

$ rpm -qa mysql-server
$

ありません。というわけでインストール。MySQL の公式サイト](http://www.mysql.com/downloads/mysql/)を見ると最新版は 5.1.50 のようだが、手軽なので Apache のときと同様に今回も yum を利用。MySQL のパッケージは mysql-server となる。

$ sudo yum -y install mysql-server
... 中略 ...
Installed:
  mysql-server.x86_64 0:5.0.77-4.el5_5.3

Dependency Installed:
  mysql.x86_64 0:5.0.77-4.el5_5.3
  perl-DBD-MySQL.x86_64 0:3.0007-2.el5
  perl-DBI.x86_64 0:1.52-2.el5

Complete!

前に yum を利用すると依存関係のあるパッケージを自動的にインストールしてくれると書いたが、それらは Dependency Installed として出力される。これをメモしておくと最新版を自前でインストールするときの参考になるため、今回から記録することにした。

インストールされたことを念のために確認。

$ rpm -qa mysql-server
mysql-server-5.0.77-4.el5_5.3

ばっちり。バージョンは 5.0.77 になるようだ。次は初期設定をおこなう。

文字コード

MySQL の文字コードを設定。これは /etc/my.cnf というファイルに設定されているのでユーザー HOME にバックアップを取ってから vi で開く。

$ cd $HOME
$ cp /etc/my.cnf .
$ sudo vi /etc/my.cnf

開いたファイルを以下のように編集。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

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

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[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

マルチバイト文字 (日本語など) データも入れることを考慮して文字コード関連を UTF-8 にしている。EUC-JP や Shift_JIS にすることも可能だが、わざわざ設定する意味はないと思う。character-set とコメントしているあたりで既定の文字コードを UTF-8 にしてクライアントの文字コードは無視するようにした。後半は機能ごとの文字コード設定となる。

サービス登録と起動

MySQL も Apache のように自動起動してほしいため chkconfig で設定する。まずは現状を確認。

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

初期状態では自動起動になっていないようなので設定する。

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

これで OK。自動起動を設定したものの、現在の MySQL はまだ動いていないので起動。

$ sudo /etc/rc.d/init.d/mysqld start
MySQL データベースを初期化中:  Installing MySQL system tables...
OK
Filling help tables...
OK

... 中略 ...
MySQL を起動中:                                            [  OK  ]

ちなみに sudo や root 権限なしで実行するとエラーになる。

MySQL の root ユーザーにパスワードを設定する

まずはデータベース操作の全権限を持つ 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.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

ログインできた。

ちなみにプロンプトが mysql> となっているときは MySQL コマンドラインツールの操作になり通常のシェル コマンドは受け付けないので注意する。この状態から抜ける場合は quit と打ち込んで Enter を押すか Ctrl + D を押す。するとプロンプトに Bye と表示されて元のシェルに戻れる。

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

コマンドが苦手なら MySQL Workbench からも操作できるが今回の作業ではコマンドラインツールを利用する。GUI を使った説明は大変すぎる (スクリーンショットだらけになる) ので。

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

初期状態の MySQL には、いくつかの既定ユーザーとデータベースが設定されているが root 以外は不要なので消しておく。root 権限が強力すぎると思ったときは必要に応じてユーザーを追加する。

まずは不要なユーザーを削除。これは mysql というデータベースに格納されているので内容を確認してみる。

$ 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 以外のユーザーが 2 名、匿名のユーザーが 2 名、登録されている。以下の SQL を発行して消す。

DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );

ユーザーの一覧を出力して確認。

mysql> DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );
Query OK, 4 rows affected (0.01 sec)
mysql> SELECT user, password, host FROM user;
+------+------------------+-----------+
| user | password         | host      |
+------+------------------+-----------+
| root | XXXXXXXXXXXXXXXX | localhost |
+------+------------------+-----------+
1 row in set (0.01 sec)

ばっちり。今度は不要なデータベースを消す。まずはどんなものが定義されているかを出力。

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

3 つのデータベースがあり test が不要。これは SQL の練習目的で用意されているものだと思うのだが利用する機会はないので以下のように消す。

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。もう会うことはないだろう。

...今回はここまで。次回は Ruby 関連のインストールをおこなう。

Comments from WordPress

  • kimikimi 2012-01-01T14:10:25Z

    初めましてkimikimiと申します。

    こちらのサイトを読みながらmysqlの文字コードの設定をしておりました。

    しかしmysqlのバージョンが5.0であることをちゃんと確認せずに読んでしまっていました。

    自分のインストールしたmysqlのバージョンは5.5.19で、default-character-setのところをcharacter-set-serverと書き換えないと"unknown variable 'default-character-set=utf8'"というエラーを吐きます。

    参考→http://shanbenxun.blogspot.com/2011/03/error-usrsbinmysqld-unknown-variable.html

    アカベコさんの記事は過去記事の修正もところどころ行われているようなので、

    すでにご存じだったかもしれませんが、お知らせします。

    ちなみにおかげでちゃんとmysqlの設定できました。