mysql根据数据文件恢复数据库

起因

在使用mysql导入数据时,发现报一个错误 2006 MySQL server has gone away,询问得知是因为单次导入数据的大小被限制了,因为一个表的数据是一次性插入的,单表数据过多的时候可能会导致这个错误(使用的工具是navicat),这里使用的都是InnoDB引擎
将配置参数max_allowed_packet=4M修改后,重启服务一直失败,一顿操作后数据库让我搞崩溃了

数据恢复

由于之前的数据库是安装版的,安装版的配置比较全面,但是我不喜欢安装版的,于是就下载了一个免安装版的mysql5.7(原版本也是5.7)

尝试恢复数据

数据库整好了,就把data下的数据文件拷了过去,启动后,show tables可以看到所有的表,但是查询某张表的数据会提示表不存在
百度大佬的经验,
	1.	将ibdata1文件拷过去,重启后不行的话
	2.	将auto.cnf文件考过去,重启如果不行
	3.	将当前数据库的日志ib_logfile*全部删除,或者替换成原库文件
在这些步骤操作过后,发现问题还是没有解决
而且在使repair语句恢复数据表的结构时(REPAIR TABLE mytable USE_FRM)也遇到了错误

反思过程和解决问题

仔细检车了整个过程,发现有一个文件没有替换ib_buffer_pool,抱着试一试的态度将这个文件也覆盖了过去,重启后发现数据恢复并可使用了
总的来说就是
覆盖data下的数据库文件
覆盖ibdata1、auto.cnf、ib_buffer_pool并删除ib_logfile

data下的文件说明

文件夹代表数据库mysql和sys是系统自带的数据库,可以不用迁移
其他的文件夹是自己建立的数据库,文件夹名就是数据库名
auto.cnf存储了server-uuid的值,用来标识数据库实例在集群中的唯一性
ib_buffer_pool是缓存池文件,用来缓存数据和索引
ib_logfile*是InnoDB的事务日志文件,文件个数由innodb_log_files_in_group配置决定
ibdata1这个文件巨大,用来存储数据,数据库文件夹下的文件都只存储表结构
ibtmp1临时表空间,默认配置可以无限增大
	可以配置上限innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
	可以通过explain查看语句是否使用了临时表空间(test_tmp1),
*.err是错误日志,如果频繁收到错误的sql会使这个文件变得很大,需要清理
*.pid记录的是mysqld的进程pid,用来在数据文件是同一份,但端口不同的情况下,防止同一个数据库被启动多次。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值