zoukankan      html  css  js  c++  java
  • 数据库Galera集群中数据库无法启动

    一、背景

    本环境使用的是openstack docker 容器平台,所有服务都是运行在docker 容器中,数据库使用的mariadb(1主2从),由于断电导致数据库无法启动。

    二、原因分析

    查看数据库日志,发现大量如下报错:

    InnoDB: is in the future! Current system log sequence number 8716.
    InnoDB: Your database may be corrupt or you may have copied the InnoDB
    InnoDB: tablespace but not the InnoDB log files. See
    InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
    InnoDB: for more information.
    2020-01-06 10:56:46 139986236172480 [Note] InnoDB: 128 rollback segment(s) are active.
    2020-01-06 10:56:46 7f5115e168c0 InnoDB: Error: page 0 log sequence number 29661217162
    InnoDB: is in the future! Current system log sequence number 8716.
    InnoDB: Your database may be corrupt or you may have copied the InnoDB
    InnoDB: tablespace but not the InnoDB log files. See
    InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
    InnoDB: for more information.
    

    ***初步判断由于异常断电,可能导致数据库文件出现了丢失。

    三、解决思路

    根据日志找到这个http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html,里面是官网给出的强制数据库innodb 恢复的操作。按照这个进行尝试(详细可以看链接)

    四、解决过程

    1、首先查看哪个节点的数据库文件是最新的,也就是主节点

    //在数据库节点上执行如下,找到seqno最大的节点,我的是control3
    cat  grastate.dat |grep seqno
    

    2、修改数据库文件

    [root@control3] vim galera.conf
    ...
    innodb_force_recovery = 1
    warep_on=OFF
    ...
    

    3、删除control3节点ib_logfile文件

    rm   ib_logfile*  -f
    

    4、重启数据库

    docker restart mariadb
    

    ****如果数据库还是无法启动 ,那么将innodb_force_recovery 的修改成2,然后再依次执行步骤3和步骤4.

    ****按照官网的建议, innodb_force_recovery 这个值,按照官方文档,要求从1-6依次尝试,直到数据库能起来为止,1-3 数据不会丢失,4-6数据会永久性丢失。

    5、当数据库能起来之后,我们可以将整个数据导出,然后重启安装数据库,再建整个数据库回填即可。

    这里省略数据库导入导出操作

    注意:可能由于文件丢失,导致innoDB 出现问题,也就是现有数据库没法正常使用。只能重新部署,不管什么方法,都是尽量导出数据,保证数据不丢失,然后导入新的集群。我这里只是其中一种,也可以使用数据库文件进行恢复数据,这里可以看下另外的文章 https://medium.com/magebit/recover-innodb-database-from-frm-and-ibd-files-99fdb0deccad .

  • 相关阅读:
    1.JavaScript面试
    input框限制只能输入正整数、字母、小数、汉字
    js清除浏览器缓存的几种方法
    document的createDocumentFragment()方法
    javascript画直线和画圆的方法(非HTML5的方法)
    input框限制只能输入正整数,逻辑与和或运算
    user-select : 保护版权内容的简单方案
    JQuery中$.ajax()方法参数详解
    字符串转化为json方法
    原型和闭包重点
  • 原文地址:https://www.cnblogs.com/yanling-coder/p/12160453.html
Copyright © 2011-2022 走看看