/
パーティションはたったの50Gなので、私のデータはそれよりも大きいです。 /home
には500Gのスペースがあります。それで、MySQLのすべてのデータを/home
に移動します。以下は私の手順です(root
アカウントの下):
mySQLを叫ぶ
# mysql -u root -p shutdown
data
ディレクトリを作成します。
# cd /home/ && mkdir data
/var/lib/mysql
ディレクトリを/home/data
に移動します
# mv /var/lib/mysql /home/data/
my.cnf
と/usr/lib64/mysql/mysql_config
を編集
socket=/var/lib/mysql/mysql.sock
をsocket=/home/data/mysql/mysql.sock
に変更
datadir=/home/data/mysql
セクションの下にmy.cnf
のみを[mysqldb]
に追加
ln -s
まず、/var/lib/
にmysql
という名前のディレクトリを作成しました。そしてchown mysql:mysql /var/lib/mysql
make link:ln -s /home/data/mysql/mysql.sock /var/lib/mysql/mysql.sock
/home/data/mysql
の所有者を変更
chown -R mysql:mysql /home/data/mysql/
mySQLサービスを開始する
# systemctl start mariadb.service
しかし、起動に失敗しました。
[root@localhost]~# systemctl start mariadb.service
Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
そして詳細なメッセージは:
[root@localhost]~# systemctl status mariadb.service
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2016-04-21 19:51:13 HKT; 39s ago
Process: 7144 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=1/FAILURE)
Process: 7143 ExecStart=/usr/bin/mysqld_safe --basedir=/usr (code=exited, status=0/SUCCESS)
Process: 7090 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
Main PID: 7143 (code=exited, status=0/SUCCESS)
Apr 21 19:51:12 localhost.localdomain systemd[1]: Starting MariaDB database server...
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe Logging to '/home/data/mysql/localhost.localdomain.err'.
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe Starting mysqld daemon with databases from /home/data/mysql
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe mysqld from pid file /home/data/mysql/localhost.localdomain.pid ended
Apr 21 19:51:13 localhost.localdomain systemd[1]: mariadb.service: control process exited, code=exited status=1
Apr 21 19:51:13 localhost.localdomain systemd[1]: Failed to start MariaDB database server.
Apr 21 19:51:13 localhost.localdomain systemd[1]: Unit mariadb.service entered failed state.
Apr 21 19:51:13 localhost.localdomain systemd[1]: mariadb.service failed.
[root@localhost]~# journalctl -xe
-- The start-up result is done.
Apr 21 19:50:01 localhost.localdomain systemd[1]: Starting Session 7 of user root.
-- Subject: Unit session-7.scope has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit session-7.scope has begun starting up.
Apr 21 19:50:01 localhost.localdomain CROND[6971]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Apr 21 19:51:12 localhost.localdomain polkitd[900]: Registered Authentication Agent for unix-process:7084:268964 (system bus name :1.80 [/usr/bin/pkttyagent
Apr 21 19:51:12 localhost.localdomain systemd[1]: Starting MariaDB database server...
-- Subject: Unit mariadb.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mariadb.service has begun starting up.
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe Logging to '/home/data/mysql/localhost.localdomain.err'.
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe Starting mysqld daemon with databases from /home/data/mysql
Apr 21 19:51:12 localhost.localdomain mysqld_safe[7143]: 160421 19:51:12 mysqld_safe mysqld from pid file /home/data/mysql/localhost.localdomain.pid ended
Apr 21 19:51:13 localhost.localdomain systemd[1]: mariadb.service: control process exited, code=exited status=1
Apr 21 19:51:13 localhost.localdomain systemd[1]: Failed to start MariaDB database server.
-- Subject: Unit mariadb.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mariadb.service has failed.
--
-- The result is failed.
Apr 21 19:51:13 localhost.localdomain systemd[1]: Unit mariadb.service entered failed state.
Apr 21 19:51:13 localhost.localdomain systemd[1]: mariadb.service failed.
Apr 21 19:51:13 localhost.localdomain polkitd[900]: Unregistered Authentication Agent for unix-process:7084:268964 (system bus name :1.80, object path /org/f
lines 3132-3161/3161 (END)
私のOSはCentOS 7
、MySQLはMariaDB
です。
それを修正するには?ありがとう!
/ var/log/messagesを開始しようとする間、それを監視してください。 SELinuxが邪魔になる場合があります。
tail -f /var/log/messages
MariaDBを予想される場所/ var/lib/mysqlに残してみてください。オプションは次のとおりです。
1)パフォーマンスが重要な場合:/ home上のファイルシステムとパーティション(または論理ボリューム)を圧縮し、新しいパーティションを作成して/ var/lib/mysqlにマウントします
2)パフォーマンスがそれほど重要でない場合:/home/mysql.imgに大きなファイルを作成し、losetupを介してそのファイルを/ dev/loop0として使用し、/ var/lib/mysqlにマウントします。
3)パフォーマンスが本当に重要でない場合:大きなスパースファイルでlosetupを実行し、ext4ファイルシステムに「破棄」を渡して、ファイルをスパースに保ちます。
MariaDBデータベースファイルをISCSI共有に移動しようとすると、まったく同じ問題が発生しました。共有がマウントされ、適切にフォーマットされると、SELinuxはディレクトリにsystem_u:object_r:unlabeled_t
のタグを付けます。次のコマンドを実行して、ディレクトリのラベルを確認できます... ls -Zd
SELinuxは驚きを好まない。したがって、データディレクトリを変更した後にMariaDBを実行するには、新しいディレクトリのラベルを変更する必要があります。次のコマンドを使用します:semanage fcontext -a -e /var/lib/mysql/ <your new directory>
。このコマンドは、古いmysqlディレクトリタギングを新しいものにマップします。新しくタグ付けされたディレクトリでls -Zd
を実行して再確認します。
最後に、コマンドrestorecon -R <your new directory>
を使用して、新しく変更されたディレクトリ全体に変更を伝達します。
これはすべて、すべてのmysqlファイルを変更せずにコピーし、元に戻す必要がある場合は元のバックアップを持っていることを前提としています。
このソリューションへの参照については、次の記事をご覧ください。
https://www.unixmen.com/selinux-and-non-default-home-directory-locations/