mysql只有frm_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
作者:姚远
专注于 Oracle、MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6 ,5.7,8.0 OCP。现在鼎甲科技任顾问,为同事和客户提高数据库培训和技术支持服务。
本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
背景
很多时候因为 MySQL 数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到 MySQL 的 bug。这个时候如果没有备份,很多人就以为数据丢失了,但实际上大部分时候数据还是有救的。对于 MyISAM 引擎的表空间,直接把对应的数据文件拷贝到一个新的数据库就行了,数据就可以恢复了。对于 InnoDB 引擎的数据库表空间可以采用传输表空间的方式把数据救回来。
创建已经丢失的表结构
先要安装 mysql-utilities。
// RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities
使用 mysqlfrm 从 .frm 文件里面找回建表语句。
// 分析一个 .frm 文件生成建表的语句mysqlfrm --diagnostic /var/lib/mysql/test/t1.frm// 分析一个目录下的全部.frm文件生成建表语句root@username:~# mysqlfrm --diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep "^CREATE TABLE" createtb.sql |wc -l124
可以看到一共生成了 124 个建表语句。
有很多时候也可以从其它库里面生成建表语句,如同一个应用的其它数据库或不同的测试环境,采用下面的 mysqldump 生成建表语句:
mysqldump --no-data --compact my_db>createtb.sql
登录 MySQL 生成表。
mysql> create database my_db;mysql> use my_dbDatabase changedmysql> source createtb.sqlQuery OK, 0 rows affected (0.07 sec)......
导入旧的数据文件
将新建的没有包括数据的 .ibd 文件抛弃
root@username:/var/lib/mysql/my_db# ll *.ibd|wc12411167941root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v Tables_in_my_db \| while read a; do mysql -e "ALTER TABLE my_db.$a DISCARD TABLESPACE"; doneroot@username:/var/lib/mysql/my_db# ll *.ibd|wcls: cannot access '*.ibd': No such file or directory000
可以看到所有的 .idb 文件都已经被抛弃了。然后把旧的有数据的 .ibd 文件拷贝到这个 my_db 目录下面,别忘了把属主改过来:chown mysql. *,再把这些数据文件 import 到数据库中。
root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v Tables_in_my_db \| while read a; \do mysql -e "ALTER TABLE my_db.$a import TABLESPACE"; done
导入完成后检查表
使用 mysqlcheck 对数据库 my_db 下的所有表进行检查:
root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_db.cdp_backup_point OK......
所有的表都导入成功。
mysql只有frm_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生相关推荐
- mysql 还原 批量ibd_MySQL只有.frm和.ibd文件如何批量恢复InnoDB表-爱可生
作者:姚远 专注于 Oracle.MySQL 数据库多年,Oracle 10G 和 12C OCM,MySQL 5.6 ,5.7,8.0 OCP.现在鼎甲科技任顾问,为同事和客户提高数据库培训和技术支 ...
- MySQL 5.7 通过frm和ibd文件恢复数据
MySQL 5.7 通过解析frm和ibd文件恢复数据 .frm文件存储表结构 .ibd文件存储数据 以恢复表IP_PATENT_APPLICANT_LIST为例, 有待恢复表文件IP_PATENT_ ...
- 宝塔面板使用.frm与.ibd文件恢复Mysql数据
写这篇文章我是非常不情愿的,我现在是在写这篇文章,但是同时我也在恢复我服务器数据库的数据,出这篇文章也是在我的意料之外,由于我正在这件事类,我就出一版这样的mysql.frm.ibd文件数据恢复教程, ...
- mysql innodb引擎丢失_【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据...
注意!此方法只适用于innodb_file_per_table独立表空间的InnoDB实例. 此种方法可以恢复ibdata文件被误删.被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所 ...
- mysql怎么通过frm和ibd文件还原数据
1.找回表结构,如果表结构没有丢失直接到下一步 a.先创建一个数据库,这个数据库必须是没有表和任何操作的. b.创建一个表结构,和要恢复的表名是一样的.表里的字段无所谓.一定要是innodb引擎的.C ...
- mysql innodb ibd_MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- frm ibd文件导入mysql_Mariadb,Mysql如何根据.frm和.ibd文件来恢复数据和表结构
废话不多说直接进入正题,Mariadb,Mysql根据.frm和.ibd文件来恢复数据和表结构,大体分为三个步骤: 1.创建表结构 2.导入表结构 3.恢复表数据 接下来,我们按照这三个步骤一步一步恢 ...
- mysql ibd frm文件_Mariadb,Mysql如何根据.frm和.ibd文件来恢复数据和表结构
废话不多说直接进入正题,Mariadb,Mysql根据.frm和.ibd文件来恢复数据和表结构,大体分为三个步骤: 1.创建表结构 2.导入表结构 3.恢复表数据 接下来,我们按照这三个步骤一步一步恢 ...
- frm文件导入mysql5.7_使用frm,ibd文件恢复数据库文件,mysql5.7.31,centos7.5,20200813...
使用frm,ibd文件恢复数据库文件共有3步,安装数据库,恢复表结构,恢复表数据 我实操的软件版本,mysql5.7.31,centos7.5,20200813,数据库展开597MB 一,安装数据库 ...
- MySQL数据恢复(通过.frm和.idb文件)
转载自:https://www.2cto.com/database/201709/683413.html 今天吐血向大家分享下mysql通过.frm和.ibd文件恢复数据的方法,因为之前电脑换系统的原 ...
最新文章
- android 获取手机GSM/CDMA信号信息,并获得基站信息
- Python读取excel文件可读取xlsx格式和xls格式可直接读取超链接,读出为字典格式(列表套字典),处理合并单元格的问题
- Effective Java之EnumMap代替序数索引(三十三)
- 什么是51%算力攻击?——区块链系列学习笔记
- java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
- 【mac】vmware tools 在菜单上显示灰色无法安装的问题
- 猫眼娱乐上市首日破发 收盘价14.64港元
- 如何给小朋友解释单摆运动_法国教育学者:如何培养儿童的逻辑思维和时间观念...
- C++ STL源码剖析之哈希表
- python清空屏幕代码_python代码怎样清屏
- PID控制的现象与本质
- 加拿大-渥太华大学-轴承数据-不同转速
- java的cursor_JAVA中类 Cursor的定义.
- 海康威视OCR/表格识别开源
- 从零开始学MATLAB(一)MATLAB基础知识
- hazelcast java_Hazelcast
- MAP实现一个key,对应多个Value值。
- 求菲波那切数列第n项
- 机器人系统常用仿真软件介绍效果与评价指标
- 采坑系列:Waves MaxxAudio Pro无法正常启动,插入耳机窗口闪过,耳机没声音