
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.
答え1
権限に関する一般的な混乱の後、OP は、問題は権限とパスの権限がないということではなく、AppArmor が MySQL による新しい場所への読み取りと書き込みを妨げていることに気付きました。
これが彼の解決策です:
まず、MySQL を停止して、いじっている間に奇妙なことが起こらないようにします。
$ sudo stop mysql
次に、すべてのデータベース ディレクトリを新しい場所に移動します。
$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/
ファイルは移動しないでください。ファイルは mysql によって生成されるので、フォルダー (データベース) のみを移動してください。
次に、AppArmor に、mysql が新しいフォルダーを使用できるようにするよう丁寧に依頼します。
$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
>> add lines
/new-mysql-dir/ r,
/new-mysql-dir/** rwk,
次に、データディレクトリが移動したことを mysql に伝えます。
$ 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
新しいデータディレクトリを使用して MySQL を再度起動します。
$ sudo start mysql