当前位置: 首页 > news >正文

MySQL数据库宕机快速恢复

以下是快速恢复MySQL数据库宕机的分步指南:

1. 确认宕机原因

  • 查看MySQL错误日志

    tail -n 100 /var/log/mysql/error.log

    常见错误:

    • InnoDB: Database page corruption on disk

    • Can't connect to MySQL server on 'localhost' (111)

    • Disk is full

  • 检查系统资源

    df -h                  # 查看磁盘空间
    free -h                # 查看内存使用
    dmesg | grep -i kill   # 检查是否因OOM被系统杀死

2. 尝试快速重启MySQL

  • 强制重启服务

    systemctl stop mysql    # 正常停止(若无效则跳过)
    pkill -9 mysqld         # 强制终止进程
    systemctl start mysql

3. 处理常见故障场景

场景1:磁盘空间不足
  • 清理空间

    # 删除大文件或旧日志
    rm -rf /var/log/mysql/mysql-slow.log.*
    ​
    # 清理二进制日志(需确认无复制依赖)
    PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
场景2:InnoDB表损坏
  • 强制恢复模式: 修改/etc/my.cnf,添加:

    [mysqld]
    innodb_force_recovery = 6   # 从1到6逐级尝试,6为最高级别

    启动MySQL后导出数据:

    mysqldump -u root -p --all-databases > backup.sql

    移除innodb_force_recovery并重启,重新导入数据。

场景3:主从复制中断
  • 跳过错误或重建从库

    -- 在从库执行
    STOP SLAVE;
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
    START SLAVE;
    -- 若持续错误,考虑重新同步数据

4. 从备份恢复

  • 全量备份恢复

    # 停止MySQL
    systemctl stop mysql
    ​
    # 恢复数据文件
    cp -r /backup/mysql/data /var/lib/mysql
    chown -R mysql:mysql /var/lib/mysql
    ​
    # 启动MySQL
    systemctl start mysql
  • 增量恢复(使用二进制日志)

    mysqlbinlog --start-datetime="2023-10-01 00:00:00" /var/lib/mysql/mysql-bin.00000* | mysql -u root -p

5. 高可用切换(如有集群)

  • 主从切换

    -- 在从库提升为主库
    STOP SLAVE;
    RESET SLAVE ALL;
    SET GLOBAL read_only = OFF;
  • VIP漂移或DNS切换

    # 使用keepalived或手动修改DNS指向新主库

6. 事后优化与预防

  • 参数调优

    [mysqld]
    innodb_buffer_pool_size = 物理内存的70%
    max_connections = 1000
  • 监控告警

    • 部署Prometheus + Grafana监控MySQL状态(如线程数、慢查询、复制延迟)。

  • 定期备份验证

    # 每日全备 + 二进制日志
    mysqldump --single-transaction --master-data=2 -A > backup.sql

关键命令速查表

场景命令/操作
检查MySQL状态systemctl status mysql
强制终止进程kill -9 $(pgrep mysqld)
修复表损坏mysqlcheck -u root -p --auto-repair --optimize --all-databases
导出所有数据库mysqldump -u root -p --all-databases > backup.sql
查看当前连接SHOW FULL PROCESSLIST;
检查InnoDB状态SHOW ENGINE INNODB STATUS\G

总结

  • 优先恢复服务:快速重启 → 资源清理 → 主从切换。

  • 数据安全第一:若无法快速修复,立即从备份恢复。

  • 事后根因分析:通过日志定位根本原因,优化配置或架构。

相关文章:

  • 蓝光三维扫描技术:汽车零部件检测的精准高效之选
  • STL性能优化方法
  • 数据结构栈和队列
  • 开放生态,无限可能:耘想WinNAS 重新定义您的数字生活
  • nlohmann::json教程
  • ElasticSearch快速入门--实现分词搜索
  • docker-compose安装
  • 初始操作系统---Linux
  • 《HarmonyOS Next状态栏动画实现案例与代码解析》
  • 从node:xxx 到模块系统演进:Node.js 的过去、现在与未来的思考
  • vulhub靶场Web-Machine-N7通关攻略
  • Oracle 启用 Sql 跟踪的方式
  • 【Linux】--- 线程互斥
  • 【保姆级】阿里云codeup配置Git的CI/CD步骤
  • Spring MVC 深度解析:原理、源码剖析与实战
  • Ubuntu22.04 上安装Qt5以及编译MySQL驱动
  • 从 @SpringBootApplication 出发,深度剖析 Spring Boot 自动装配原理
  • centos 9 编译安装 rtpengine (快方式)-使用 debian12 系统自带
  • SQL 基础 BETWEEN 的常见用法
  • leetcode hot100 柱状图中的最大矩形
  • 央企通号建设集团有限公司原党委常委、副总经理叶正兵被查
  • 在越剧之乡嵊州,浙江音乐学院越剧学院成立
  • 确诊前列腺癌后,拜登首次发声
  • 俄方确认普京与特朗普将于今晚通话
  • 世卫大会连续九年拒绝涉台提案
  • A股午后回暖,三大股指涨跌互现:港口板块重新走强,两市成交近1.1万亿元