MySQL的InnoDB数据文件损坏如何修复

MySQL的InnoDB数据文件损坏如何修复,第1张

因为被破坏的地方只在索引的部分,所以当使用innodb_force_recovery = 1运行InnoDB时, *** 作如下:

执行check,repair table 都无效

alter table email_status engine =myisam#也报错了,因为模式是innodb_force_recovery =1。

ERROR 1025 (HY000): Error on rename of '...' to '....' (errno: -1)

建立一张表:create table email_status_bak #和原表结构一样,只是把INNODB改成了MYISAM。把数据导进去insert into email_status_bak select * from email_status

删除掉原表:

drop table email_status

注释掉innodb_force_recovery 之后,重启。

重命名:

rename table edm_email_status_bak to email_status

最后该回存储引擎

alter table edm_email_status engine = innodb

总结:

这里的一个重要知识点就是 对 innodb_force_recovery 参数的理解了,要是遇到数据损坏甚至是其他的损坏。可能上面的方法不行了,需要尝试另一个方法:insert into tb select * from ta limit X;甚至是dump出去,再load回来。

1. 建立InnoDB数据库

运行环境:RHEL4U5 + mysql5.0

默认情况下mysql自动安装InnoDB数据引擎,InnoDB的数据库文件和日志文件在默认的数据库数据库目录(/var/lib/mysql 或者/usr/local/mysql/var),现在由于我们要重新建立InnoDB数据库,所以将原来的InnoDB数据库备份好后,删除即可,建立InnoDB数据库的 *** 作步骤:

默认的数据库数据目录:/var/lib/mysql

1) shell> service mysqld stop # 停止mysql进程

2) shell> mv /var/lib/mysql/ib* /var/lib/mysql/InnoDB-old # 备份好原来的InnoDB的数据库文件

3) shell> mkdir /var/lib/mysql/InnoDB #建立存放新InnoDB数据库文件的目录,默认不自动创建目录

4) shell> vi /etc/my.cnf #编辑InnoDB数据库的相关的配置选项

[mysqld]

# Uncomment the following if you are using InnoDB tables

innodb_data_home_dir = /var/lib/mysql/InnoDB/ #innodb数据库数据文件目录

innodb_data_file_path = ibdata2:100M:autoextend:max:2000M #数据文件名称及大小

innodb_log_group_home_dir = /var/lib/mysql/InnoDB/

innodb_log_arch_dir = /var/lib/mysql/InnoDB/

# You can set .._buffer_pool_size up to 50 - 80 %

# of RAM but beware of setting memory usage too high

innodb_buffer_pool_size = 16M #缓冲池的大小,一般设置为主存的50%-80%

innodb_additional_mem_pool_size = 2M

# Set .._log_file_size to 25 % of buffer pool size

innodb_log_file_size = 5M #日志文件的大小,一般设置为主存的25%

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit = 1 #事务

innodb_lock_wait_timeout = 50

5) shell>chown mysql:mysql /var/lib/mysql/InnoDB/ #设置InnoDB数据库目录的权限,否则无法启动mysql

6) shell>service mysqld start# 启动mysqld进程

这时在/var/lib/mysql/InnoDB 目录中应该可以看到新生成的InnoDB文件,那么InnoDB数据库就生成了。

2. 使用InnoDB数据库:

1)在配置文件中的[mysqld]字段添加 default-storage-engine=INNODB ,将默认的数据库引擎修改为InnoDB

2} 在创建表的时候,手动指定表的类型:

CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB

注意:修改mysql配置文件需要重启启动mysqld进程

对于Mysql有两种模式,MYISAM与INNODB

如果是MYISAM的话,在data目录下里会.frm .myd .myi 三种文件,那么直接把DATA移过去,配置好权限就可以还原了。

如果是INNODB的话,那是相当的烦啊。在data目录下只有.frm(这只是一个数据格式),这个移过去后,是无法还原原始数据的。

真正的数据是正放在data目录下的iddata1里。因此,如果有这个文件,那么还是有希望还原的。

但我试了网上所有的文章,都还是提示“数据库里没有表”。

最后我找到了答案。那就是my.ini的配置文件。里面有一项:

innodb_data_home_dir="C:\Program Files\MySQL\MySQL Server 5.1\data"

只要把上面的地址设为你正确的地址就可以了。

记得重启一下mysql (在CMD里输入net stop mysql,然后net start mysql)就可以了还原了。。。

我花了一天时间发现的问题,希望能对同样遇到问题的朋友有所帮助。

总结,对于Mysql还是默认采用MYISAM的比较好,容易转移。数据库与数据库是分开的,不会混在一起。所以可以在My.ini里设一下默认项:

default-storage-engine=MYISAM


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7237057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存