ディスクの都合でmysqlのデータの置き場所を変更しました.
mysqldを停止して,データを移動して,シンボリックリンクも一応貼っておく.
/etc/mysql/mysql.conf.d/mysqld.cnf
でdatadirを変更.
[mysqld] datadir = /export/data/var/lib/mysql
この状態でmysqlを起動するとこんな感じのエラーで起動しなくなってしまいました.
2018-02-17T16:12:54.184655Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable 2018-02-17T16:12:54.184718Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable 2018-02-17T16:12:54.184734Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error 2018-02-17T16:12:54.785643Z 0 [ERROR] Plugin 'InnoDB' init function returned error. 2018-02-17T16:12:54.786151Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2018-02-17T16:12:54.786272Z 0 [ERROR] Failed to initialize builtin plugins. 2018-02-17T16:12:54.786415Z 0 [ERROR] Aborting
該当ファイルは一見問題無さそうに見えます.
$ sudo ls -la /export/data/var/lib/mysql/ibdata1 -rw-rw---- 1 mysql mysql 102760448 2月 18 05:15 /export/data/var/lib/mysql/ibdata1 $ sudo -u mysql dd if=/export/data/var/lib/mysql/ibdata1 bs=10 count=1|od -xc 1+0 レコード入力 1+0 レコード出力 10 bytes copied, 9.8366e-05 s, 102 kB/s 0000000 2214 405b 0000 0000 0000 024 " [ @ \0 \0 \0 \0 \0 \0 0000012
何でだ?と思ったらkernel logにこんなログが.apparmorで引っかかっているようです.
Feb 18 00:35:26 micro kernel: [ 3569.631324] audit: type=1400 audit(1518881726.300:24): apparmor="DENIED" operation="open" prof ile="/usr/sbin/mysqld" name="/proc/18795/status" pid=18795 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=114 ouid=114
/etc/apparmor.d/usr.sbin.mysqld
でパスを変更します.
diff --git a/apparmor.d/usr.sbin.mysqld b/apparmor.d/usr.sbin.mysqld index 2619e7d..adb8259 100644 --- a/apparmor.d/usr.sbin.mysqld +++ b/apparmor.d/usr.sbin.mysqld @@ -46,16 +46,16 @@ /usr/share/mysql/** r, # Allow data dir access - /var/lib/mysql/ r, - /var/lib/mysql/** rwk, + /export/data/var/lib/mysql/ r, + /export/data/var/lib/mysql/** rwk, # Allow data files dir access - /var/lib/mysql-files/ r, - /var/lib/mysql-files/** rwk, + /export/data/var/lib/mysql-files/ r, + /export/data/var/lib/mysql-files/** rwk, # Allow keyring dir access - /var/lib/mysql-keyring/ r, - /var/lib/mysql-keyring/** rwk, + /export/data/var/lib/mysql-keyring/ r, + /export/data/var/lib/mysql-keyring/** rwk, # Allow log file access /var/log/mysql.err rw,
この状態でapparmorを再起動して設定を反映してからmysqlを起動でOKでした.
$ sudo service apparmor restart $ sudo service mysql start
この後iostat -x
を眺めて大丈夫そうかなーって思ったのですがディスクアクセス音が大きくなったのでまた別の場所に移動するかも…….
環境
$ dpkg-query -W mysql-server mysql-server 5.7.21-0ubuntu0.16.04.1 $ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial $ uname -m x86_64