服务器异常断电后Docker中Mysql无法启动问题解决,直接安装的Mysql无法启动解决思路一致。

2023-05-16

服务器异常断电后Docker中Mysql无法启动问题解决,直接安装的Mysql无法启动解决思路一致。

    • 环境
    • 问题排查
      • 查看容器日志
      • 错误原因分析
    • 解决方法
      • innodb_force_recovery参数说明
      • 问题解决操作步骤
        • 编辑MySQL的配置文件添加innodb_force_recovery参数
          • 直接安装的Mysql添加参数
          • Docker安装的Mysql添加参数
        • 导出需要的数据库
        • 重新安装数据库
        • 导入备份的数据库

环境

  • Mysql8.0
  • CentOS7
  • Docker20.10.17

问题排查

查看容器日志

docker logs 容器ID

错误信息

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
2023-02-20 06:54:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
2023-02-20 06:54:21+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-02-20 06:54:21+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started.
mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/my.cnf at line 1.
mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/mysql.cnf at line 1.
2023-02-20T06:54:21.664201Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.23) starting as process 1
2023-02-20T06:54:21.671960Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-02-20T06:54:22.466842Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-02-20T06:54:22.888621Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2023-02-20T06:54:22.919170Z 0 [ERROR] [MY-013183] [InnoDB] Assertion failure: fut0lst.ic:86:addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA thread 140322109630208
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
06:54:22 UTC - mysqld got signal 6 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x7f9f28000b20
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 7f9f497f9bb8 thread_stack 0x46000
/usr/sbin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x2e) [0x5619f19d339e]
/usr/sbin/mysqld(handle_fatal_signal+0x31b) [0x5619f0d8d22b]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x12730) [0x7f9f9b277730]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0x10b) [0x7f9f9a9547bb]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x121) [0x7f9f9a93f535]
/usr/sbin/mysqld(+0x35624d3) [0x5619f1e914d3]
/usr/sbin/mysqld(+0x352e68b) [0x5619f1e5d68b]
/usr/sbin/mysqld(+0x352f1fc) [0x5619f1e5e1fc]
/usr/sbin/mysqld(trx_purge(unsigned long, unsigned long, bool)+0xbb) [0x5619f1e5e74b]
/usr/sbin/mysqld(srv_purge_coordinator_thread()+0x57a) [0x5619f1e2c7ba]
/usr/sbin/mysqld(std::thread::_State_impl<std::thread::_Invoker<std::tuple<Runnable, void (*)()> > >::_M_run()+0xa5) [0x5619f1bb1705]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xbbb2f) [0x7f9f9ad38b2f]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7fa3) [0x7f9f9b26cfa3]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7f9f9aa164cf]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0): Connection ID (thread ID): 0
Status: NOT_KILLED

错误原因分析

数据库断电的时候,有个事务没做完就断电了,正常情况下再次启动数据库的时候,会进行事务恢复,但是有个表的 page 坏了,重做事务的时候做不了。
官方的意思:大概是没救了!只能导出数据重新安装,问题是已经无法正常启动了,MySQLDump无法备份;

解决方法

编辑MySQL的配置文件并在配置文件中的[mysqld]中添加:innodb_force_recovery 参数以只读方式启动,调整整个InnoDB存储引擎的恢复状况,innodb_force_recovery参数的值从 1-6 依次尝试,恢复等级越来越强。

innodb_force_recovery参数说明

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况,默认值为0,表示当需要恢复时执行所有的恢复操作!!
当不能进行有效的恢复操作时,Mysql有可能无法启动,并记录下错误日志。
 
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。
当该参数的数值设置大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。
 
innodb_force_recovery=0   表示当需要恢复时执行所有的恢复操作;
innodb_force_recovery=1   表示忽略检查到的corrupt页;
innodb_force_recovery=2   表示阻止主线程的运行,如主线程需要执行full purge操作,会导致crash;
innodb_force_recovery=3   表示不执行事务回滚操作;
innodb_force_recovery=4   表示不执行插入缓冲的合并操作;
innodb_force_recovery=5   表示不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交;
innodb_force_recovery=6   表示不执行前滚的操作,强制重启!
 
在主从库出现这种情况时,如果配置文件里之前就有这个参数,则尝试将该参数值修改为0或6,依次尝试重启。

问题解决操作步骤

编辑MySQL的配置文件添加innodb_force_recovery参数

直接安装的Mysql添加参数

找到Mysql的配置文件,一般都在/etc/mysql/my.cnf

vi /etc/mysql/my.cnf

编辑MySQL的配置文件并在配置文件中的[mysqld]中添加:innodb_force_recovery = 6,添加好后保存启动数据库即可。
在这里插入图片描述

Docker安装的Mysql添加参数

Docker安装的Mysql如果启动失败是无法直接进入容器内部修改的,如果在之前已经将Mysql配置文件挂载到宿主机直接修改即可,如果没有挂载需要先把容器内配置文件拷贝到宿主机修改好在拷贝到容器内。

PS: 容器在重启状态可以对容器内部文件做操作
在这里插入图片描述

1、从容器复制到主机

docker cp mysql:/etc/mysql/my.cnf /home/my.cnf

2、修改配置文件
编辑MySQL的配置文件并在配置文件中的[mysqld]中添加:innodb_force_recovery = 6

vi /home/my.cnf

在这里插入图片描述
3、从主机复制到容器

docker cp /home/my.cnf mysql:/etc/mysql/my.cnf 

4、重启容器

docker restart mysql

导出需要的数据库

# 备份数据库为sql文件到指定文件夹下
mysqldump -h127.0.0.1 -uroot -p密码 test > /home/test.sql;

重新安装数据库

如果要重装到同一台服务器,切记一定要先验证备份的数据库是否可用!!!

导入备份的数据库

导入前需要先创建数据库

mysql -h127.0.0.1 -uroot -p密码 test < test.sql
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器异常断电后Docker中Mysql无法启动问题解决,直接安装的Mysql无法启动解决思路一致。 的相关文章

随机推荐

  • linux下将gbk文件转换为utf-8

    titledatetagscategories linux下将gbk文件转换为utf 8 2019 11 23 10 49 58 0800 编码 problems 转自Linux下GBK文件编码批量转换UTF 8命令 在工作中 xff0c
  • ubuntu上不了网的解决方法(简便)

    用于我们对于ubuntu的使用比较多 xff0c 网络有时需要更改设置 下面笔者分享一个实用的方法 1 增加多一个网络连接 将鼠标移至左上角上下箭头 xff0c 之后点击爱编辑连接 xff08 不同版本操作方法不一样但其实都是一样的操作路径
  • C++ 快读快输模板

    C 43 43 快读快输模板 快读 span class token keyword inline span span class token keyword int span span class token function read
  • sql server2008支持json函数以及2016版内置json函数

    一 sql server2008支持json函数 1 json 转化成数据集合 1 xff09 转化用函数 CREATE FUNCTION dbo parseJSON 64 JSON NVARCHAR MAX RETURNS 64 hier
  • 家庭宽带 动态公网IP,使用腾讯云DDNS实现实时更新DNS解析记录

    解决DDNS问题 动态公网IP 环境说明 xff1a 我是家庭宽带 只能申请到动态的公网ip xff0c 好处是不花钱 xff0c 弊端是每次重启光猫 xff0c 都会重新获取一个新的公网IP 为解决此办法 xff0c 我尝试了很多个DDN
  • 用c语言实现一个简单的计算器(数据结构)

    概要 xff1a 主要以c语言为例对数据结构中写一个简易的计算器 xff08 计算整数间加减乘除括号运算 xff09 的算法进行大致讲述 xff0c 细说如何去实现符号优先级的比较的函数实现 注 xff1a 由于编辑器缘故 xff0c 本文
  • apache网页中文乱码解决方法

    apache的配置文件 xff1a 进入httpd conf xff0c 在文件的最后添加AddDefaultCharset gb2312 xff0c 注意 xff0c 新版本的apache是没有默认的AddDefaultCharset字段
  • 将ubuntu设置为NAS——搭建Jellyfin影音服务器

    Jellyfin安装 前提是你已经安装好了docker docker ps 查看docker 安装容器 docker ps a 下载docker jellyfin的镜像文件 sudo docker pull jellyfin jellyfi
  • CommonJS概述及使用

    在web开发中 xff0c 我们的js文件都是在html文件中引入 xff0c 在浏览器环境运行 但是在nodejs的环境中可没有html文件 xff0c 且nodejs中 xff0c 有且只有一个入口文件index js xff08 在执
  • HDFS(一)HDFS基本介绍

    HDFS基本介绍 HDFS的Master Slave结构HDFS角色作用简介HDFS 分块存储抽象成数据块的好处HDFS 副本机制名字空间 xff08 NameSpace xff09 NameNode 功能DataNode 功能机架感知原理
  • C++借助宏来实现由枚举值得到枚举变量名的字符串

    定义一个枚举 enum color span class token punctuation span RED span class token operator 61 span span class token number 0 span
  • 阿里云配置域名CDN加速

    前置条件 1 xff1a 阿里云账号 2 xff1a 已备案的域名 3 xff1a 拥有公网IP的服务器 登录控制台 新增源站 xff08 也就是你的云服务器IP xff09 按提示配置完成后进入到CDN管理页面 复制CNAME列的加速域名
  • Mybatis-PageHelper自定义count查询

    1 问题描述 使用分页插件pagehelper实现分页功能 xff0c 有个接口查询速度慢 2 问题原因 排查问题发现是因为在分页时 xff0c 查询总条数的sql执行慢 xff0c 而查询总条数的sql是在分页插件执行时 xff0c 在主
  • Python Django API项目构建

    项目构建心得 Python Django项目构建心得一 基础1 1 虚拟环境1 1 1 安装1 1 2 创建虚拟环境1 1 3 激活 退出 虚拟环境 1 2 Django命令 二 项目构建2 1 创建项目2 2 构建分类配置文件2 3 安装
  • 华为服务器Linux系统配置

    华为服务器Linux系统配置 前言 此文档是为了初次使用华为H22M 03 CPU SSD服务器 Ubuntu系统安装与配置 xff08 注 xff1a 合适的显示屏还是比较重要的 xff0c 分辨率越高越优先 xff09 的用户所提供的一
  • Share 很喜欢的派大星图片

    今天给大家分享一波我很喜欢的派大星头像 早起的派大星 奔跑的派大星 卖萌的派大星 可爱的派大星 冬日里的派大星 行走的派大星 二货派大星 老板范儿派大星 呆楞的派大星 无奈的派大星嫌弃的派大星 努力工作的派大星 666的派大星 这是我们安全
  • redis+lua脚本实现秒杀扣减库存 & SpringBoot环境+Redisson客户端

    redis 43 lua脚本实现秒杀扣减库存 amp SpringBoot环境 43 Redisson客户端 前言为什么使用Redisson项目搭建maven配置编写Redisson配置类编写Application yml编写启动类编写测试
  • Mysql分组查询每组最新的一条数据(三种实现方法)

    MySQL分组查询每组最新的一条数据 前言注意事项准备SQL错误查询错误原因 方法一方法二 xff08 适用于自增ID和创建时间排序一致 xff09 方法三 xff08 适用于自增ID和创建时间排序一致 xff09 总结MAX 函数和MIN
  • 使用Apifox+idea插件+Javadoc彻底替代Java项目中的Swagger 实现代码零侵入(这里以SpringBoot多模块项目为例)

    使用Apifox 43 idea插件 43 Javadoc彻底替代Java项目中的Swagger 实现代码零侵入 xff08 这里以SpringBoot多模块项目为例 xff09 前言前期准备下载安装Apifox创建项目 amp 获取项目I
  • 服务器异常断电后Docker中Mysql无法启动问题解决,直接安装的Mysql无法启动解决思路一致。

    服务器异常断电后Docker中Mysql无法启动问题解决 xff0c 直接安装的Mysql无法启动解决思路一致 环境问题排查查看容器日志错误原因分析 解决方法innodb force recovery参数说明问题解决操作步骤编辑MySQL的