20 年にわたる Linux 技術の専門企業 400-9696-513 24 時間 365 日のテクニカルサポート

常见故障

来自一线运维现场的典型 Linux 故障案例,故障现象、根因分析与处置方案,供您参考自查。

严重数据库

升级到 MySQL 8.4 后网站/应用数据库连接失败(认证插件不兼容)

故障现象

生产库从 8.0 升级到 8.4 LTS 后,PHP 网站、Navicat 等旧客户端报数据库连接错误,网站直接宕机;日志常见 “Authentication plugin 'caching_sha2_password' cannot be loaded” 或 “Plugin 'mysql_native_password' is not loaded”(ERROR 1524)。

查看原因与解决方案
故障原因

MySQL 8.4 默认禁用 mysql_native_password 插件,改用 caching_sha2_password;库内老账号若仍使用旧插件,升级后直接失效。PHP 7.4 的 mysqlnd 不支持 caching_sha2_password,连接必然失败。另外密码含 ! 等字符在 Bash 执行 SQL 时会被历史展开报 “event not found”。

解决方案

1) 升级前必做:逐账号检查 SELECT user,host,plugin FROM mysql.user; 对需兼容老客户端的账号提前切换:ALTER USER 'dbuser'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码';(密码含 ! 时用 set +H 关闭历史展开,或改用 heredoc 执行 SQL)。
2) PHP 7.4 等老应用:账号需显式 IDENTIFIED WITH mysql_native_password BY '密码';(MySQL 8.4 默认禁用该插件,可在配置 mysql_native_password=ON 后重启启用,建议尽快升级客户端而非长期依赖)。
3) 升级后验证:用真实客户端连接测试,确认所有调用方(网站、脚本、BI)均可用,再对外放开流量。

适用平台:MySQL 8.0 → 8.4 LTS查阅 0 次
较重数据库

MySQL 8.4 启动失败:配置文件含已废弃/移除参数

故障现象

升级到 8.4 或重启后 mysqld 无法启动,错误日志报 “unknown variable” / “Variable is deprecated” 或 “Server startup failed”。

查看原因与解决方案
故障原因

8.4 移除了部分旧参数(典型如 expire_logs_days,改为 binlog_expire_logs_seconds)以及若干已废弃系统变量;从 8.0 升级时历史遗留的 my.cnf 配置未清理,导致启动直接失败。

解决方案

1) 升级前预检:用目标版本 mysqld 校验配置 mysqld --validate-config --defaults-file=/etc/my.cnf,提前发现非法参数。
2) 逐项对照 8.4 移除参数清单清理 my.cnf;例如把 expire_logs_days = 10 改为 binlog_expire_logs_seconds = 864000。
3) 升级前用 SELECT user,host,plugin FROM mysql.user; 核对账号插件,并确认 sql_mode 差异,确保配置与版本匹配后再上线。

适用平台:MySQL 8.4 LTS查阅 0 次
严重数据库

ERROR 1040 Too many connections 连接数打满,新连接被拒绝

故障现象

应用大量报 “Too many connections”,新连接无法建立,网站/接口大面积 5xx;SHOW STATUS LIKE 'Threads_connected' 接近 max_connections(默认 151)。

查看原因与解决方案
故障原因

瞬时流量高峰超过上限;应用连接泄漏(获取连接后未关闭)、连接池配置不合理;慢查询长时间占用连接不释放,导致连接堆积。

解决方案

1) 紧急恢复(无需重启):用具有 CONNECTION_ADMIN/SUPER 权限的账号登录,SHOW PROCESSLIST; 找出 Sleep 状态且 Time 较大的空闲连接并 KILL ; 释放槽位;或批量:SELECT CONCAT('KILL ',id,';') FROM information_schema.processlist WHERE command='Sleep' AND time>60;
2) 调大上限:动态 SET GLOBAL max_connections = 500;(或写入 my.cnf 重启),但需结合内存评估,避免盲目翻倍。
3) 根因治理:修复连接泄漏、合理设置连接池、开启 slow_query_log 并配置日志轮转优化慢查询,必要时引入线程池。

适用平台:MySQL 5.7 / 8.0 / 8.4查阅 0 次
较重数据库

客户端报错 caching_sha2_password 无法加载 / ERROR 2061 需要安全连接

故障现象

旧版 Navicat、老 PHP 驱动(mysqlnd 不支持)、Node.js mysql 包等连接时报 “Authentication plugin 'caching_sha2_password' cannot be loaded”(ERROR 2059)或 “Authentication requires secure connection”(ERROR 2061);RDS 从 8.0 升 8.4 后新建账号连不上。

查看原因与解决方案
故障原因

MySQL 8.0 起默认认证插件为 caching_sha2_password,旧客户端不支持;ERROR 2061 多发生在客户端未走 TLS 且服务端认证缓存为空(重启/故障切换/flush 后首登需 TLS 或服务端 RSA 公钥);RDS 8.4 新账号默认使用 caching_sha2_password。

解决方案

1) 升级客户端/驱动:PHP 升级到支持 caching_sha2 的版本,或改用 mysql2(Node)等兼容驱动;Navicat 升级到较新版本。
2) 临时兼容:对特定账号 ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; 自管 MySQL 8.4 若需启用旧插件可在配置 mysql_native_password=ON 后重启(不推荐长期使用)。
3) ERROR 2061:在驱动中开启 TLS(推荐);或允许获取服务端公钥(如 mysql --get-server-public-key、驱动对应选项)。RDS 用自定义参数组设置 authentication_policy。

适用平台:MySQL 8.0 / 8.4(含阿里云 RDS、Amazon RDS)查阅 0 次
较重数据库

MySQL 内存占用持续升高、重启后才回落(疑似内存泄漏)

故障现象

监控显示 mysqld 的 RES 持续增长到 80%+ 且不再回落,free 可用内存被吃满,常被误判为内存泄漏。

查看原因与解决方案
故障原因

在 Linux 上当 mysqld 是系统中最大的内存消费者时,glibc 的 malloc 在释放内存后通常不会把内存归还给操作系统,而是保留在进程内供下次分配复用——这是 malloc 的优化行为,并非真正的泄漏(官方用 valgrind/ASAN 验证未现泄漏)。此外 innodb_buffer_pool_size 过大、连接数过高也会让常驻内存偏高。

解决方案

1) 先用 valgrind / ASAN 或 sysbench 压测确认是否真有泄漏,多数情况是 malloc 行为而非泄漏。
2) 合理设定 innodb_buffer_pool_size(通常物理内存的 50%~70%),避免过大;将该值动态调小再调回可临时释放部分内存(注意会引起短暂慢查询)。
3) 控制 max_connections 与每个连接的缓冲(sort/join/read buffer)减少常驻开销;评估真实内存需求并考虑扩容。

适用平台:MySQL 8.x on Linux查阅 0 次
较重数据库

InnoDB 锁等待超时(ERROR 1205)与死锁(ERROR 1213)

故障现象

应用报错 “Lock wait timeout exceeded; try restarting transaction”(ERROR 1205)或 “Deadlock found when trying to get lock; try restarting transaction”(ERROR 1213);涉及同一批数据的并发写入偶发失败、事务被回滚。

查看原因与解决方案
故障原因

并发事务对同一行/索引范围加锁顺序不一致;长事务未及时提交、持有锁时间过长;大批量 UPDATE/DELETE 一次性锁住过多行触发锁等待超时;代码在捕获异常后未即时回滚或释放连接。

解决方案

1) 临时缓解:SET GLOBAL innodb_lock_wait_timeout = 50;(默认即 50 秒,调大仅作临时手段),并排查持有锁的事务:SELECT * FROM information_schema.innodb_trx;
2) 永久治理:缩短事务、避免在事务内做远程调用;多个事务统一“按主键升序”访问表/行以降低死锁概率;及时 COMMIT/ROLLBACK。
3) 诊断死锁:在 my.cnf 设 innodb_print_all_deadlocks = ON,死锁详情会写入错误日志;大批量操作拆分为小批次(如每批 1000 行)。

适用平台:MySQL 5.7 / 8.0 / 8.4(InnoDB)查阅 0 次
严重数据库

MySQL/MariaDB 服务无法启动

故障现象

systemctl start mysqld 失败,错误日志出现 "InnoDB: Unable to lock ./ibdata1" 或 "Tablespace is missing",业务数据读写中断。

查看原因与解决方案
故障原因

异常断电导致 InnoDB 表空间损坏、数据目录权限错误、磁盘满、my.cnf 参数配置不当(如 innodb_buffer_pool_size 超过物理内存)、残留的崩溃恢复锁文件。

解决方案

1) tail -n 100 /var/log/mysqld.log 定位具体错误;2) 确认磁盘空间与 /var/lib/mysql 属主(mysql:mysql);3) 表空间损坏时先备份 datadir,再以 innodb_force_recovery=1~6 尝试启动并导出数据;4) 恢复后检查并修正 my.cnf;5) 建立主从/定期备份策略。

适用平台:RHEL/CentOS/MySQL 5.7/8.0查阅 1 次
严重数据库

PostgreSQL 事务 ID 回卷(wraparound)导致数据库进入只读安全模式

故障现象

数据库报错 database is not accepting commands to avoid wraparound of transaction ID,自动进入只读模式,所有写入被拒绝。

查看原因与解决方案
故障原因

数据库年龄 age(datfrozenxid) 逼近 20 亿上限,autovacuum 未能及时对旧数据执行 VACUUM FREEZE,达到阈值后 PostgreSQL 主动进入只读保护。

解决方案

1) 查 SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY 2 DESC;2) 紧急对最老库执行 VACUUM FREEZE(大库耗时久,需低峰进行);3) 调大 autovacuum_freeze_max_age 并调优 autovacuum 频率,确保自动清理跟上;4) 建立监控告警,提前发现 age 增长。

适用平台:PostgreSQL 16 / 15 / 14查阅 0 次
较重数据库

PostgreSQL 锁等待超时与死锁(deadlock detected)

故障现象

会话长时间挂起,报错 deadlock detected / 查询因锁等待超时被取消;业务出现卡顿或事务回滚。

查看原因与解决方案
故障原因

多个事务并发更新同一行或同一表,加锁顺序不一致导致死锁;或长事务持有锁未释放,阻塞后续事务(wait_event_type=Lock)。

解决方案

1) 查阻塞源:SELECT * FROM pg_locks bl JOIN pg_stat_activity ... 或使用 pg_blocking_pids(pid);2) 取消或终止阻塞:pg_cancel_backend(pid) / pg_terminate_backend(pid);3) 应用层统一加锁顺序、缩短事务、避免长事务;4) 用 EXPLAIN 优化慢查询,减少锁持有时间。

适用平台:PostgreSQL 16 / 15 / 14查阅 0 次
严重数据库

PostgreSQL 复制槽失效导致 WAL 堆积、磁盘被写满

故障现象

磁盘使用率飙升直至 100%,数据库进入只读或拒绝写入;pg_wal 目录持续增长且不被回收。

查看原因与解决方案
故障原因

存在 inactive 复制槽(例如备库已下线但槽未删除),复制槽会阻止 WAL 回收,checkpointer 无法清理旧 WAL,最终占满磁盘。PostgreSQL 磁盘满即停止接受写入。

解决方案

1) 查 SELECT slot_name, active, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) FROM pg_replication_slots;2) 确认备库确实不再需要后执行 SELECT pg_drop_replication_slot('槽名');3) 释放空间后数据库恢复写入;4) 监控复制槽 active 状态,备库下线务必清理槽。切勿手动 rm pg_wal 文件。

适用平台:PostgreSQL 16 / 15 / 14查阅 0 次
严重数据库

PostgreSQL 连接数打满:FATAL: sorry, too many clients already

故障现象

新连接被拒绝,报错 too many clients / remaining connection slots are reserved,业务大面积不可用。

查看原因与解决方案
故障原因

max_connections 设置过小,并发连接超过上限;或存在连接泄漏(连接未释放)、大量空闲连接(state=idle)堆积。

解决方案

1) 紧急释放空闲连接:SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state='idle' AND ...;2) 调大 max_connections(注意每连接占用内存,需结合机器内存评估);3) 长期方案部署连接池 PgBouncer(transaction 模式)并让应用走连接池;4) 排查应用侧连接泄漏、缩短空闲超时。

适用平台:PostgreSQL 16 / 15 / 14查阅 0 次
严重数据库

PostgreSQL 连接失败:pg_hba.conf 认证不匹配或监听地址未放开

故障现象

应用或客户端连不上数据库,报错 FATAL: no pg_hba.conf entry for host / password authentication failed / could not connect to server: Connection refused;本地和远程均无法连接。

查看原因与解决方案
故障原因

常见原因:① postgresql.conf 中 listen_addresses 仍为 localhost 未放开为 *;② pg_hba.conf 的 METHOD 与客户端不匹配(如服务端用 scram-sha-256 而老客户端只支持 md5);③ 连接地址、端口、用户名或密码错误;④ 防火墙未放行 5432 端口。

解决方案

1) postgresql.conf 设 listen_addresses=*;2) 在 pg_hba.conf 增加对应条目(如 host all all 0.0.0.0/0 scram-sha-256)后执行 SELECT pg_reload_conf() 或 systemctl reload postgresql;3) 用 sudo -u postgres psql 登录后 ALTER USER 用户名 WITH PASSWORD '新密码',并统一 password_encryption 与客户端;4) 用 ss -tlnp | grep 5432 与 telnet 地址 5432 确认监听与网络;云环境还要检查安全组。

适用平台:PostgreSQL 16 / 15 / 14查阅 0 次
严重数据库

GaussDB 数据库节点故障:系统盘只读 / 节点宕机

故障现象

单数据库节点无法登录或启动,数据库无法正常运行;或节点系统盘变为只读,影响数据读写。

查看原因与解决方案
故障原因

单节点 OS 故障(如系统盘只读)、硬件故障或进程假死;多节点同批次硬件故障也可能出现。

解决方案

1) 用同镜像重建故障 VM 并分配相同 IP,重装数据库;2) 通过 gs_ctl build 从主库同步数据恢复备节点;3) 多节点故障时用 service gaussdb/had query 确认主备角色,必要时 STOP Zone 停止故障 zone 对外服务;4) 无法自行恢复时联系技术支持。

适用平台:华为云 GaussDB / GaussDB(DWS)查阅 0 次
较重数据库

GaussDB 添加节点 / 存储扩容失败(底层资源不足)

故障现象

控制台上添加节点、存储扩容操作失败,事件提示 GaussDBV5ExpandClusterFailed 或 GaussDBV5EnlargeVolumeFailed。

查看原因与解决方案
故障原因

一般由于底层资源不足(如可用节点、磁盘规格或 EIP 资源紧张)导致。

解决方案

1) 在控制台右上角提交工单协调底层资源;2) 删除添加失败的节点后重新尝试添加;3) 若为磁盘满导致业务中断,先扩容磁盘;4) 扩缩容前评估资源配额与维护窗口。

适用平台:华为云 GaussDB / GaussDB(DWS)查阅 0 次
严重数据库

GaussDB 主备实例故障:备机升主失败 / HA 切换异常

故障现象

HA 模式下备机升主失败,实例主备异常,业务连接中断或读写异常;控制台提示实例主备故障。

查看原因与解决方案
故障原因

主备切换过程中底层资源或网络异常,或数据库发生过主备切换但 balanced 状态未恢复,导致升主流程受阻。

解决方案

1) 在管理控制台查看实例状态与主备信息,必要时尝试重启实例;2) 确认底层资源(CPU、内存、磁盘、网络)充足;3) 等待 balanced 状态恢复;4) 自动切换失败且业务中断时,及时提交工单由技术支持介入;重大操作前做好备份。

适用平台:华为云 GaussDB / GaussDB(DWS)查阅 0 次
较重数据库

GaussDB 备份任务失败:管道残留 / 节点时间不一致 / 元数据权限

故障现象

备份任务报错 Exception OSError: (12...) 管道残留、Cluster state is not balance、connect client timeout、Metadata 文件夹创建失败等,无法完成备份。

查看原因与解决方案
故障原因

① 数据库或任务崩坏导致 .fifo 管道文件残留;② 各节点时间不一致超过 2 秒,SSL 证书尚未生效,连接备份主节点失败;③ 数据库用户对元数据存储目录权限不足;④ 实例发生过主备切换且 balanced 尚未恢复为 true。

解决方案

1) 备份前到客户端主机 /home/omm/ 下删除残留 .fifo 文件;2) 用 NTP 同步各节点时间后重新发起;3) 修改元数据存储路径目录属主或权限,使数据库用户可读写;4) 等待数据库 balanced 状态恢复 true 后再备份;5) 仍失败则提交工单由华为云协助。

适用平台:华为云 GaussDB / GaussDB(DWS)查阅 0 次
严重数据库

GaussDB 实例连接失败:安全组 / VPC / 磁盘满只读

故障现象

客户端无法连接 GaussDB 实例,报错如 gsql: ERROR: dn_xxxx: Invalid username/password,或连接超时;也可能实例状态显示异常。

查看原因与解决方案
故障原因

常见原因:① 内网连接时 ECS 与 GaussDB 不在同一区域或 VPC;② 安全组未放通入方向规则(端口/源 IP);③ 公网连接未绑定或未正确配置 EIP、网络 ACL 拦截;④ 连接地址、端口、用户名或密码错误;⑤ 实例磁盘空间满,内核将其置为只读,无法写入。

解决方案

1) 控制台确认实例状态为正常,异常则尝试重启;2) 内网连接需同区域同 VPC,跨 VPC 建对等连接;3) 安全组放行 GaussDB 端口(如 8000)的入方向;4) 公网检查 EIP 绑定与网络 ACL;5) 用 telnet 地址 端口 验证网络;6) 磁盘满时扩容磁盘解除只读。

适用平台:华为云 GaussDB / GaussDB(DWS)查阅 0 次
较重数据库

MariaDB 表损坏修复:InnoDB force recovery / MyISAM REPAIR

故障现象

查询或启动时报表损坏、数据读不出,或出现 Incorrect information in file 等错误。

查看原因与解决方案
故障原因

异常关闭、磁盘损坏、DDL 中断(如 MDEV-37795 的 DDL_LOG Got error 1033)等导致 InnoDB / MyISAM 表结构或数据损坏。

解决方案

1) InnoDB:在 [mysqld] 加 innodb_force_recovery=1 到 6(数值越高越激进)启动导出数据,恢复后务必重建实例;2) MyISAM:用 myisamchk -c -r 修复索引,或在实例内 CHECK TABLE / REPAIR TABLE(先停库备份);3) 修复前务必备份,避免二次损坏;4) 对 DDL 崩溃残留,定位 .frm 或中间文件并人工清理后重启。

适用平台:MariaDB 10.11 / 10.6 / 10.4查阅 0 次
较重数据库

MariaDB 磁盘空间耗尽:binlog 堆积 / 数据目录满

故障现象

磁盘使用率 100%,写入失败或数据库拒绝服务;binlog 文件持续增长。

查看原因与解决方案
故障原因

① 二进制日志未清理(max_binlog_size / expire_logs_days 未配置或过大),无限增长;② 数据目录所在分区被数据或临时文件占满。

解决方案

1) SHOW BINARY LOGS 查看,按需 PURGE BINARY LOGS BEFORE 'YYYY-MM-DD';2) 配置 max_binlog_size 与 expire_logs_days(或 binlog_expire_logs_seconds)自动清理;3) 数据目录满:清理无用文件、归档历史数据,或迁移 datadir 至更大磁盘并更新权限后重启;4) 启用并分析慢查询日志优化空间占用。

适用平台:MariaDB 10.11 / 10.6 / 10.4查阅 0 次
较重数据库

MariaDB 主从复制异常:位点不一致 / Galera 加入集群失败

故障现象

主从延迟、复制中断或报错;SHOW SLAVE STATUS 显示 Slave_IO / SQL 异常;Galera 节点无法加入集群。

查看原因与解决方案
故障原因

① 主从复制位点(Master_Log_File / Read_Master_Log_Pos 与 Relay 不对应)错位;② 大事务或网络抖动导致复制中断;③ Galera(wsrep)配置错误、节点状态异常,加入集群失败。

解决方案

1) SHOW SLAVE STATUS 核对 Master 与 Relay 位点,必要时重设复制位点并重启 IO / SQL 线程;2) 优化网络与从库负载;3) Galera 加入失败可先注释集群配置以单机模式启动修复,再恢复集群配置;4) 配置复制重试与监控告警。

适用平台:MariaDB 10.11 / 10.6 / 10.4查阅 0 次
严重数据库

MariaDB 服务崩溃:InnoDB 信号量等待 / 被 OOM 杀掉 / SEGV

故障现象

mariadbd 进程异常退出,日志出现 FATAL InnoDB: Semaphore wait has lasted > 600 seconds、got signal 11 (SEGV),或被 SIGKILL。

查看原因与解决方案
故障原因

① InnoDB 信号量等待超时(死锁、挂起)主动崩溃;② 内存不足被 OS 的 OOM Killer 杀死(MariaDB 内存占用大,常被优先选杀);③ 访问非法内存(SEGV)、CPU 不支持的指令(SIGILL)等 bug;④ 硬件故障(磁盘、RAM 损坏)。

解决方案

1) 信号量等待:收集全线程 backtrace,排查长事务与锁等待;2) OOM 被杀:查主机日志确认内存不足,优化 buffer pool 与连接数,扩容内存;3) SEGV / bug 类:提供 SQL、EXPLAIN、SHOW CREATE TABLE 与 core 文件向官方报 bug;4) 硬件故障需检修磁盘或 RAM;systemd 默认 SendSIGKILL=No 可避免慢关闭被强杀。

适用平台:MariaDB 10.11 / 10.6 / 10.4查阅 0 次
严重数据库

MariaDB 启动失败:InnoDB 损坏 / MyISAM 系统表损坏 / systemd 限制

故障现象

systemctl start mariadb 失败,错误日志报 InnoDB: Database page corruption、mysql 系统表损坏,或启动超时、被 Permission Denied 拒绝。

查看原因与解决方案
故障原因

① InnoDB 数据页损坏(磁盘故障、异常断电);② mysql 库 MyISAM 系统表损坏,默认直接无法启动;③ systemd 默认 ProtectHome=true 阻止访问 home/root,ProtectSystem=full 限制写目录,启动超过 TimeoutStartSec=90 秒也失败;④ SELinux / AppArmor 拦截非默认路径访问或端口。

解决方案

1) 看错误日志定位:journalctl -xe 或 tail /var/log/mariadb/mariadb.log;2) InnoDB 损坏可设 innodb_force_recovery=3 进入恢复模式导出数据后重建实例;3) MyISAM 系统表损坏用 myisam_recover_options 强制修复或 myisamchk 重建索引;4) systemd 限制:在 unit 中设 ProtectHome=off、ProtectSystem=off、调大 TimeoutStartSec;5) SELinux 设 permissive 排查,AppArmor 加 alias 并 restart apparmor。

适用平台:MariaDB 10.11 / 10.6 / 10.4查阅 0 次
较重数据库

OceanBase 副本故障与备租户重建(SOP 应急)

故障现象

集群中某副本故障、租户可用性受威胁;或备租户数据异常、同步中断无法恢复。

查看原因与解决方案
故障原因

① 副本所在 OBServer 故障,需启用仲裁服务保证租户可用;② 备租户数据损坏或同步异常,原备租户无法使用。

解决方案

1) 副本故障:在多数派受影响前启用仲裁服务(Arbitration Service)保证租户可用;2) 备租户重建:通过 OCP 标准运维流程(SOP)重建备租户——备份主租户、解耦主备、删除原备租户、基于主租户数据新建备租户并验证同步;3) 关键步骤建议人工确认后执行;4) 日常做好备份与仲裁服务规划。

适用平台:OceanBase 4.x / 社区版查阅 0 次
严重数据库

OceanBase 网络故障:网卡 / 交换机 / 机房网络异常

故障现象

机器连接不通、机房网络中断、网络丢包率高或延迟高,集群出现多节点异常。

查看原因与解决方案
故障原因

① 机器网卡故障或传输异常;② 机房内交换机故障;③ 机房之间网络故障;④ 多副本中多数派所在网络分区,影响可用性。

解决方案

1) 网卡故障:隔离机器并节点替换(可在 OCP 直接完成);2) 交换机故障:隔离故障交换机挂载的机器,并保证剩余机器仍构成多数派;3) 机房级故障:通过 Zone 管理 STOP / START Zone 切换流量,利用多副本高可用;4) 用 obdiag 等工具定位。

适用平台:OceanBase 4.x / 社区版查阅 0 次
严重数据库

OceanBase 意外断电导致文件损坏无法启动(无 innodb_force_recovery 等效模式)

故障现象

集群或单机因断电、磁盘故障导致本地数据文件损坏,OceanBase 无法正常启动。

查看原因与解决方案
故障原因

① 单机环境数据文件损坏,OceanBase 目前没有对外类似 MySQL innodb_force_recovery 的强制恢复模式,基本无法直接恢复;② 多数派(半数及以上副本)同时故障,恢复要求严格且有丢数据风险,暂无对外方案。

解决方案

1) 少数派文件损坏:将机器恢复后按流程重新加入原集群即可,不丢数据;2) 单机损坏:优先从定期全量备份加持续归档备份(支持 OSS、S3、COS)恢复;3) 多数派故障:评估后从备份恢复,注意有丢数据风险;4) 务必建立定期全备加日志归档的备份策略,避免无据可恢复。

适用平台:OceanBase 4.x / 社区版查阅 0 次
严重数据库

OceanBase 物理恢复失败:no enough log for restore / 备份与归档不连续

故障现象

ALTER SYSTEM RESTORE 执行失败,或租户恢复卡在 RESTORE_WAIT_LS / RESTORING 状态。

查看原因与解决方案
故障原因

① 指定的恢复终点不在可恢复窗口内,归档日志不连续,报错 -4018 no enough log for restore;② 备份集与归档日志之间出现缺口;③ 跨版本恢复不被允许(只能恢复到同版本或更高版本,如 V4.0.x 不能恢复到 V4.1.0)。

解决方案

1) 查 SELECT * FROM oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY WHERE module='physical_restore' 看错误码;2) 确认恢复终点前有可用的备份集与连续归档日志(可恢复窗口);3) 保证备份数据加日志归档连续且版本兼容;4) 卡 RESTORE_WAIT_LS 时查 __all_virtual_ls_meta_table 副本恢复状态;5) 复杂问题联系 OceanBase 技术支持。

适用平台:OceanBase 4.x / 社区版查阅 0 次
严重数据库

OceanBase OBServer 节点故障:心跳中断 / 进程 Crash / 被 OOM 杀掉

故障现象

某 OBServer 节点失联,集群告警;或 observer 进程异常退出,租户部分请求失败。

查看原因与解决方案
故障原因

① 节点宕机,心跳中断超过 server_permanent_offline_time(默认 2 小时)后被永久下线,副本被清空需全量重建;② observer 进程 Crash(bug、信号);③ 主机内存不足被 OOM Killer 杀掉;④ 网卡或交换机故障导致网络不通。

解决方案

1) 能短期修复则尽快拉起,2 小时内恢复可只追平增量;超过阈值需节点替换并重建数据;2) Crash:手动拉起加收集 core 与集群日志,必要时联系官方;3) 被 OOM:查主机与 OBServer 日志确认内存问题,扩容或调优;4) 网络故障:隔离故障机器并节点替换,保证剩余副本成多数派;可用 obdiag gather core 一键收集。

适用平台:OceanBase 4.x / 社区版查阅 0 次
遇到同类问题?立即咨询
電話で相談 送信
ホーム サービス 相談 送信