Назад | Перейти на главную страницу

Не удалось запустить сервер базы данных MariaDB

поскольку / раздел всего 50 ГБ, а мои данные больше этого. И есть 500G места в /home. Итак, я перемещаю все данные 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.sock к socket=/home/data/mysql/mysql.sock

    Добавить datadir=/home/data/mysql только вmy.cnf под [mysqldb] раздел

  5. ln -s

    сначала я создал каталог с именем mysql в /var/lib/. И chown mysql:mysql /var/lib/mysql сделать ссылку: 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)

Моя ОС 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 для большого разреженного файла и передайте "discard" вашей файловой системе 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.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/