Ubuntuサーバー10.04でデータディレクトリを変更しようとすると、次のエラーが発生しました。
100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00 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: 'create'.
InnoDB: Cannot continue operation.
アクセス許可についての一般的な混乱の後、OPは問題がアクセス許可とパスの権限を持っていないことではなく、AppArmorがMySQLによる新しい場所の読み取りと書き込みを妨げていることであることに気付きました。
これは彼の解決策です:
最初にMySQLを停止して、いじっている間、奇妙なことが起こらないようにします。
$ Sudo stop mysql
次に、すべてのデータベースディレクトリを新しいホームに移動します。
$ Sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/
ファイルを移動しないでください。それらはmysqlによって生成され、フォルダー(データベース)を移動するだけです。
次に、mysqlが新しいフォルダを使用できるようにAppArmorに丁寧に依頼します。
$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld
>> add lines
/new-mysql-dir/ r,
/new-mysql-dir/** rwk,
次に、mysqlにdatadirが移動したことを伝えます。
$ Sudo vim /etc/mysql/my.cnf
>> change the line
datadir=/var/lib/mysql
>> to
datadir=/my-new-db-dir/
注:データベースの設定によっては、innodb-data-home-dirなども変更する必要がある場合があります。
次に、AppArmorを再起動して新しい設定を読み取ります。
$ Sudo /etc/init.d/apparmor restart
そして、新しいdatadirを使用してMySQLを再起動します。
$ Sudo start mysql