LinuxでデフォルトのMySQL / MariaDBデータディレクトリを変更する方法


LAMPスタックのコンポーネントをCentOS/RHEL 7サーバーにインストールした後、実行したいことがいくつかあります。

それらのいくつかは、ApacheとMySQL/MariaDBのセキュリティを強化することに関係していますが、その他は、セットアップやニーズに応じて適用できる場合とできない場合があります。

たとえば、データベースサーバーの予想される使用法に基づいて、デフォルトのデータディレクトリ(/var/lib/mysql )を別の場所に変更したい場合があります。これは、使用率が高いためにそのようなディレクトリが大きくなることが予想される場合です。

そうしないと、/var が格納されているファイルシステムが一時的に崩壊し、システム全体に障害が発生する可能性があります。デフォルトのディレクトリを変更するもう1つのシナリオは、実際のデータを格納するために使用する専用のネットワーク共有がある場合です。

このため、この記事では、デフォルトのMySQL/MariaDBデータディレクトリをCentOS/RHEL7サーバーおよびUbuntu/Debianディストリビューションで別のパスに変更する方法について説明します。

MariaDBを使用しますが、この記事で説明されている概念と実行されている手順は、特に明記されていない限り、MySQLとMariaDBの両方に適用されます。

デフォルトのMySQL / MariaDBデータディレクトリの変更

注:新しいデータディレクトリは/mnt/mysql-data であると想定します。このディレクトリは mysql:mysql が所有する必要があることに注意してください。

# mkdir /mnt/mysql-data
# chown -R mysql:mysql /mnt/mysql-data

ご参考までに、プロセスを5つのわかりやすいステップに分割しました。

まず、次のコマンドを使用して現在のデータディレクトリを特定することをお勧めします。過去に変更された可能性があるため、まだ/var/lib/mysql であると想定しないでください。

# mysql -u root -p -e "SELECT @@datadir;"

MySQLパスワードを入力すると、出力は次のようになります。

データの破損を防ぐために、サービスが現在実行中の場合は、続行する前にサービスを停止してください。これを行うには、systemdのよく知られたコマンドを使用します。

------------- On SystemD ------------- 
# systemctl stop mariadb
# systemctl is-active mariadb

------------- On SysVInit ------------- 
# service mysqld stop
# service mysqld status

OR

# service mysql stop
# service mysql status

サービスが停止した場合、最後のコマンドの出力は次のようになります。

次に、/var/lib/mysql の内容を/mnt/mysql-data に再帰的にコピーし、元の権限とタイムスタンプを保持します。

# cp -R -p /var/lib/mysql/* /mnt/mysql-data

構成ファイル( my.cnf )を編集して、新しいデータディレクトリ(この場合は/mnt/mysql-data )を示します。

# vi /etc/my.cnf
OR
# vi /etc/mysql/my.cnf

[mysqld] セクションと [client] セクションを見つけて、次の変更を加えます。

Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock

Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock

変更を保存してから、次の手順に進みます。

この手順は、RHEL/CentOSおよびその派生物にのみ適用されます。

MariaDBを再起動する前に、SELinuxセキュリティコンテキストを/mnt/mysql-data に追加します。

# semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
# restorecon -R /mnt/mysql-data

次に、MySQLサービスを再起動します。

------------- On SystemD ------------- 
# systemctl stop mariadb
# systemctl is-active mariadb

------------- On SysVInit ------------- 
# service mysqld stop
# service mysqld status

OR

# service mysql stop
# service mysql status

ここで、手順1と同じコマンドを使用して、新しいデータディレクトリの場所を確認します。

# mysql -u root -p -e "SELECT @@datadir;"

MariaDBにログインし、新しいデータベースを作成してから、/mnt/mysql-data を確認します。

# mysql -u root -p -e "CREATE DATABASE tecmint;"

おめでとう! MySQLまたはMariaDBのデータディレクトリが正常に変更されました。

この投稿では、CentOS/RHEL7およびUbuntu/Debianディストリビューションで実行されているMySQLまたはMariaDBサーバーのデータディレクトリを変更する方法について説明しました。

この記事について質問やコメントがありますか?以下のフォームを使用して、お気軽にお知らせください。いつでもご連絡をお待ちしております。