您的位置:首页 > wordpress

宝塔面板用frm和ibd文件恢复Mysql数据
wordpress 2024-9-21编辑:深圳网站建设阅读( WordPress 宝塔 面板

写这【zhè】篇文章我是非常不情愿的,我现在是在写这【zhè】篇文章【zhāng】,但是同时我也在【zài】恢复我服务【wù】器数据库【kù】的数【shù】据,出这篇文章【zhāng】也是在我的意料之外【wài】,由于我正在这【zhè】件事类【lèi】,我就【jiù】出一版这样的【de】mysql.frm.ibd文件【jiàn】数据恢【huī】复教程,希望这次【cì】教程可以帮助到更多需要恢【huī】复的人,我现在是【shì】情绪【xù】暴涨【zhǎng】

我先【xiān】说一下我的服务器崩溃经过,wordpress博客【kè】网站,宝【bǎo】塔输入了rm指令导致【zhì】全服务【wù】器文【wén】件被【bèi】删完,因为我是【shì】阿里云的服务器,所以我可以去【qù】找【zhǎo】那边的工程师来达到【dào】紧急修复(这里也【yě】建议【yì】在商【shāng】业化云服【fú】务那里购买主机【jī】的人【rén】一旦出现问【wèn】题就【jiù】找服【fú】务商【shāng】工程师),他们解决的很快,原本【běn】我以为服务器文件【jiàn】都删除【chú】了的,一【yī】切都【dōu】不剩,但是经过【guò】了和工程【chéng】师共同【tóng】的努【nǔ】力,那边提供了【le】我一【yī】个【gè】暂时盘,用于【yú】存储丢失的数【shù】据,最后就是我的所有数【shù】据都【dōu】找回来了,但是,wordpress的数据库文件如果不备份的话,那你【nǐ】直面的就不是sql文件,而是.frm与.ibd文件,

如果【guǒ】你【nǐ】不懂数据表【biǎo】创建的话,那你先看文【wén】章,如果看不【bú】懂或者一懂半懂【dǒng】就请【qǐng】自己去学习数据库的相关知【zhī】识【shí】!

这里顺便【biàn】介绍一下.frm文件与.ibd文件【jiàn】与.ibdata文【wén】件

.frm:与【yǔ】表相关的元数据信息【xī】都【dōu】存放【fàng】在.frm文件中【zhōng】,主要是表结构的定义信息,不论什么存储引擎【qíng】,每【měi】一【yī】个表【biǎo】都会有一个以表名命名的.frm文【wén】件。
.ibd和.ibdata:两者都是【shì】专属【shǔ】于InnoDB存储引【yǐn】擎【qíng】的数据库文件。

当采用共享表空间【jiān】时所有InnoDB表的数据均【jun1】存放【fàng】在【zài】.ibdata中,所以当表越来越【yuè】多【duō】时【shí】,这个文件会变得很大;
相对应【yīng】的.ibd就是【shì】采用独享表空【kōng】间时InnoDB表的数【shù】据文【wén】件。
修改为独享表【biǎo】空间【jiān】的方法是在my.ini配置文【wén】件中【zhōng】添加/修改此条:

Innodb_file_per_table=1

mysql存储的所有数【shù】据文件都在data,而我们只【zhī】有.frm与.ibd

这些在数据库里面可以看见,但是打不开,打开直接报错,
那么废话不多说了,我们直接开始教程!
Mysql 5.6或者5.7,我这里用【yòng】的是5.7,因为笔【bǐ】者专业是【shì】移动应【yīng】用【yòng】开发,所以学点Mysql不过分吧

我这边用的是【shì】自己电脑【nǎo】windows下【xià】 做的 因为【wéi】它操作肯定要比【bǐ】服务器方便 当【dāng】恢复回来后在导回【huí】服务器
我【wǒ】们先创建数据【jù】库建【jiàn】议【yì】数据【jù】库名跟生前的数据库名是【shì】一样【yàng】的,比如我的小林博客【kè】生前数【shù】据库名为pzo.cc,那莫这个时候新建也是pzo.cc
1.先随意创建一张同名表
输入指令:

CREATETABLE wp_commentmeta(comment_IDbigint)ENGINE=InnoDB;

2.关闭mysql服务

net stop mysql

或者点击计算机--管理--服务--找到Mysql

然后关闭
3 复制备份的.frm覆盖新建的表.frm
4 开启mysql服务

net start mysql

5.在mysql安装【zhuāng】目录data文件夹下【xià】用【yòng】文【wén】本编辑器打开.err文件
找到错误日志

然后删除当前表

新建4个字段【duàn】的同名【míng】表,这里建【jiàn】议大家用可视设计mysql的软件【jiàn】来设置,比如Navicat,这样的话就可【kě】以更方便,不会【huì】因为用指令创【chuàng】建数【shù】据【jù】表而【ér】出【chū】错

CREATE TABLEwp_commentmeta(
`meta_id` bigint(20)  NOT NULL ,
  `comment_id` bigint(20) NOT NULL ,
  `meta_key` varchar(255)  NULL,
  `meta_value` longtext NULL,
)
ENGINE=InnoDB;

新建拥有4个字段的表

最主要【yào】的是【shì】这种【zhǒng】样式要【yào】跟生前一样`meta_id` bigint,里面【miàn】的长度小数点主【zhǔ】键外键都【dōu】可以不管

然后再关闭mysql服务

net stop mysql

然后再复制备份的.frm覆盖新建的表.frm
修改配【pèi】置文件my.ini在[mysqld]下添加/修改【gǎi】innodb_force_recovery=6,一【yī】般这一段是没有的,所以你【nǐ】用搜索功能搜索[mysqld],然后【hòu】在下【xià】面【miàn】添加innodb_force_recovery=6

启动mysql服务,查看【kàn】表结构【gòu】,这个时【shí】候你可以【yǐ】看见表结构已经【jīng】恢复

mysql> desc wp_commentmeta;

导出表结构cmd

mysqldump -uroot -proot data_rec weibo_twets > e:tweets.sql

>后面是保存路径和保存名称以及后缀

在.sql文件中找到建表语句。
/*/或者也可以用数据库管【guǎn】理【lǐ】软件如navicat中找到这【zhè】张表,在数【shù】据【jù】表右键对【duì】象信息中复制下【xià】DDL选【xuǎn】项【xiàng】卡里的内容。

停【tíng】止【zhǐ】mysql服务,然【rán】后删除这【zhè】张表,用【yòng】获得的建表语【yǔ】句(/*/)新建【jiàn】这【zhè】张数据【jù】表,也就是【shì】你刚刚复制的建表语句,加上ROW_FORMAT=COMPACT;将表结构改为静态表【biǎo】;

比如我复制的建表语句是

CREATE TABLE `wp_commentmeta` (
  `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_520_ci,
  PRIMARY KEY (`meta_id`),
  KEY `comment_id` (`comment_id`),
  KEY `meta_key` (`meta_key`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

那么添加ROW_FORMAT=COMPACT;后是这样的:

CREATE TABLE `wp_commentmeta` (
  `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_520_ci,
  PRIMARY KEY (`meta_id`),
  KEY `comment_id` (`comment_id`),
  KEY `meta_key` (`meta_key`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci ROW_FORMAT=COMPACT;

然后在mysql使用命令提示符走这段建表语句就行了

注【zhù】:一【yī】定要要有ROW_FORMAT=COMPACT;不然后面添加了.ibd文【wén】件依然打不【bú】开【kāi】

好,我们有了表结构后,我们现在需要恢复表数据

分离表空间

使当前.ibd的数据文件和.frm分离。

ALTER TABLE wp_commentmeta DISCARD TABLESPACE;

然后复制备份的.ibd文件覆盖新的表数据

重启mysql

导入这个表空间

ALTER TABLE wp_commentmeta IMPORT TABLESPACE;

然后这里数据就恢复了!

注:本【běn】次【cì】教程是本地恢复,并不是线上恢【huī】复,线上恢复是一样的道【dào】理,也是一【yī】样的指【zhǐ】令,可以试试【shì】

服【fú】务范围:WordPress搭建、WordPress主题【tí】开发、WordPress二次开发、WordPress插件【jiàn】开发
其它服务:网站建【jiàn】设、企业【yè】邮箱、数字证书【shū】ssl、400电话、
技术标签:企业网站、外贸网站、外贸商城、其它问题
联系方式:电话:13714666846 微信同号

企业网站定制

企业网站定制 根据企业需求,量身定制设计

企业网站定制:2800元起
添加微信 请说明来意
联系我们
站内搜索 MORE+

24小时服务热线 0755-29765948
  • 地址:深圳市罗湖区人民北路2033号206
  • 电【diàn】话:0755-29765948 传真:82256610
  • 手机:13714666846 18948334877
  • 邮箱:gong@city96.com 164761418@qq.com
  • 粤ICP备14049207号
创意化数字品牌整合网络营销
营销网站让你坐等商机坐佣客户,Rss

版权所有:深圳市网商在线科技有限公司

版权所有:深圳市网商在线科技有限公司
友情连接link: