伺服器崩潰後 MariaDB 將無法啟動。沒有錯誤日誌
我的 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
文章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.sql
MySQL shell 導入我的轉儲數據庫並刷新權限,FLUSH PRIVILEGES;
現在一切正常,沒有數據失去。當我執行 CentOS 時,我不得不在此過程中做一些 SELinux 的事情。我大多只是按照彈出的診斷對話框所說的去做,然後重新執行我最初在安裝 Nextcloud 伺服器時執行的 SELinux 命令,以獲得所有權限。