复原步骤概要

  • 备份frm、ibd文件
  • 如果mysql版本发生变化,装置回本来的mysql版本
  • 创立和本来库名统一新库,字符集都要放弃一样
  • 通过frm获取到原先的表构造,通过的失去的表构造创立一个和原先构造一样的空表。
  • 应用“ALTER TABLE DISCARD TABLESPACE;”命令卸载掉表空间
  • 将原先的ibd拷贝到mysql的仓库下
  • 增加用户权限 “chown . .ibd”,如果是操作和mysql的应用权限统一能够跳过
  • 通过“ALTER TABLE IMPORT TABLESPACE;”命令复原表空间
  • 实现

实际操作

1)备份文件

mkdir /usr/local/backupcp * /usr/local/backup

2)装置本来版本的数据库

3)创立和本来统一的库

创立和本来库名统一新库,字符集都要放弃一样

4)frm获取到原先的表构造

这里应用dbsake读取frm的表构造

(1)dbsake装置

#下载curl -s get.dbsake.net > dbsake#增加执行权限chmod u+x dbsake

(2)应用dbsake读取表构造

#根底应用./dbsake frmdump [frm-file-path]#将所有读取后果输出到文件中./dbsake frmdump [frm-file-path] > <文件名>例如:./dbsake frmdump student.frm teacher.frm > school.txt

(3)复原表构造

文件中寄存的是frm对应表构造的sql,间接复制进去运行就行了,此时数据库中所有的构造都复原了,就是还没有数据

5)卸载表空间

在mysql中执行命令,卸载掉表空间

ALTER TABLE <tabelName> DISCARD TABLESPACE;例如:ALTER TABLE student DISCARD TABLESPACE;ALTER TABLE teacher DISCARD TABLESPACE;

6)拷贝本来的ibd,到新的库中

(1)确定新数据库的数据寄存地位

在mysql中执行命令

show variables like 'datadir';

进入对应文件夹中,会有一个和须要复原的数据库名齐全一样的文件夹,进入文件夹

(2)将ibd文件复制过去

cp命令间接复制过去就行了

7)命令复原表空间

在mysql执行命令,复原表空间

ALTER TABLE <tabelName> IMPORT TABLESPACE;例如:ALTER TABLE student IMPORT TABLESPACE;ALTER TABLE teacher IMPORT TABLESPACE;

8)实现

如果mysql有什么特地配置,还须要在增加一下,比方:本来的用户账户、原先配置的sql_mode等等

起源:blog.csdn.net/qq_34886352/article/details/112469998