mysql, ubuntu: mysql_install_db が失敗する(解決)

Ubuntu Server 10.04 LTS に apt-get で MySQL 5.1 をインストールし、mysqld_multi で複数のインスタンスを動かそうとしました。

第2の mysqld は 3307 番ポートを使用し、データディレクトリは /opt/var/lib/mysql とします。

最初に行うことはシステムデータの初期化です。普通は次のコマンドで動きます:


mysql_install_db --no-defaults --user=mysql --datadir=/opt/var/lib/mysql

しかし、次のようなエラーメッセージを吐いて止まってしましました。


Installing MySQL system tables...
110618 17:46:23 [Warning] Can't create test file /opt/var/lib/mysql/xxx.lower-test
110618 17:46:23 [Warning] Can't create test file /opt/var/lib/mysql/xxx.lower-test
ERROR: 1005 Can't create table 'db' (errno: 13)
110618 17:46:23 [ERROR] Aborting

110618 17:46:23 [Note] /usr/sbin/mysqld: Shutdown complete
(以下略)

Google検索で見つけた次のページに解決策が書いてありました。

要するに、Ubuntu で採用されているセキュリティモジュール AppArmor により mysqld がアクセスできるディレクトリやファイルが制限されているため、/opt/var/lib/mysql にファイルを書き込めなかったのが原因でした。

まず、/etc/apparmor.d/usr.sbin.mysqld を開いて、次のような記述を追加します:


/opt/var/lib/mysql/ r,
/opt/var/lib/mysql/** rwk,
/var/log/mysql/access.3307.log rw,
/var/log/mysql/error.3307.log rw,
/var/run/mysqld/mysqld.3307.pid w,
/var/run/mysqld/mysqld.3307.sock w,

ログファイルや pid, sock ファイルに対してもパーミッションを与える点に注意が必要です。ファイル名などは適宜読み替えてください。

続いて、AppArmor の設定を読み直します。


/etc/init.d/apparmor reload

これで mysql_install_db が成功するはずです。