MySQL 拒絕啟動,錯誤日誌是唯一真相。本文記錄兩類典型故障:InnoDB 數據頁損壞需強制恢復、修改 datadir 觸發 SELinux 拒絕訪問,提供分級排查步驟與修復命令。
InnoDB: Page checksum mismatch ... InnoDB: Database page corruption on disk or a failed file read ... InnoDB: You may have to recover from a backup.
df -h、inode df -i。my.cnf 配置無誤。/var/log/mysqld.log 或 datadir/*.err),定位損壞表/頁。在 [mysqld] 區段添加 innodb_force_recovery = N(1-6 遞增),重啟後唯讀模式導出數據,再重建。
| 級別 | 常量 | 行為 | 風險 |
|---|---|---|---|
| 1 | SRV_FORCE_IGNORE_CORRUPT | 忽略損壞頁,繼續啟動 | 低,可能讀到髒數據 |
| 2 | SRV_FORCE_NO_BACKGROUND | 阻止主線程 purge/merge | 中,事務未清理 |
| 3 | SRV_FORCE_NO_TRX_UNDO | 不執行事務回滾 | 高,未提交事務視為提交 |
| 4 | SRV_FORCE_NO_IBUF_MERGE | 不合併插入緩衝 | 高,二級索引可能不一致 |
| 5 | SRV_FORCE_NO_UNDO_LOG_SCAN | 不掃描 undo log | 極高,數據一致性無保障 |
| 6 | SRV_FORCE_NO_LOG_REDO | 不執行 redo log 前滾 | 最高,僅作最後嘗試 |
# 1. 編輯配置 vim /etc/my.cnf # [mysqld] 下添加 innodb_force_recovery = 6 innodb_purge_threads = 0 # 2. 重啟 systemctl restart mysqld # 3. 立即邏輯導出 mysqldump -u root -p --all-databases --single-transaction > /backup/full_$(date +%F).sql # 4. 恢復配置並重建 # 移除 innodb_force_recovery,恢復 innodb_purge_threads=1 systemctl restart mysqld mysql -u root -p < /backup/full_$(date +%F).sql
innodb_checksum_algorithm=crc32、innodb_flush_method=O_DIRECT。InnoDB: Operating system error number 13 in a file operation. InnoDB: The error means mysqld does not have the access rights to the directory. InnoDB: File name /usr/local/project/etc/data/ibdata1 InnoDB: Cannot continue operation.
CentOS/RHEL 預設啟用 SELinux Enforcing 模式,mysqld_t 域僅允許訪問標準標籤目錄(var_lib_t)。新目錄無正確標籤,被強制拒絕。
semanage fcontext -a -t mysqld_db_t "/usr/local/project/etc/data(/.*)?" restorecon -Rv /usr/local/project/etc/data
setenforce 0 # 永久修改 /etc/selinux/config: SELINUX=permissive
vim /etc/selinux/config SELINUX=disabled # 需重啟 OS
chown -R mysql:mysql /usr/local/project/etc/data chmod -R 750 /usr/local/project/etc/data
systemctl status mysqld -l 看最近 50 行日誌。journalctl -u mysqld -f 實時跟蹤。netstat -ltnp | grep 3306。mysqld --validate-config(5.7+)或 mysqld --help --verbose 2>&1 | head -20。ls -laZ datadir 確認擁有者、SELinux 標籤。遇到啟動失敗,先看日誌、再對照清單、最小變更、驗證恢復,切忌盲目重裝或刪數據目錄。