Linux MariaDB 故障恢复实战指南
一 快速定位与应急
systemctl status mariadb.service、journalctl -xemkdir -p /var/log/mariadb && chown -R mysql:mysql /var/log/mariadbmkdir -p /var/run/mariadb && chown -R mysql /var/run/mariadbmysql_install_db --user=mysql --datadir=/var/lib/mysql --force && chown -R mysql:mysql /var/lib/mysqltail -n 50 /var/log/mariadb/mariadb.logsystemctl start mariadb、firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload。二 非正常关机导致的 InnoDB 恢复
mariadbd --user=mysql --datadir=/var/lib/mysql --skip-grant-tables --skip-networking --innodb-force-recovery=1mysqldump -u root --single-transaction --databases 需要的库 > backup.sqlapt purge mariadb-* mysql-common galera-4 && rm -rf /var/lib/mysql/* && apt install mariadb-servermysql < backup.sqlmariadb-secure-installationinnodb_force_recovery > 0 仅用于“只读导出”,严禁在恢复模式下运行业务写入三 使用 mariabackup 的物理恢复(推荐用于生产)
mariabackup --backup --target-dir=/data/mysqlbak --user=backup --password=xxxmariabackup --prepare --target-dir=/data/mysqlbakmariabackup --copy-back --target-dir=/data/mysqlbakmariabackup --move-back --target-dir=/data/mysqlbakchown -R mysql:mysql /var/lib/mysqlsystemctl start mariadb四 Galera 集群异常与脑裂处置
safe_to_bootstrap: 0 改为 1),然后启动:mysqld --wsrep-new-clustermysqld --defaults-file=/etc/my.cnf.d/server.cnf --user=mysql --wsrep-new-cluster --wsrep-cluster-address="gcomm://"systemctl start mariadb五 常见故障速查表
| 症状 | 快速检查 | 处理要点 |
|---|---|---|
| 服务起不来,状态报错 | systemctl status mariadb、journalctl -xe、tail /var/log/mariadb/mariadb.log |
修复目录/权限(如 /var/log/mariadb、/var/run/mariadb)、初始化数据目录、必要时 mysql_install_db |
| InnoDB 崩溃无法启动 | 日志含 “not shut down normally”“log sequence number mismatch” | 只读强制恢复导出:--innodb-force-recovery=1..6 → mysqldump → 重装/重建 → 导入验证 |
| 磁盘满导致卡死/启动失败 | df -h |
清理或扩容分区,再启动 |
| 无法远程连接 | ERROR 2003 (HY000) |
systemctl start mariadb、firewall-cmd 放行 3306、检查 bind-address |
| 表损坏/索引异常 | mysqlcheck 报错 |
mysqlcheck --auto-repair --check --optimize 库名 表名 |
| 无备份且仅文件在 | 数据文件(如 ibdata1、库目录)尚在 | 在相近版本实例上做“物理移植”:停库→拷文件→改属主→启动→立即 mysqldump 导出→重建库导入 |