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) ... ..