web-dev-qa-db-ja.com

MySQLデータベースディレクトリを変更するにはどうすればよいですか?

CentOSとcPanelを使用しています。私のサーバーでは、すべてのMySQLデータベースが/var/lib/mysqlに保存されます。現在、/varは100%使用されており、MySQLは動作を停止しています。特にこのサーバーがcPanelで管理されていることを考慮して、データベースを/home/mysqlなどの新しいディレクトリに移動するにはどうすればよいですか?

4
user111175

アクセス権がないため、cpanelからこれを確認できませんが、これはsshとSudoによってrootに接続されたコンソールからの例です。シンボリックリンクの代わりに/ etc/fstabにバインドエントリを使用するための引数がありますが、これは私にとってはうまくいきます。

私の通常の手順は、mysqlを停止し、ディレクトリの内容を移動し、オリジナルをリンクして、mysqldを再起動することです。

[tomh@workstation001 ~]$ Sudo su -
[root@workstation001 ~]# 

[root@workstation001 ~]# service mysqld stop
Stopping mysqld (via systemctl):  
                                                           [  OK  ]

[root@workstation001 ~]# mv /var/lib/mysql/ /opt/

[root@workstation001 ~]# ln -s /opt/mysql /var/lib/


[root@workstation001 ~]# ls -la /var/lib/mysql
lrwxrwxrwx 1 root root 10 Feb 26 23:02 /var/lib/mysql -> /opt/mysql

[root@workstation001 ~]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]


[root@workstation001 ~]# mysql -uroot 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.18-log MySQL Community Server (GPL)

mysql> show databases;
...
| Database              |
+-----------------------+
| information_schema    |
| mysql                 |
| performance_schema    |
| test   

似たような質問に気づきました。これは複製に近いもので、selinuxを有効にして上記を実行する際のいくつかの問題に言及しています。 http://crashmag.net/change-the-default-mysql-data-directory-with-selinux-enabled

したがって、selinuxを使用している場合は、いくつかの追加手順があります。

7
Tom H

mysqlデータディレクトリを変更する場合は、mysql構成ファイルを編集してdatadir値を変更する必要があります。

datadir = /home/user/data

新しいデータディレクトリ[〜#〜] must [〜#〜]mysqlが所有し、適切なセキュリティコンテキストを持っています。

chown -R mysql.mysql /home/user/data
chcon -R -t mysqld_db_t /home/user/data

mySQLサーバーを再起動します

/etc/init.d/mysqld restart
4
wens

私は this 段階的なガイドが私のために働いていることを発見しました。

インストールする必要があります:

yum install policycoreutils-python

ガイド:

Mysqlのデフォルトのデータベースの場所のSELinuxコンテキストを表示します。

~]# ls -lZ /var/lib/mysql
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

これは、データベースファイルの場所のデフォルトのコンテキスト要素であるmysqld_db_tを示しています。このコンテキストは、正しく機能するために、この例で使用される新しいデータベースの場所に手動で適用する必要があります。

Mysqldデーモンを停止します。

~]# systemctl stop mariadb.service

データベースの新しい場所に新しいディレクトリを作成します。この例では、/ mysql /が使用されています。

~]# mkdir -p /mysql

データベースファイルを古い場所から新しい場所にコピーします。

~]# cp -R /var/lib/mysql/* /mysql/

この場所の所有権を変更して、mysqlユーザーおよびグループによるアクセスを許可します。これにより、SELinuxが引き続き監視する従来のUnix権限が設定されます。

~]# chown -R mysql:mysql /mysql

次のコマンドを実行して、新しいディレクトリの初期コンテキストを確認します。

~]# ls -lZ /mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0   mysql

この新しく作成されたディレクトリのコンテキストusr_tは、現時点ではMariaDBデータベースファイルの場所としてのSELinuxには適していません。コンテキストが変更されると、MariaDBはこの領域で適切に機能できるようになります。

メインのMariaDB構成ファイル/etc/my.cnfをテキストエディターで開き、datadirオプションを変更して新しい場所を参照するようにします。この例では、入力する必要がある値は/mysqlです。

[mysqld]
datadir=/mysql

このファイルを保存して終了します。

mysqldを起動します。サービスの開始に失敗し、拒否メッセージが/var/log/messagesファイルに記録されます。

~]# systemctl start mariadb.service
Job for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.

ただし、監査デーモンが実行されており、setroubleshootサービスを使用している場合、拒否は代わりに/var/log/audit/audit.logファイルに記録されます。

SELinux is preventing `/usr/libexec/mysqld` "write" access on /mysql. For complete SELinux messages. run `sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71`

この拒否の理由は、mysqlがMariaDBデータファイルに対して正しくラベル付けされていないためです。 SELinuxは、MariaDBがusr_tというラベルの付いたコンテンツにアクセスできないようにします。この問題を解決するには、次の手順を実行します。

次のコマンドを実行して、mysqlのコンテキストマッピングを追加します。 semanageutilityはデフォルトではインストールされないことに注意してください。システムにない場合は、policycoreutils-pythonパッケージをインストールしてください。

~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"

このマッピングは/etc/selinux/targeted/contexts/files/file_contexts.localファイルに書き込まれます:

~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

/mysql(/.*)?    system_u:object_r:mysqld_db_t:s0

次に、restoreconユーティリティを使用して、このコンテキストマッピングを実行中のシステムに適用します。

~]# restorecon -R -v /mysql

mysqlの場所がMariaDBの正しいコンテキストでラベル付けされたので、mysqldが開始します。

~]# systemctl start mariadb.service

mysqlのコンテキストが変更されたことを確認します。

~]$ ls -lZ /mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

場所が変更され、ラベルが付けられ、mysqldが正常に開始されました。この時点で、実行中のすべてのサービスをテストして、正常な動作を確認する必要があります。

2
Milan Rakos