First Creation 2007/11/01
Last Update 2007/02/05
Bloody Mary > Technical Notes > MySQL のインストール

MySQL のインストール

Zaurus で MySQL を稼動させたいと考えた。

MySQL 等の daemon ( メモリに常駐してバックグラウンドで稼動するプログラム ) は、下手に root 権限で動かしていた場合、セキュリティホールをつかれてデーモンを乗っ取られたときの被害が尋常ではない。

仮にその状態に陥った場合、サーバ自体が乗っ取られたような状態に陥ってしまう。

従ってデーモンを動かすときは、最小限の権限を持つユーザーで稼動させなければならない・・・というようなことがいろいろなページに書いてある。

なので、安全のために MySQL 用のユーザーを作って稼動させてみようと思う。

インストール前の準備

Zaurus に MySQL を入れるだけなら、MySQL の ipk ファイルをダウンロードしてきて、そのままインストールしてしまえばいい。だが、今回はセキュリティを考えて、 MySQL 用のユーザを作って、MySQL ユーザ権限で動かす。その手順は以下の通りである。

  1. Zaurus に mysql というユーザを追加する
  2. MySQL をインストールする
  3. /home/etc/mysql/my.cnf の設定変更(mysql というユーザで動かすための変更)

1. Zaurus にユーザーとグループを追加

1-1. adduser コマンド不具合?

MySQL が使うユーザーとグループを追加したいのだが、

# adduser mysql

とやってもエラーになってしまう。仕方がないので、

を直接書き換えて設定することにした。

その後、passwd コマンドでパスワードを設定する必要があるだろう。

なお、上記 3 つのパスはすべてファイルである。passwd のような実行コマンドじゃない。passwd コマンドは、 /usr/bin か /usr/sbin とかにある ( うろ覚え )。 だいぶ慣れたが、Linux のここら辺が紛らわしい・・・

1-2. /etc/passwd の編集
# vi /etc/passwd
で passwd ファイルを開いて、以下の一行を追加する。
mysql:x:501:501:MySQL User:/home/mysql:/bin/sh
1-3. /etc/shadow の編集
# vi /etc/shadow
で shadow ファイルを開いて以下の一行を追加する。
mysql:*:10933:0:99999:7:::
1-4. /etc/group の編集
# vi /etc/group
でファイルを開いて以下の一行を追加する。
mysql:x:501
1-5. パスワードの設定
# passwd mysql
Enter new UNIX password:パスワード入力
Retype new UNIX password:パスワード入力

これで mysql というユーザーが追加されたことになる。なお、このユーザーは mysql というグループに属している。

2. MySQL のインストール

2-1. MySQL のインストール

mysql_3.22.32-2_arm.ipk (フルパッケージ版)からインストールを行った。

2-2. ディレクトリの所有者とグループを mysql に
 # chown -R mysql:mysql /var/lib/mysql/
2-3. mysqlstart で エラー
# mysqlstart

とやったところ、「Starting MySQL database server: mysqld...failed.」のようなエラーが出てしまった。

何故だ? かなり悩む。google パワーを消費したところ、所有者を daemon にすると書かれてある。

 # chown -R daemon:mysql /var/lib/mysql/

エラーはでない。うまく動いたようだ。所有者は daemon:mysql (ユーザー:グループ)。

なんのためにユーザーとグループを追加したのか・・・それに、daemo:mysql だといまいち美しくない。とりあえず、この問題は後で解決しよう。

後日談:

Zaurus ではない Linux PC で MySQL をインストールした。最初はうまく動いたが、再起動したら動かなくなった。/tmp/mysql.sock がないとか起こられてしまう。設定を変更してみたり、空ファイルを作って権限を与えたりしたがうまく動かず、結局アンインストール、再インストールを何度か繰り返してようやく稼動させた。

そのときに学んだのが、mysqld を mysql ユーザーで稼動させるには変なプロセスが必要だということだ。たぶん、インストール時のオプションとかでさっくり稼動させることができるのだろうが、素人にはそんなことは分からない。四苦八苦しながらやったのが次の方法。

ソースをコンパイル&インストール。/usr/local/mysql の権限を mysql:mysql に。最初に mysqld を root で動かすと、/usr/local/mysql の中にログフォルダ?ができるので、いったん mysqld をとめて、そのフォルダの権限を mysql:mysql に。その状態で、mysqld を mysql ユーザーで稼動させれば問題なく動いた。

問題を解決するために丸 2日、インストールとアンインストールを誇張なしに 10回以上繰り返した。インストールに関してならプロだ。いや、セミプロだ。

3. パスワードの設定

3-1. MySQL にログインする
% mysql -u root -p 

パスワードを聞かれるので、そのまま Enter。

mysql>

上記のようなコマンド待ちの状態になる。

3-2. 不要なユーザーの削除

とりあえず、「空」のユーザーを消して、root にパスワードを設定した。

mysql> select host,user,password from mysql.user;
mysql> delete from mysql.user where user="";
mysql> set password for root@'%'=password(hogehoge);
mysql> exit

次から「mysql -u root -p」でログインするとき、パスワードを入れる必要がある。

後日談 : /var/lib/mysql/ を mysql:mysql にして MySQL を稼動させる方法

1. my.conf の設定変更
# vi /home/etc/mysql/my.cnf
# user = daemon
user = mysql

上記の設定に変更する。

2. ディレクトリの所有者とグループを mysql に
# chown -R mysql:mysql /var/lib/mysql/
3. MySQL稼動
# /home/root/usr/bin/mysqlstart

問題なくうごいた・・・待て、問題ありだ。

# /home/root/usr/bin/mysqladmin shutdown

で MySQL を停止させようとすると、

エラー
/home/root/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user: 'root@localhost' (Using password: NO)'

エラーから推測するに、MySQL のユーザーである root で、サーバーを停止する権限がないような感じがする。Using password: NO とか出ているから、ものは試し、パスワードを入れるようにしてみた。

# /home/root/usr/bin/mysqladmin -p shutdown
Enter password: hogehoge
エラー
/home/root/usr/bin/mysqladmin: error while loading shared libraries:
/usr/lib/libmysqlclient.so.6: undefined symbol: __umodsi3

そのまま訳せばライブラリの共有ができていないとの内容だが? よけいヤバイエラーになってしまったな・・・そのファイルはちゃんと存在するし、シンボリックリンクも張られているようだ(よくは分からないが)。

ちなみに、現時点のユーザー状況はこうだ。

所属 ユーザー名 詳細
ZAURUS のユーザー mysql、daemon、root、他 /etc/passwd 左記ユーザ名はに記載されている
MySQL のユーザー root のみ mysql> select host,user,password from mysql.user; で root が表示される

だとすると、MySQL ユーザーの root に、サーバー停止の許可を与える必要があるのだろうか・・・? いや、今回の設定をするまではそんなエラーは出てこなかった。だとすると、ZAURUS ユーザーである daemon より mysql の方が権限が低そうだから、それが原因だろうか。google で検索したが、やはりライブラリ共有ができていない等の(今の私にとっては)ろくでもない回答ばかりだ。 とりあえずやれることをやってみよう。

打開策1 : 再インストール

MySQL を再インストールした。OKだった。ふ・・・

MySQL を動作させる際の極意

  1. MySQL をインストールした後に /var/lib/mysql/ の所有者を mysql:mysql に変更
  2. /home/etc/mysql/my.cnf の内容を user = mysql に変更
  3. mysqlstart で MySQL 稼動
  4. root@mysql にパスワードを設定。不要なユーザーの削除。
  5. mysqlstop で MySQL 停止(mysqladmin shutdown でもサーバは止まる)

こんなところだろうか。

通行止め 上へ 次へ