只有.frm 怎么还原数据库表的结构

当数据库损坏且只有.frm文件时,可通过设置innodb_file_per_table=1及innodb_force_recovery=5恢复。利用PHP脚本step1.php,结合root用户的密码和备份路径,可以实现自动修复InnoDB表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用方法:

1、前提条件,数据库损坏前,你的 my.cnf 里面含有 innodb_file_per_table =1 这个配置。

      在 my.cnf 添加 innodb_force_recovery=5


2、把代码存为 step1.php,填入 rootPass, bkPath,然后执行

php step1.php 数据库名字  

各个表的 create 语句就导出到了 /home/dbjg 文件夹里。然配合 innodb表修复 程序,

http://blog.youkuaiyun.com/gold2008/article/details/11702801

基本可以比较全自动的修复 innodb 表了

<?php
// 数据库文件路径:/usr/local/mysql/var | /home/dbjg 目录存放各个表 Create 语句

$dbname = trim($argv[1]); $dbname == '' && exit('no db');
$rootPass = '';  // root 密码
$bkPath = "";  // .frm 备份所在路径,不能是现在的数据库存放路径里面
	
!file_exists("/home/dbjg") && mkdir("/home/dbjg");
$ffs = glob("$bkPath/*.frm"); `unalias cp`;

foreach ($ffs as $ff) {
	$a = str_replace("$bkPath/", '', $ff);
	$a = str_replace('.frm', '', $a);
	
	`mysql -uroot -p$rootPass $dbname -e "CREATE TABLE $a (id bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=innodb"`;
	`cp -f $bkPath/$a.frm /usr/local/mysql/var/$dbname/`; `chown -cR mysql:mysql /usr/local/mysql/*`; /* */
}

`service mysql restart`;

foreach ($ffs as $ff) {
	$a = str_replace("$bkPath/", '', $ff);
	$a = str_replace('.frm', '', $a);
	
	`mysqldump -uroot -p$rootPass $dbname --table $a > /home/dbjg/$a.sql`;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值