MySQLデータディレクトリをUbuntu 16.04の新しい場所に移動する方法

前書き

データベースは時間とともに成長し、ファイルシステムのスペースが大きくなることがあります。 また、オペレーティングシステムの他の部分と同じパーティションにI / O競合がある場合もあります。 RAID、ネットワークブロックストレージ、およびその他のデバイスは、冗長性およびその他の望ましい機能を提供できます。 スペースを追加する場合、パフォーマンスを最適化する方法を評価する場合、または他のストレージ機能を活用する場合、このチュートリアルでは、MySQLのデータディレクトリの再配置について説明します。

前提条件

このガイドを完了するには、次のものが必要です。

  • * `+ sudo +`特権を持つ非rootユーザーを持つUbuntu 16.04サーバー*。 これらの権限を持つユーザーを設定する方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04での初期サーバー設定]をご覧ください。 ]ガイド。

  • * MySQLサーバー*。 MySQLをまだインストールしていない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-16-04 [Ubuntu 16.04にMySQLをインストールする方法]ガイドでできること助けます。

この例では、「+ / mnt / volume-nyc1-01 +」にマウントされたブロックストレージデバイスにデータを移動しています。 DigitalOceanでブロックストレージを使用する方法ガイドで設定方法を学習できます。

基礎となるストレージの種類にかかわらず、このガイドはデータディレクトリを新しい場所に移動するのに役立ちます。

手順1-MySQLデータディレクトリの移動

MySQLのデータディレクトリを移動する準備をするために、管理者の資格情報を使用してインタラクティブなMySQLセッションを開始して、現在の場所を確認しましょう。

mysql -u root -p

プロンプトが表示されたら、MySQLルートパスワードを入力します。 次に、MySQLプロンプトから、データディレクトリを選択します。

select @@datadir;
Output+-----------------+
| @@datadir       |
+-----------------+
|  |
+-----------------+
1 row in set (0.00 sec)

この出力は、MySQLがデフォルトのデータディレクトリである `+ / var / lib / mysql /、`を使用するように設定されていることを確認しているため、移動する必要があります。 これを確認したら、「 exit」と入力してモニターを終了します。

データの整合性を確保するために、実際にデータディレクトリを変更する前にMySQLをシャットダウンします。

sudo systemctl stop mysql

`+ systemctl +`はすべてのサービス管理コマンドの結果を表示しないため、成功したことを確認したい場合は、次のコマンドを使用します。

sudo systemctl status mysql

出力の最終行にサーバーが停止していることが示されている場合は、確実にシャットダウンしています。

Output. . .
Jul 18 11:24:20 ubuntu-512mb-nyc1-01 systemd[1]: Stopped MySQL Community Server.

サーバーがシャットダウンしたので、 `+ rsync `を使用して既存のデータベースディレクトリを新しい場所にコピーします。 ` -a `フラグを使用すると、パーミッションと他のディレクトリプロパティが保持され、 ` -v +`は詳細な出力を提供するため、進行状況を追跡できます。

sudo rsync -av /var/lib/mysql

「+ rsync +」が完了したら、現在のフォルダーの名前を.bak拡張子に変更し、移動が成功したことを確認するまでそれを保持します。 名前を変更することで、新しい場所と古い場所の両方のファイルから生じる混乱を回避できます。

sudo mv /var/lib/mysql /var/lib/mysql.bak

これで、構成に注目する準備が整いました。

ステップ2-新しいデータの場所を指す

MySQLには、構成値をオーバーライドする方法がいくつかあります。 デフォルトでは、 `+ / etc / mysql / mysql.conf.d / mysqld.cnf `ファイルの ` datadir `は ` / var / lib / mysql +`に設定されます。 このファイルを編集して、新しいデータディレクトリを反映します。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

`+ datadir = +`で始まる行を見つけて、新しい場所を反映するように続くパスを変更します。

この場合、更新されたファイルは次の出力のようになります。

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
datadir=
. . .

これはMySQLを再び立ち上げるのにふさわしい時期のようですが、それを成功させるためにはもう1つ設定する必要があります。

ステップ3-AppArmorアクセス​​制御ルールの構成

デフォルトディレクトリと新しい場所の間にエイリアスを作成して、MySQLに新しいディレクトリへの書き込みを許可するようAppArmorに指示する必要があります。 これを行うには、AppArmorの `+ alias +`ファイルを編集します:

sudo nano /etc/apparmor.d/tunables/alias

ファイルの最後に、次のエイリアスルールを追加します。

/etc/apparmor.d/tunables/alias

. . .
alias /var/lib/mysql/ -> ,
. . .

変更を有効にするには、AppArmorを再起動します。

sudo systemctl restart apparmor

ステップ4-MySQLの再起動

次のステップはMySQLを起動することですが、実行すると別のエラーが発生します。 今回は、AppArmorの問題の代わりに、スクリプト `+ mysql-systemd-start `がディレクトリ ` -d `またはシンボリックリンク ` -L +`の存在をチェックするため、エラーが発生します。 2つのデフォルトパスに一致します。 見つからない場合は失敗します:

/ usr / share / mysql / mysql-systemd-start

. . .
if [ ! -d /var/lib/mysql ] && [ ! -L /var/lib/mysql ]; then
echo "MySQL data dir not found at /var/lib/mysql. Please create one."
exit 1
fi

if [ ! -d /var/lib/mysql/mysql ] && [ ! -L /var/lib/mysql/mysql ]; then
echo "MySQL system database not found. Please run mysql_install_db tool."
exit 1
fi

. . .

これらはサーバーを起動するために必要なので、スクリプトの環境チェックに合格するための最小限のディレクトリ構造を作成します。

sudo mkdir /var/lib/mysql/mysql -p

_Now_これでMySQLを起動する準備が整いました。

sudo systemctl start mysql
sudo systemctl status mysql

新しいデータディレクトリが実際に使用されていることを確認するには、MySQLモニターを起動します。

mysql -u root -p

データディレクトリの値をもう一度見てください。

Output+----------------------------+
| @@datadir                  |
+----------------------------+
|  |
+----------------------------+
1 row in set (0.01 sec)

MySQLを再起動し、新しい場所を使用していることを確認したら、データベースを完全に機能させることを確認してください。 既存のデータの整合性を確認したら、バックアップデータディレクトリを削除できます。

sudo rm -Rf /var/lib/mysql.bak

MySQLを最後に1回再起動して、期待どおりに機能することを確認します。

sudo systemctl restart mysql
sudo systemctl status mysql

結論

このチュートリアルでは、MySQLのデータディレクトリを新しい場所に移動し、調整に対応するためにUbuntuのAppArmor ACLを更新しました。 Block Storageデバイスを使用していましたが、ここの手順は、基盤となるテクノロジーに関係なく、データディレクトリの場所を再定義するのに適しているはずです。

MySQLのデータディレクトリの管理の詳細については、MySQLの公式ドキュメントの次のセクションを参照してください。

前の投稿:Ubuntu 18.04にWebminをインストールする方法
次の投稿:Ubuntu 18.04でユーザーを追加および削除する方法