Linux

伺服器崩潰後 MariaDB 將無法啟動。沒有錯誤日誌

  • December 5, 2021

我的 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文章What to Do if MariaDB Don’t Start中所述。

我嘗試將我的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/文件夾並執行數據庫安裝的過程,以便我可以將備份複製回來。

從那裡我啟動了帶有 InnoDB 強制恢復的 MariaDB,一旦它執行,我就使用命令轉儲了所有內容mysqldump -u root -p --all-databases > alldb.sql。然後我強制停止 MariaDB,因為它無法正常停止,然後重新啟動。我解除安裝了 MariaDB,刪除了我的/var/lib/mysql/,並重命名了我的/etc/my.cnf,然後重新安裝了 MariaDB。一旦我讓它重新執行,我使用mysql -u root -p < alldb.sqlMySQL shell 導入我的轉儲數據庫並刷新權限,FLUSH PRIVILEGES;現在一切正常,沒有數據失去。

當我執行 CentOS 時,我不得不在此過程中做一些 SELinux 的事情。我大多只是按照彈出的診斷對話框所說的去做,然後重新執行我最初在安裝 Nextcloud 伺服器時執行的 SELinux 命令,以獲得所有權限。

引用自:https://serverfault.com/questions/924035