web-dev-qa-db-ja.com

MariaDBデータベースサーバーの起動に失敗しました

/パーティションはたったの50Gなので、私のデータはそれよりも大きいです。 /homeには500Gのスペースがあります。それで、MySQLのすべてのデータを/homeに移動します。以下は私の手順です(rootアカウントの下):

  1. mySQLを叫ぶ

    # mysql -u root -p shutdown

  2. dataディレクトリを作成します。

    # cd /home/ && mkdir data

  3. /var/lib/mysqlディレクトリを/home/dataに移動します

    # mv /var/lib/mysql /home/data/

  4. my.cnf/usr/lib64/mysql/mysql_configを編集

    socket=/var/lib/mysql/mysql.socksocket=/home/data/mysql/mysql.sockに変更

    datadir=/home/data/mysqlセクションの下にmy.cnfのみを[mysqldb]に追加

  5. 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

  6. /home/data/mysqlの所有者を変更

    chown -R mysql:mysql /home/data/mysql/

  7. 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です。

それを修正するには?ありがとう!

2
GoingMyWay

/ 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ファイルシステムに「破棄」を渡して、ファイルをスパースに保ちます。

2
Dan Armstrong

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.digitalocean.com/community/tutorials/how-to-change-a-mariadb-data-directory-to-a-new-location-on-centos-7

https://www.unixmen.com/selinux-and-non-default-home-directory-locations/

1
Erik