前書き

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

前提条件

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

  • * `+ sudo +`特権を持ち、MySQLがインストールされている非rootユーザーを持つCentOS 7サーバー*。 CentOS 7での初期サーバーセットアップガイドで、これらの権限を持つユーザーをセットアップする方法の詳細を学ぶことができます。 MySQLをまだインストールしていない場合は、https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7 [CentOS 7に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 +」と入力し、「ENTER」を押してモニターを終了します。

exit

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

sudo systemctl stop mysqld

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

sudo systemctl status mysqld

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

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

sudo vi /etc/my.cnf

`+ datadir = `で始まる ` [mysqld] +`ブロック内の行を見つけます。この行は、いくつかのコメントでブロック見出しから分離されています。 新しい場所を反映するために続くパスを変更します。 さらに、ソケットは以前データディレクトリにあったため、新しい場所に更新する必要があります。

/etc/my.cnf

[mysqld]
. . .
datadir=/mysql
socket=/mysql/mysql.sock
. . .

既存の行を更新した後、 `+ mysql`クライアントの設定を追加する必要があります。 ファイルの下部に次の設定を挿入して、ディレクティブが `+ [mysqld] +`ブロックに分割されないようにします。

/etc/my.cnf

完了したら、「+ ESCAPE 」を押してから「:wq!+」と入力してファイルを保存して終了します。

ステップ3-MySQLの再起動

新しい場所を使用するように構成を更新したので、MySQLを起動して作業を検証する準備が整いました。

sudo systemctl start mysqld
sudo systemctl status mysqld

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

mysql -u root -p

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

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

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

結論

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

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