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

タイトルが長いですが,そのままの内容.Ubuntu 10.04のMySQL環境において,MySQLのdata_dir(/var/lib/mysql)を別diskに移したいと思い,以下の手順で作業を行った.

  1. MySQLを止める: # service mysql stop
  2. MySQLのdata_dirを新パーティションにコピー: # cp -rp /var/lib/mysql /mnt/fasterdisk/mysql
  3. 元のMySQLデータディレクトリをリネーム: # mv /var/lib/mysql /var/lib/mysql.old
  4. /var/lib/mysqlからコピーしたパーティションへシンボリックリンク: # ln -s /mnt/fasterdisk/mysql /var/lib/mysql
  5. MySQLを起動: # service mysql start
  6. 起動しない\(^o^)/

このときのエラーメッセージ(/var/log/mysql/error.log)の内容は以下の通り.


111124 15:25:46 [Note] Plugin 'FEDERATED' is disabled.
^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
111124 15:25:46 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
111124 15:25:46 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.

plugin.frmが無いとか色々言っているが,結局原因はapparmorだったので,最終的には/etc/apparmor.d/usr.sbin.mysqlに以下の行を追加したら動いた.ちなみに「mysql_upgradeしてね」的なメッセージが出ているが,そもそもMySQLdが正常に起動できていないのでmysql_upgradeできない.


/mnt/fasterhdd/mysql/ r,
/mnt/fasterhdd/mysql/** rwk,

参考: http://serverfault.com/questions/168957/changing-mysql-data-directory-in-ubuntu-server-10-04

この手の問題はRedhat系ディストリビューションではSELinuxで良く発生していたが,Debian系のディストリでもあるんだなあ.ということで.

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

morimorihoge

高校卒業後,学生をやりながらずっとWebアプリ開発に携わってきました.2010くらいまではPHP/Symfonyプログラマでしたが,それ以降のWeb開発はRailsほぼ一本に宗旨替えしました.開発とは別にサーバ構築・運用も10年以上やってきているので,要件定義から設計・実装・環境構築・運用まで一通り何でもこなせます.開発以外では季節により大学でWebサービス開発やプログラミング関連の非常勤講師もしており,技術の啓蒙・教育にも積極的に関わっています.最近はPM的な仕事が増えていますが,現役開発者としていつでも動ける程度にはコードもサーバも弄る日々を送っています.AWS 認定ソリューションアーキテクト – アソシエイトレベル取りました

morimorihogeの書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ