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