MySQL启动异常:【checksum mismatch in data file】

MySQL启动异常:【checksum mismatch in data file】

起因

起因本机安装了两不同版本的数据库 , 然后把新装的数据库又给删了,再次尝试启动老数据库时报 1067 异常。

解决

先查看下日志,看下是啥具体原因导致MySQL启动异常。
win10系统可以在 计算机管理 -> 系统工具 -> Windows日志 -> 应用程序 中查看错误日志情况
也可以在 MySQL的数据存储文件中 [data] 里找到日志文件,里面有更详细的记录。

日志记录:

[Note] Plugin 'FEDERATED' is disabled.
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use Windows interlocked functions
InnoDB: Compressed tables use zlib 1.2.3
InnoDB: Initializing buffer pool, size = 22.0M
InnoDB: Completed initialization of buffer pool
InnoDB: Error: checksum mismatch in data file D:\APP\MySQLData\ibdata1
InnoDB: Could not open or create data files.
InnoDB: If you tried to add new data files, and it failed here,
InnoDB: you should now edit innodb_data_file_path in my.cnf back
InnoDB: to what it was, and remove the new ibdata files InnoDB created
InnoDB: in this failed attempt. InnoDB only wrote those files full of
InnoDB: zeros, but did not yet use them in any way. But be careful: do not
InnoDB: remove old data files which contain your precious data!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: INNODB
[ERROR] Aborting

翻译后:

[]插件'FEDERATED'被禁用。
InnoDB:关闭InnoDB内存堆
InnoDB:互斥锁和rw_locks使用Windows联锁函数
InnoDB:压缩表使用zlib 1.2.3
InnoDB:正在初始化缓冲池,size = 22.0M
InnoDB:完成缓冲池的初始化
InnoDB: Error: checksum mismatch in data file D:\APP\MySQLData\ibdata1
无法打开或创建数据文件。
InnoDB:如果你尝试添加新的数据文件,但是失败了,
InnoDB:你现在应该在my.cnf中编辑innodb_data_file_path
InnoDB:恢复原来的状态,并删除InnoDB创建的新的ibdata文件
InnoDB:尝试失败。InnoDB只写那些文件
InnoDB: 0,但还没有以任何方式使用它们。但是要小心,不要这样做
InnoDB:删除包含宝贵数据的旧数据文件!
[ERROR] Plugin 'InnoDB' init function返回错误
[ERROR] Plugin 'InnoDB'注册为存储引擎失败
[错误]未知/不支持的存储引擎:INNODB
(错误)流产

看了日志后,我尝试修改 my配置文件参数
default-storage-engine=INNODB 修改为 MyISAM
后重启服务。启动成功,但是因为之前的数据库全是 InnoDB存储引擎,所以数据库还在但表没了。
MyISAM引擎存储表信息用的文件有 .frm(存储表结构信息) .MYI(存储表索引信息).MYD(存储表数据信息) 这三种类型文件。而Innodb只有 .frm
这样也不是办法,原数据显示不出。下面继续 =>>

第一步:

数据库可能因为的之前的操作导致数据库表损坏,在你的 my配置文件中加上以下参数 :

[mysqld]
innodb_force_recovery = 6

此命令说明:
innodb_force_recovery参数说明:

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的恢复操作(即校验数据页/purge undo/insert buffer merge/rolling back&forward),当不能进行有效的恢复操作时,mysql有可能无法启动,并记录错误日志;
innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。   
2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。  
3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。   
4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。   
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。   
6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作

修改完后重启服务,这时发现可以启动,数据也恢复成功.但是不能插入数据。

第二步:
把你本地的数据库备份一遍,使用命令可以参考 备份数据库

备份完后把老数据库删除,我使用的是MySQL8 ,安装程序里自带删除功能,所以下载后直接删除后安装。MySQL下载地址

安装好后配置下环境变量,然后在把备份文件导入即可。

在导入的过程中也遇到了问题::
新安装的8.0数据库DOS命令窗口可以正常登录,但是在Navcat视图工具中登录失败. 错误码是 2059

原因 :

mysql8 之前的版本中加密规则是mysql_native_password,而MySQL8.0.11版本启用了新特性,用户登录加密规则改为了caching_sha2_password,如果想使用caching_sha2_password新特性的话,那么就必须更新一下navct的驱动。否则用 navcat连接就会报2059错误,如果想继续使用以前的老特性,可以将 mysql用户登录的加密规则还原为 mysql_native_password

更改加密规则 =>

1.登录数据库后执行以下命令

select user,plugin from user where user=‘root’; #查看user数据库的加密规则

可以看到这时的加密规则为 caching_sha2_password

2.更改加密规则

ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVER;

3.在刷新下权限

FLUSH PRIVILEGES;

这时在查看下是否更改成功,成功后即可登录数据库.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值