web-dev-qa-db-ja.com

mysqlデータベースへのシンボリックリンク

MySQL(Debian 6.0)上の別の場所へのデータベースの1つにシンボリックリンクを作成する必要がありました。そう /var/lib/mysql/dbname に指差す /home/user/dbname、しかしMySQLは

MySQLエラー:1017(ファイルが見つかりません: './dbname/tbl201206.frm'(errno:13))

データディレクトリまたはテーブルファイルにシンボリックリンクを作成するためのマニュアルをいくつか読みましたが、mysqldはこの種のリンクも読み取ることができますか?

5
John

エラーコード(errno: 13)は、許可が拒否されたことを意味します。 mysqlユーザーが/home/user/dbnameとその下のすべてのファイルを読み書きする権限を持っていることを確認してください。

これは、Sudo su mysqlを使用してから、file /home/user/dbname/tbl201206.frmなどのファイルにアクセスするコマンドを使用して実行できます。

これを修正するには、おそらくchown -R mysql:mysql /home/user/dbnameを実行する必要があります。 chmod +x /home/userも必要になる場合があります。

5
Ladadadada

Ubuntu(および場合によっては他の最近のLinuxバージョン)を実行している場合、ファイルの権限が正しいにもかかわらず、MySQLがファイルの場所へのアクセスを拒否されることがあります。これは、名前ベースの強制アクセス制御を実装するLinuxセキュリティモジュールである AppArmor が原因です。 AppArmorを実行しているかどうかを確認するには、次のコマンドを試してください。

$ Sudo apparmor_status

これが機能し、mysqldが含まれている場合は、おそらく構成を変更する必要があります。これは AskUbuntuでのandol overによる役立つ投稿 で説明されていますが、これは私にとって一見して問題を解決しました(私は、便宜上、および他のページが変更された場合のために、以下のandolの投稿を再現します)。

データベースファイルを移動してシンボリックリンクを配置した後、ファイルはそれ以上大きくならず、代わりにメインのInnoDBファイルが書き込まれました(個別のDBファイルを作成するためにinnodb_file_per_tableを使用していますが)。 andol(およびWeb上の他の多くの場所)による投稿で提案された変更は、実際には十分ではないと思います。最終的に、MySQLデータディレクトリ全体を移動し、代わりにAppArmorファイル/etc/apparmor.d/tunables/aliasを編集して移動しました(ドキュメントはファイルにあります)。これはUbuntu12.4(正確)で正しく機能しました。


Andolが書いたものは次のとおりです。上で述べたように、これは私にはうまくいきませんでした。

新しいdatadirが/ home/data/mysqlになると仮定します。

ファイル/ etc/apparmor.d/usr.sbin.mysqldを開くと、ルールの中にこれらの2行が見つかります。

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

上記の例を想定すると、これらの2つの行で置き換えるか、(おそらく望ましい)補完する必要があります。

/home/data/mysql/ r,
/home/data/mysql/** rwk,

新しいdatadirを使用してMySQLサーバーを起動する前に、新しいapparmorプロファイルを明示的にリロードする必要もあります。

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

4
mak