UbuntuでMySQLのdatadirを変更する

このエントリーをはてなブックマークに追加
はてなブックマーク - UbuntuでMySQLのdatadirを変更する
Facebook にシェア
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]

DBの速度がネックで問題が生じているんだけどもはやチューニングで何とかならないレベルになったので
DBのデータ領域をSSDに移してみた。
単にコピーして動くという記憶だったんだけどエラーが出てはまったので備忘録です。

環境は下記の通り
Ubuntu 12.04.2 LTS
MySQL 5.5.31

まずはMySQLを停止してファイルをがっつりコピーします。(ssdは/mnt/ssdにマウントしていると仮定。)


# sudo service mysql stop
# cp -rp /var/lib/mysql /mnt/ssd/path/mysql

my.cnfでdatadirを変更して起動すると失敗して悲しいです。


# vim /etc/mysql/my.cnf 
#datadir                = /var/lib/mysql
datadir         = /mnt/ssd/path/mysql

# sudo service mysql start
failed

# sudo tail /var/log/mysql/error.log -f
130605 15:29:01 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130605 15:29:01 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130605 15:29:01 InnoDB: The InnoDB memory heap is disabled
130605 15:29:01 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130605 15:29:01 InnoDB: Compressed tables use zlib 1.2.3.4
130605 15:29:01 InnoDB: Initializing buffer pool, size = 128.0M
130605 15:29:01 InnoDB: Completed initialization of buffer pool
130605 15:29:01  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

原因は下記でした。
MySQLのdata_dirをシンボリックリンクに変更したらplugin.frmが無いと言われて起動できなくなる問題の対処方法 | TechRacho

下記のように設定を追加してMySQLを起動します。


# vim /etc/apparmor.d/usr.sbin.mysqld 
  /mnt/ssd/path/mysql/ r,
  /mnt/ssd/path/mysql/** rwk,

# sudo service mysql start

無事起動!

※この挙動はselinuxだ!とおもってselinuxの情報をいろいろ調べたんですけど
Ubuntuだと強制アクセス制御にAppArmorというのを使っているんですね。勉強になりました。

Popular Posts:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*