服务器崩溃后 MariaDB 无法启动。没有错误日志

服务器崩溃后 MariaDB 无法启动。没有错误日志

我的 CentOS 7 服务器最近因在运行时拔掉硬盘而崩溃,现在 MariaDB 无法启动,而且我没有收到任何错误日志。

服务器上的其他一切似乎都运行良好,但在磁盘上运行xfs_repair(类似于fsckxfs)没有帮助。以下是我收到的具体错误:

$ 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

答案1

几天后,我终于修好了它,没有任何数据丢失。正如我所料,这次停电并没有造成数据丢失。我做了很多事情来尝试解决这个问题,但我认为以下方法可以解决这个问题:

我重命名了我的/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 shell 中刷新了权限FLUSH PRIVILEGES;,现在一切都运行良好,没有数据丢失。

由于我运行的是 CentOS,因此我必须在此过程中执行一些 SELinux 操作。我主要只是按照弹出诊断对话框的操作进行操作,然后重新运行我在安装 Nextcloud 服务器时最初执行的 SELinux 命令,以获得正确的所有权限。

答案2

看起来数据库存储已损坏。从备份中恢复,并在硬盘上贴上大标志,“运行时请勿拔掉电源”。

答案3

就我而言,将 /var/lib/mysql 文件移至 /var/lib/mysql-save 并重新启动也效果很好,因为 mysql 启动正常。

然后查看 mysql 中的两个目录:

ls /var/lib/mysql
total 110628
-rw-rw---- 1 mysql mysql    16384 Dec  5 12:32 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Dec  5 12:32 aria_log_control
-rw-rw---- 1 mysql mysql      976 Dec  5 12:32 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 Dec  5 12:32 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Dec  5 12:32 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Dec  5 12:29 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Dec  5 12:30 multi-master.info
drwx------ 2 mysql mysql     4096 Dec  5 12:29 mysql
drwx------ 2 mysql mysql     4096 Dec  5 12:29 performance_schema
drwx------ 2 mysql mysql     4096 Dec  5 12:29 test

在我的保存目录中:

ls -l /var/lib/mysql-saved
-rw-rw---- 1 mysql mysql    16384 Dec  5 12:23 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 Dec  5 12:23 aria_log_control
-rw-r--r-- 1 root  root         0 Dec  4 21:43 debian-10.3.flag
-rw-rw---- 1 mysql mysql     2372 Dec  5 12:23 ib_buffer_pool
-rw-rw---- 1 mysql mysql 79691776 Dec  5 12:23 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Dec  5 12:23 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Dec  4 20:23 ib_logfile1
-rw-rw---- 1 mysql mysql        0 Sep  1  2020 multi-master.info
drwx------ 2 mysql mysql     4096 May 11  2021 mysql
drwx------ 2 mysql mysql     4096 Jun 21 09:30 owncloud
drwx------ 2 mysql mysql     4096 May 11  2021 performance_schema
-rw-rw---- 1 mysql mysql        0 Dec  4 18:09 tc.log

Owncloud 是我的数据库,但是这个 tc.log 文件是什么?原来它是 mysql 用来记录进程中可能需要在崩溃后重新启动的事务的事务日志。

好吧,显然 mysql 不能妥善处理零长度的 tc.log 文件;它只是退出。因此删除该文件,一切就会正常启动。

你问的是哪个版本?:

mysql --version
mysql  Ver 15.1 Distrib 10.3.31-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

相关内容