Мой сервер CentOS 7 недавно вышел из строя из-за отключения жесткого диска во время его работы, и теперь MariaDB не запускается, и я не получаю никаких журналов ошибок.
Все остальное на сервере, кажется, работает нормально и работает xfs_repair
(похожий на fsck
для xfs) на диске не помогло. Вот какие именно ошибки я получаю:
$ sudo systemctl start mariadb
Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
$ sudo systemctl -l status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2018-07-29 19:34:03 MDT; 1min 22s ago
Process: 21579 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=1/FAILURE)
Process: 21577 ExecStart=/usr/bin/mysqld_safe --basedir=/usr (code=exited, status=0/SUCCESS)
Process: 27150 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=1/FAILURE)
Main PID: 21577 (code=exited, status=0/SUCCESS)
Jul 29 19:34:03 giivaserver systemd[1]: Starting MariaDB database server...
Jul 29 19:34:03 giivaserver mariadb-prepare-db-dir[27150]: Database MariaDB is not initialized, but the directory /var/lib/mysql is not empty, so initialization cannot be done.
Jul 29 19:34:03 giivaserver mariadb-prepare-db-dir[27150]: Make sure the /var/lib/mysql is empty before running mariadb-prepare-db-dir.
Jul 29 19:34:03 giivaserver systemd[1]: mariadb.service: control process exited, code=exited status=1
Jul 29 19:34:03 giivaserver systemd[1]: Failed to start MariaDB database server.
Jul 29 19:34:03 giivaserver systemd[1]: Unit mariadb.service entered failed state.
Jul 29 19:34:03 giivaserver systemd[1]: mariadb.service failed.
Насколько я могу судить, я не получаю никакой информации о том, что происходит или Зачем это не может начаться. Также нигде нет файлов журнала ошибок, которые я мог бы найти.
Вот мой my.cnf
:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
В моем /var/log/mariadb/
или /var/run/mariadb/
папки. У меня также нет имя хоста.err (в моем случае giivaserver.err) в любом /var/log/
или /var/log/mysql
как описано в официальной статье Что делать, если MariaDB не запускается.
Я пробовал поставить innodb_force_recovery = 1
с увеличением от 1 до 5 ниже [mysqld]
в моем my.cnf
и это ни на что не повлияло.
Я также пробовал создать резервную копию и переименовать свой /var/lib/mysql
папка и повторный запуск mysql_install_db
как говорят некоторые в Интернете, удаление может помочь, но это не имело значения.
Я перепробовал все, что мог придумать до этого момента, и не могу найти никаких отзывов от моей системы о том, почему MariaDB не запускается.
Редактировать:
Содержимое моей папки / var / lib / mysql после переименования оригинала:
drwx------. 6 mysql mysql 122 Jul 29 19:03 .
drwxr-xr-x. 61 root root 4096 Jul 29 19:03 ..
-rw-rw----. 1 mysql mysql 16384 Jul 29 19:02 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Jul 29 19:02 aria_log_control
drwx------. 2 mysql mysql 4096 Jul 29 19:02 mysql
drwxr-xr-x. 8 mysql mysql 232 Jul 29 18:58 mysqlBAK
drwx------. 2 mysql mysql 4096 Jul 29 19:02 performance_schema
drwx------. 2 mysql mysql 6 Jul 29 19:02 test
Через несколько дней я смог исправить это без потери данных. Как я и подозревал, потери данных из-за отключения не произошло. Я сделал много вещей, чтобы попытаться решить эту проблему, но вот что, как мне кажется, исправило:
Я переименовал свой /var/lib/mysql
папку, чтобы убедиться, что у меня есть резервная копия, затем я удалил свой /etc/my.cnf
файл. Я переустановил mariadb и mariadb-server, а затем запустил его. Оттуда я скопировал резервную копию /var/lib/mysql
папка обратно в мою /etc/my.cnf
добавлены следующие строки (полученные из Вот):
port = 8881
innodb_force_recovery=3
innodb_purge_threads=0
(Я думаю, что на самом деле я использовал режим восстановления 4, но мне бы тоже подошел 3)
Оттуда я смог запустить MariaDB со всеми моими базами данных. Я тогда побежал mysqlcheck --all-databases -p
чтобы обнаружить, что ни одна из моих баз данных не была повреждена. Отсюда мне не удалось заставить MariaDB успешно остановиться, а затем у меня возникли проблемы с его повторным запуском, поэтому я повторил процесс удаления /var/lib/mysql/
папку и запустил установку базы данных, чтобы я мог скопировать свою резервную копию обратно.
Оттуда я запустил MariaDB с принудительным восстановлением InnoDB, и как только он запустился, я сбросил все, используя команду mysqldump -u root -p --all-databases > alldb.sql
. Затем я принудительно остановил MariaDB, поскольку он не остановился должным образом, а затем перезагрузился. Я удалил MariaDB, удалил свой /var/lib/mysql/
и переименовал мой /etc/my.cnf
, затем переустановил MariaDB. Как только я запустил его заново, я импортировал свои выгруженные базы данных, используя mysql -u root -p < alldb.sql
и сбросить привилегии в оболочке MySQL, используя FLUSH PRIVILEGES;
и теперь все работает отлично, без потери данных.
Поскольку я использую CentOS, мне приходилось делать кое-что, что касается SELinux. В основном я просто следил за тем, что говорит всплывающий диалог диагностики, а затем повторно запускал команды SELinux, которые я делал изначально при установке моего сервера Nextcloud, чтобы получить все разрешения правильно.
Похоже, что хранилище базы данных повреждено. Выполните восстановление из резервной копии и поставьте на жесткие диски большой знак «не отключайте от сети во время работы».