ZONDEEL BLOG

技術と生活のログ

Ubuntu 上で MySQL の tmpdir, datadir を別ストレージ(SSD)、 Ramdisk へ変更する。

Ubuntu 14.04 LTS を使用しています。

SSDにOSが入っており、
HDD及びRamdiskにアクセスを逃がす意味で設定を行います。

以下のようなディレクトリに各デバイスをマウントします。

HDD = /storage (注:/mnt/XXX に対するシンボリックリンク)
SSD = /ramdisk

各設定とディレクトリは以下のようにつながります。

tmpdir: /ramdisk
datadir: /storage/mysql

tmpdir の変更

my.cnf を開き

sudo vi /etc/mysql/my.cnf

tmpdir 項目を変更する。

tmpdir = /ramdisk

注意すべきはこの設定を適用した場合に
MySQL を起動すると /ramdiskパーミッション
777 の場合だとしても権限がないと以下のように怒られてしまう。

/usr/sbin/mysqld: Can't create/write to file '/ramdisk/ib4pRsqd' (Errcode: 13)

結論としては AppArmor がアクセス制御している為で、
今回は MySQL を AppArmor の制御外とすることで対処します。

sudo apt-get install apparmor-utils
aa-disable /usr/sbin/mysqld

これで tmpdir の変更が出来たと思います。

datadir の変更

HDDのマウント

fstab を開き

sudo vi /etc/fstab

以下のような内容を書き込みます。
今回は権限が 777 となるよう umask=000 を指定しています。

/dev/disk/by-uuid/XXXX-ZZZZ /mnt/XXXX-ZZZZ auto nosuid,nodev,nofail,users,rw,umask=000 0 0
my.cnf の設定

my.cnf を開き

sudo vi /etc/mysql/my.cnf

user, datadir 項目を変更する。
今回は user を root に変えているのは
storage を root にてマウントしているためです。

user = root
datadir = /storage/mysql

上記を設定したら以下コマンドを実行しデータベースを作成します。
今回は初期状態として扱っていますが、既存のデータがある場合には
対象のディレクトリに元のデータをコピーしておけば良いと思います。

mysql_install_db

ここまでやった後に、通常通り MySQL が起動をします。
起動しない場合、 /var/log/mysql/error.log などを確認ください。

# service mysql start
mysql start/running, process 6298

# mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
...
..