MySQLデータファイルを別のパーティションに移動する方法


27

ハードドライブを2つのパーティションに分割しているため、Ubuntuを簡単に再インストールして、ホームディレクトリのデータを失うことなく異なるバージョンを試すことができます。次のような設定です。

20GB  -> /     (root)
180GB -> /home 

私は多くの開発作業を行っているので、/var/wwwフォルダーをにリンクしています/home/valorin/workspace

しかし、MySQLデータファイルでもこれを行いたいと思っています。マシンを再インストールするたびに、完全なSQLdumpを実行し、さらに作業を行う前にすべてのDBを復元する必要があることに悩まされています。

MySQLを壊さずにこれを行う最良の方法は何ですか?

回答:


30

実際、この質問に対するUbuntu固有の潜在的な答えがあります。

Gergoesリンクで述べたように、これは基本的に/etc/mysql/my.cnfを変更し、[mysqld]セクションのdatadir =に新しい値を設定することです。これまでのところ、答えの不特定の部分。

Ubuntuのややモダンなバージョンを実行していると仮定すると、デフォルトでAppArmorがインストールされ、強制モードの/ usr / sbin / mysqldのプロファイルがあります。そのデフォルトのプロファイルは新しいデータディレクトリを受け入れない可能性が高いでしょう。

新しい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,

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

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

これはNatty(11.4)では機能しないようです。/ usr / sbin / mysqldを使用してMySQLを起動し、変更されたデータディレクトリを読み取らなければなりませんでした。それ以外の場合は、古いデータディレクトリの読み取りを続けました。これは私の側のエラーかもしれません。
3カップ

上記では、Ubuntu 12.04(Precise)での問題を解決できませんでした。/etc/apparmor.d/tunables/aliasファイルを編集して、「alias / var / lib / mysql /-> / home / data / mysql /」という行を含める必要があることがわかりました。他のAppArmorファイルを変更する必要はありませんでした。「/etc/init.d/apparmor restart」でAppArmorを再起動し、「restart mysql」でMySQLを再起動した直後に機能しました。
mak

使用する新しいフォルダーに特定のアクセス許可を設定する必要があると思います。誰が彼らが何であるか知っていますか?mysqlのインストールでmysqlユーザーが作成されることはわかっていますが、デフォルトでは/ var / lib / mysqlフォルダーの内容にアクセスできません。
-NullVoxPopuli

4

スーパーユーザーは、この問題を解決する方法について、順を追って説明しています。

以下は、同じことを行うための別の指示です http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

ここに再投稿されます。スーパーユーザーにできる場合は、オリジナルに投票してください。

パーミッションに関する一般的な混乱の後、問題はパーミッションとパスが正しくないことではなく、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

行を追加します。

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

次に、mydirにdatadirが移動したことを伝えます。

$ sudo vim /etc/mysql/my.cnf 

行を変更します。

datadir=/var/lib/mysql

に:

datadir=/my-new-db-dir/

注:データベースのセットアップによっては、innodb-data-home-dirなども変更する必要がある場合があります。

次に、AppArmorを再起動して新しい設定を読み取ります。

$ sudo /etc/init.d/apparmor restart

そして、新しいdatadirを使用してMySQLを再度起動します。

$ sudo start mysql

お役に立てれば!


0

これは、Ubuntu固有ではありません。それにもかかわらず、ここに役立つものがあります:http : //developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


私が仕事をすることができなかった部分はAppArmourであり、あなたの投稿はそれを説明するだけだったので、指示は本当に役に立ちませんでした。また、このサイトはUbuntu固有の質問に対応していますか?ヘルプを探している新規ユーザーは、Ubuntu固有のものであるかどうか、そしてそれらが一般的なものであるかどうかをどこで尋ねるべきかをどのように知るのでしょうか?
スティーブンRC

ウェブサイトは利用できません。
Hengjie


-1

これはそのようには機能しません。

ユーザーmysqlには、新しいディレクトリに書き込む権利が必要です。

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.