manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2

データサーバーMySQL

2010年7月13日(火) 2010年8月10日(金)更新
ホームページの内容やメールのユーザ情報の管理に従来よりMySQLというデータサーバーを使用しています。
今回もこれを使用することにして、セットアップを行います。


ホームページのデータ、メールのアカウント情報と認証制御などにデータサーバーとして従来よりMySQLを使っています。
またバックアップや最悪システム再インストールに備えMySQLのデータはディフォルトのシステムのディレクトリではなく/homeディレクトリに置いています。今回もそうする予定です。

/home/mysqlディレクトリの設定
まずはためしにインストールしたディフォルトのままmysqlを起動してみます。
#service mysqld start
管理者パスワードを登録しろとか言われますのでひとまず仮に登録し動くのを確認したら停止。
#service mysqld stop
次に/homeに所有者とグループをmysqlとしてmysqlというディレクトリをつくります。
ディフォルトの/var/lib/mysqlはmysql-STOREとでも名前を変えて(決して捨てない)、先ほど/homeに作ったmysqlを代わりにリンクします。
以上が現行サーバーで、mysqlのデータを/homeに保存するためにやっている方法。

でも多分SELinuxさんは許してくれないだろうなーと思いながら、mysqlを起動してみます。
もちろん起動に失敗し、SELinuxさんにぼろくそに怒られました。
SELinuxさんはちゃんと働いています。めでたしめでたし、などと言ってはおれません。
いちおうSELinuxさんの言うとおりに、
#restorecon -v /home/mysql
#restorecon -v /var/lib/mysql
などやってみますが、やっぱりだめです。(もっともこのセッティングの情報はSELinuxは持っていないはず。)
SELinuxをきちんと設定するか、ディフォルトの/var/lib/mysqlをデータディレクトリに使うか、はたまた別の方法を考えるかしなくてはなりません。

SELinuxの設定...見事敗退!
できることならSELinuxを設定してみましょう。
少しは設定が楽になるかとpolicycoreutils-guiをインストール。
メニュー ⇒ 管理 ⇒「SELinux Management」から起動できます。
で、しばらくいろいろとやってみたけど結局mysqldを起動できません。
おじさんわかんな〜い。 難しすぎ!
で、妥協策
バックアップや移植、場合によってはOS再インストールまで考えると、やはりデータはシステムのパーティションではなく、/homeパーティションにまとめて置いておきたいと思います。
SELinux Managementを使っていて、超妥協的に、簡単に、なんとかできそうな方法を見つけました。

設定時enforcingだとちゃんと書き込まれない場合もあるみたいなので、念のため #setenforce 0 をやっておいて、
#restorecon -v /home/mysql
#restorecon -v /var/lib/mysql (これらはすでにやってあれば不要)
さらに、SELinux Managementを起動、
Boolian ⇒ Databases の Disable SELinux protecton for mysqld daemon にチェック!
Status ⇒ Relabel on next reboot にチェック!(本当に必要かどうかはよくわからないが。)
そして再起動します。長々と設定変更をしています。

今度はどうだ?
#service mysqld start
おー、今度は無事起動しました!!
まあ、妥協的ですがSELinuxをDisableしてしまうよりはいいかと。
ちゃんとした設定がもっと簡単にできるといいんだけど。私が知らないだけかな。

日本語化
MySQLは多言語対応になっていますが、ディフォルトで日本語を扱うように設定を施します。
(そのままだとMySQLが開発されている国の言語になっているようです。)
今度のサーバーはディフォルトのエンコーディングはutf8です。

/etc/my.conf に以下を記載、あるいは追記。
[mysqld]
language = /usr/share/mysql/japanese
default-character-set = utf8
skip-character-set-client-handshake

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

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8
skip-opt

初期設定
起動したらさっそく管理者パスワードを登録します。
#mysqladmin -u root password "PASSWORD"
念のためmysqldを再起動して、mysqlコマンドでつないでみます。
#service mysqld restart
......
#mysql -u root -p
Enter password:
Welcome to the MySQL monitor. ......
......

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

mysql> quit;
Bye
ちゃんとつながり、OK。

起動設定
#chkconfig mysqld on

これでデータサーバーMySQLの基本的なところは完了なのですが、もっとも問題なのはデータの移行です。新旧のサーバーで言語エンコードがちがいます。またそのときになったら考えましょう。
あと、MySQL を管理するのに従来から使っている phpMyAdmin はどうしてもほしいところです。
そのためには http サーバーの稼動と phpMyAdmin の導入稼動が必要になります。次にこれを行っていきます。