MySQL 8.0 でデータ ディレクトリを分散させる:InnoDB ファイル パーティショニングの活用
MySQL データ ディレクトリを変更する方法
MySQL データ ディレクトリを変更するには、以下の手順に従います。
MySQL サービスを停止する
データ ディレクトリを変更する前に、MySQL サービスを停止する必要があります。これにより、データが破損するのを防ぎます。
sudo service mysql stop
データ ディレクトリを移動する
新しい場所にデータ ディレクトリを作成し、既存のデータ ディレクトリからすべてのファイルを新しいディレクトリにコピーします。
sudo mkdir /new/mysql/data
sudo cp -r /var/lib/mysql/* /new/mysql/data
設定ファイルを編集する
MySQL 設定ファイル (/etc/mysql/my.cnf
) を開き、datadir
ディレクティブの値を新しいデータ ディレクトリのパスに変更します。
datadir = /new/mysql/data
所有権とパーミッションを設定する
新しいデータ ディレクトリとすべてのファイルの所有権を mysql
ユーザーとグループに設定します。
sudo chown -R mysql:mysql /new/mysql/data
sudo chmod -R 755 /new/mysql/data
SELinux が有効な場合は、MySQL データ ディレクトリ用の SELinux コンテキストを設定する必要があります。
sudo semanage fcontext -m -t mysql_data_dir "/new/mysql/data"
sudo restorecon -R /new/mysql/data
設定の変更を反映するために、MySQL サービスを再起動します。
sudo service mysql start
データベースの場所を確認する
MySQL サービスが起動したら、データベースの場所を確認して、すべてが正しく動作していることを確認します。
mysql -u root -p
mysql> SELECT DATA_DIRECTORY;
これで、MySQL データ ディレクトリが新しい場所に移動されました。
注意事項
- データ ディレクトリを移動する前に、必ずデータベースをバックアップしてください。
- SELinux が有効な場合は、上記の SELinux コンテキスト設定手順を必ず実行してください。
- データ ディレクトリを別のストレージ デバイスに移動する場合は、そのデバイスが MySQL サーバーから十分な速度でアクセスできることを確認してください。
#!/bin/bash
# MySQL サービスを停止する
sudo service mysql stop
# データ ディレクトリを移動する
sudo mkdir /new/mysql/data
sudo cp -r /var/lib/mysql/* /new/mysql/data
# 設定ファイルを編集する
sudo sed -i 's!datadir = /var/lib/mysql!datadir = /new/mysql/data!g' /etc/mysql/my.cnf
# 所有権とパーミッションを設定する
sudo chown -R mysql:mysql /new/mysql/data
sudo chmod -R 755 /new/mysql/data
# SELinux の場合
if [ "$(getenforce)" = "Enforcing" ]; then
sudo semanage fcontext -m -t mysql_data_dir "/new/mysql/data"
sudo restorecon -R /new/mysql/data
fi
# MySQL サービスを起動する
sudo service mysql start
このスクリプトを実行するには、root 権限で実行する必要があります。
- このスクリプトは、MySQL 8.0 を使用していることを前提としています。他のバージョンを使用している場合は、
datadir
ディレクティブの場所が異なる場合があります。
MySQL データ ディレクトリを変更するその他の方法
mysqld --datadir オプションを使用する
MySQL サーバーを起動時に --datadir
オプションを使用して、データ ディレクトリの場所を指定できます。
sudo mysqld --datadir=/new/mysql/data
この方法を使用すると、設定ファイルを編集する必要がなくなります。ただし、この方法を使用する場合は、毎回サーバーを起動するたびに --datadir
オプションを指定する必要があることに注意してください。
MySQL 8.0 以降では、InnoDB ファイル パーティショニングを使用して、データ ディレクトリを複数の場所に分散させることができます。これにより、パフォーマンスを向上させ、ストレージの制約を軽減することができます。
最適な方法を選択する
- データ ディレクトリを別のストレージ デバイスに移動する必要がある場合は、
mysqld --datadir
オプションを使用するのが最善の方法です。 - データ ディレクトリを複数の場所に分散させる必要がある場合は、InnoDB ファイル パーティショニングを使用する必要があります。
- データ ディレクトリの場所を偶発的に変更した場合は、前述の手順に従って手動で変更する必要があります。
mysql directory default