记录MySQL8.0迁移data文件夹所引发的问题

前述

这次是接到一个新需求,需要将原本磁盘的数据转移到新的磁盘上,原本是一个复制粘贴然后修改配置的小事,却足足折腾了一天,为此,特意将此情况记录下,以此来加深自己的印象,同时也为大家在解决此类问题时提供一个方案借鉴。

一、 正确转移流程

首先停止mysql服务,然后将数据库的data文件夹整体复制到其他位置下,修改my.ini中的datadir到新位置

二、安装新数据库应用后旧数据库的转移

和上面类似,将my.ini中的datadir修改到旧数据库的位置,然后启动,此时有概率会报错,查看配置的data目录下WIN-**.err错误文件排查错误,如果是提示redo相关错误,将#innodb_redo下的文件删除即可。

三、遇到的问题

1. 启动mysql服务失败,但无错误日志输出

检查my.ini文件配置有无报错,如果没有配置错误,可能是文件编码错误,文件修改后默认存储时UTF-8格式,需要另存为ANSI格式

2. The innodb_temporary data file ‘ibtmp1’ must be writable

这个问题看似权限问题,但是在我增加了data目录的权限后仍然报出该问题,我的解决措施是将MySQL服务登录类型网络服务更改为了本地系统,以此解决了此问题,但是为什么会导致这个问题产生还有待深入研究。

3. 使用innodb_force_recovery修复

如果始终无法启动,查看err日志报出的问题仍然解决不了的话,可以使用innodb_force_recovery配置尝试修复启动。

[mysqld]
innodb_force_recovery=N    # N=1~6

关于innodb_force_recovery的介绍可以参考MySQL 8.0 Forcing InnoDB Recovery

四、在解决过程中的其他思路

这些思路是在解决这次转移数据库的过程中排查问题时采取的措施,因为MySQL数据库一直报出的错误日志是关于ibd文件错误或表空间错误等情况,错误判断成了是ibd文件损坏等情况,所以刚开始的解决方向一直放在了处理ibd文件上,才有了下面几个措施。

1. 通过ibd文件恢复数据

可以在data中看到每个数据库的文件夹,里面存放了ibd格式的文件,对应了数据库中的每张表,可以直接使用该表恢复数据表的数据,但前提是当前数据库存在相同数据结构的表

# 解除表空间占用,此步骤会删除当前表对应的ibd文件
alter table 表名 discard tablespace;

然后将需要恢复的ibd文件放进去,需要和数据表同名

# 关联新的数据表空间,如果表结构不一样,此处会报错
alter table 表名 import tablespace;
2. 通过ibd文件获取表结构

如果仅仅只有ibd文件没有表结构的话比较棘手,需要通过MySQL自带的ibd2sdi工具将ibd导出成结构文件json。

ibd2sdi --dump-file=***.json ***.ibd

导出后是一串json,放到json格式化工具中查看column相关数据。

五、最后的话

这次出现这个情况主要还是在于自己缺乏数据库运维相关经验,没有对数据库管理有一个系统的操作,导致了操作期间出现了不符合规范的情况出现了本次问题,以此记录,警醒自己。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴走的怪兽君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值