首页 技术 正文
技术 2022年11月21日
0 收藏 823 点赞 2,337 浏览 1461 个字

生产环境中的mysql突然启动不了,查了原因是innodb库错误,以前就遇到过这个问题,稀里糊涂的没解决,结果导致大量数据丢失。这些又遇到这个问题,果断把那个有问题的数据库移动了别的地方,启动了mysql使用。然后正好赶上中秋节假期,所以花了两天时间认真查资料,一点点的解决问题。

因为我是用docker做了一个沙箱,但是启动不起来,在这里上面浪费了半天的时间。这个跳过,直接说一下思路和过程。有什么问题可以微信我(winsonhsu)备注mysql技术交流

整个过程需要三个库 we7 we7_old we7_tmp
1.备份数据库文件夹we7
2.设置数据库为恢复模式innodb_force_recovery = 3
3.启动数据库we7
4.此时可以看到库里的innodb数据表都没有显示出来.只有myiasm表
4.创建一个新库we7_tmp
5.使用navcat的tools>>data transfer 库建从we7到新库we7_tmp 这样就把myiasm库都复制过去了
6.还原一个过去备份的数据库we7_old,用navcat里的tool>>structure synchronization工具进行架构比较,只比较表,得到差异后只复制增加的表语句,得到innodb的表结构 innodb.sql
7.在we7_tmp中执行innodb.sql
8.将复制过来的.ibd文件与.frm文件发生联系。具体就是在控制台执行下面命令:
for f in \((ls *.ibd); do echo "alter table" \)(basename $f .ibd) " import tablespace;" >> import.sql; done
得到import.sql文件等一下使用

恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:
for f in \((ls *.ibd); do echo "alter table" \)(basename $f .ibd) " discard tablespace;" >> discard.sql; done
得到discard.sql语句等一下使用

9在we7_tmp库中执行discard.sql

10.将we7文件夹中的ibd文件全部拷贝过来
cp /www/backup/we7_test/*.ibd /www/docker/mysql/data/we7_test/
设置权限为全部可以读写
11.在we7_tmp库中执行import.sql

12.设置完成后删除we7和we7_old数据库 将we7_tmp数据库重命名为we7 写一个rename.sh

#!/bin/bash
# 假设将we7_tmp数据库名改为we7
# MyISAM直接更改数据库目录下的文件即可mysql -uroot -pmD4Yyxrb3tcLDLFw -e 'create database if not exists we7_test'
list_table=$(mysql -uroot -pmD4Yyxrb3tcLDLFw -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='we7_tmp'")for table in $list_table
do
mysql -uroot -pmD4Yyxrb3tcLDLFw -e "rename table we7_tmp.$table to we7_test.$table"
done

执行./rename.sh
数据库修复完成,全部数据都回来了

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,071
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,549
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,397
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,174
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,809
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,889