CentOS6にmysql5.5をインストールする、ついでに初期設定

細かい部分まで書きすぎて記事がそうとう長くなってしまった。でも、作業とそれに関わる解説まで一通りちゃんと書けたように思う。枠で囲んであるコマンドだけ読み拾っていけば、インストール作業と初期設定作業はできるし、時間も実際はそんなにかからないと思う。


仕事でも同じようにCentOSmysqlをインストールする作業を何回もしてきた。mysqlはサーバのことを勉強や仕事にする前から使っている。しかし、今回はバージョンが最新という違いがある。今まではCentOS5系であったのでyumでインストールするとmysql5.0系にだった。それが嫌でバージョンをアップさせたものでも、mysql5.1をrpmでインストールするものだった。一時はmysqlがどこに買収されるかという前の話でmysql6.0をwindowsに自分の練習用としてインストールしたが全く使わないこともあった。


今回は安定している最新バージョンのmysql5.5系を使おうと思っている。mysqlを使うシステムとして使う予定のwordpressCakePHPがmysql5.0以上推奨なのでそこも大丈夫だと思う。会社で開発したシステムは開発バージョンがmysql5.0系なのでそれ以上のバージョンで動くかどうかの保証もない。多分動くとは思うのだが、php5.1で開発していたものをphp5.3にしたら動かないこともあったので、確実とはいえない。なので、なくなく中途半端なバージョンを使ったりもしている。しかし、今回は完全に自分のサーバであり、自分の開発するシステムなので好きなバージョンを使えるので最新版を使おうということにした。
一応CentOS6という初めてバージョンのOSでもあるので、パッケージが更新されていきなりmysql5.5がyumでインストールできるかも、なんていう期待をこめてバージョンを確認してみた。インストール前にパッケージのバージョンなどを確認したい時のコマンド。

# yum info mysql

結果をメモしていないので忘れてしまったけれど、こういう感じで表示される。ちなみにこれは昔別のサーバでインストールしたmysqlの情報。

Name       : mysql
Arch       : i386
Version    : 5.0.77
Release    : 3.el5
Size       : 7.9 M
Repo       : installed
Summary    : MySQL のクライアントプログラムと共有ライブラリ。
URL        : http://www.mysql.com
License    : GPLv2 with exceptions
Description: MySQL is a multi-user, multi-threaded SQL database server. MySQL is
           : a client/server implementation consisting of a server daemon
           : (mysqld) and many different client programs and libraries. The base
           : package contains the MySQL client programs, the client shared
           : libraries, and generic MySQL files.

本来はインストールしていない状態なのでRepoの部分がnot installedとかになるはずと思う。そして、Versionの部分に注目しないといけないのだけど、mysql5.0.77である。これは昔別サーバにインストールしたやつなのでバージョンが違っていてmysql5.1系だったような気がしないでもないけれど、僕が希望する最新のmysql5.5系ではないので、普通の状態でyumでのインストールという方法ではできないことがわかった。


ここからネットを使ってちょっと調べた。僕が今まで使っていたrpmでインストールという方法ならばある程度やり方が分かっているので、これに近い方法を探していたのだけど、なかなかない。1度失敗したremiやrpmforgeというリポジトリを使う方法が主流のようだ。これが失敗になったのは、最新バージョンすぎて開発環境と違ってシステムが動かなかったからだ。だからリポジトリを使う方法がダメという意味ではない。むしろ、今回のように最新バージョンを使うという目的であれば、この方法の方がずっといい気がしている。実験もかねてリポジトリを使う方法を試してみることにした。


まずはリポジトリ情報を取得。

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

前はwgetでファイルを取得してからインストールしていたのだけど、直接アドレスを指定してインストールできることを知った。ファイルがサーバに残らないので容量をくわないという意味ではいいかも。大した容量ではないので、ファイル取得しておいて他のサーバでもコピーして使うとか、まぁ勉強とかに使えるのかも。
ではインストール作業に入るとみせかけて、まずはremiでのmysql関連のパッケージに何があるかを確認。

#yum --enablerepo=remi search mysql

結果はここには載せないけれど、かなりたくさんあるみたい。その中から今回インストールパッケージ情報を一応確認してみる。

# yum --enablerepo=remi info mysql-server
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * epel: ftp.riken.jp
 * remi: remi-mirror.dedipower.com
Installed Packages
Name        : mysql-server
Arch        : x86_64
Version     : 5.5.23
Release     : 1.el6.remi
Size        : 45 M
Repo        : installed
From repo   : remi
Summary     : The MySQL server and related files
URL         : http://www.mysql.com
License     : GPLv2 with exceptions
Description : MySQL is a multi-user, multi-threaded SQL database server. MySQL
            : is a client/server implementation consisting of a server daemon
            : (mysqld) and many different client programs and libraries. This
            : package contains the MySQL server and some accompanying files and
            : directories.

記録を残しておいてなかったので、インストール後に同じコマンドをうった結果。Versionが新しい5.5.23になっているのが分かる。
ではここから改めてインスールコマンド。

yum --enablerepo=remi install mysql mysql-server mysql-devel mysql-libs

パッケージ的にはこの4つくらいあればとりあえず大丈夫かなと思う。それぞれのちゃんとした役割が分かっていないけれど、開発的にはこのくらいあれば十分かと。足りないパッケージがあれば追加でインストールしていく方向で。インストール作業はまぁいろいろ勝手にやってくれる。途中でインストールしてもいいか?的なことを質問されるのでyで答えておく。
エラーがでなければこれでインストール完了


ここからは初期設定作業。いきなりmysqlコマンドをうってみた。同じlinuxのOSであるdebianのaputitudeというyumに似たものでインストールすると、インストールした段階でいきなりmysqlが起動していることもあるから。

# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

しかし、このエラーがでるということは動いていないようです。このコマンドはmysqlが起動していない時でもでることがあるので注意。
ではmysqlの起動をするコマンド。

# /etc/init.d/mysqld start
Initializing MySQL database:  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 www2432uf.sakura.ne.jp 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  ]
Starting mysqld:                                           [  OK  ]

mysql用のデータベースを作成したとか、パスワードを新しく設定しなさいとかいろいろメッセージが表示されて、最終的にmysqlは無事起動したのでOKとなっている。これはバッドノウハウでもあるのだけど、mysqlをインストールしたら設定ファイルをいろいろ変更する前に、1度起動させてしまった方がいい。もし設定ファイルで構文間違いとか項目を間違えたりすると、最初にmysql用のシステムデータベースがうまく作成できなくて、設定ファイルを変更して直したあとも起動がうまくできないことがある。そうするとどこかのファイルを削除するとかインストールしなおした方が直すのが早いなどめんどくさいことになる可能性が高い。なのでとりあえず1度起動してしまって、システムデータベースだけは作成させたほうがいい。
1度起動が確認できたところで、設定ファイルを編集して、いろいろ追加。

# vi /etc/my.cnf

[mysqld]
skip-character-set-client-handshake
default-character-set=utf8

log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 14

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

元から設定ファイルにいろいろかかれているとは思うのだけど、[]で囲まれているのがセクションとよばれている。mysqldセクションは元々存在するので、その終わりの方に追加すればいい。mysqldumpとmysqlはセクションから追加する。で項目の説明だけど、character-set系のものは文字コード関連。文字コードを統一することで後々の悩みがかなり減ると思う。log_binというのはバイナリログを出力するファイル、ディレクトリの設定。バイナリログはレプリケーションという機能やもしもデータベースが壊れた時に復旧に使ったりする。expire_logs_daysはバイナリログを何日前まで残しておくかという設定。放って置くとバイナリログはどこまでも溜まってしまうので昔のものは消す必要がある。それを自動でやってくれる設定で、14というの14日分残しておくという意味。
バイナリログを出力する設定をしたので、出力するディレクトリを作成しておく。

# mkdir /var/log/mysql
# chown mysql:mysql /var/log/mysql

mkdirといいうのはディレクトリを作成するコマンド。chownというはディレクトリやファイルの所有者を変更するコマンド。これで/var/log/mysqlというディレクトリの所有者をmysqlというユーザにして、所有グループもmysqlというグループに変更して、mysqlがファイルを書き込めるようにする。
そして。設定ファイルを変更したらmysqlを再起動する

# /etc/init.d/mysqld restart

普通はこれで完了となる予定だった。

Starting mysqld:                                           [  OK  ]

となれば起動成功だったのだけど、失敗しました。失敗したらエラーログを確認します。エラーログは/var/log/mysqld.logです。

[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'

今回のエラーはこれだった。default-character-setという項目が設定ファイルで使えないようだ。そういえばよく読んでいるmysqlに詳しい人のブログでmysql5.5からはmysqldセクションでdefault-character-setというのが使えなくなったのを思い出した。さっそく新しい文字コードの指定の仕方を調べて設定する

[mysqld]
character-set-server=utf8

mysqldセクションのみの変更でいいみたい。設定ファイルを変更したので、またmysqlの再起動

# /etc/init.d/mysqld restart

今度はちゃんと起動できた。


続いてサーバがもしも落ちてしまい、サーバを起動させた時にmysqlが自動で起動するようにする。
そのためにまずは現在の設定を確認する。

# chkconfig --list | grep mysql
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

細かい説明は難しいけど、全部がoffになっているので自動起動はしない。そして、自動起動設定をオンにする。

# chkconfig mysqld on

再度確認

# chkconfig --list | grep mysql
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

2,3,4,5がonに変わった。普通であればこれで自動起動するようになっている。


初期設定として最後にしておいた方がいいこと。セキュリティ面。mysqlを最初に起動したときも忠告されていたのだけど、rootユーザーにパスワードを設定する。ここからはmysqlにログインしてから作業する。
最初はrootユーザでもパスワードが設定されていないので、パスワードなしでログインする。

# mysql -u root -p
Enter password:

Enter passwordに関しては何も入力しないでエンターを押す。
続いてrootユーザにパスワードを設定する。rootユーザというのは実際にはroot@localhostというのが正式なユーザ名になる

mysql> SET PASSWORD FOR root@localhost = PASSWORD('*********');

PASSWORD('*********')部分には設定したいパスワードを入力する。これでexitコマンドで1度ログアウトしてから、再度パスワードなしでログインしようとすると、エラーではじかれるはず。パスワードを入力してログインしようとして、ちゃんとログインできれば成功。
あとはおまけだけど、testデータベースってのは使わないと思うので削除してしまう。これもmysqlにログインしているときの作業。

mysql> DROP DATABASE test;


長かったけど、これでインストールから初期設定まで一通り終わり!!