首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何恢复崩溃的无害数据库.?

问如何恢复崩溃的无害数据库.?
EN

Database Administration用户
提问于 2012-02-07 06:38:47
回答 1查看 7.1K关注 0票数 3

我有一个Innodb表,我得到的错误是

代码语言:javascript
复制
mysql> check table City;
+-------------------+-------+----------+----------------------------------------------------------+
| Table             | Op    | Msg_type | Msg_text                                                 |
+-------------------+-------+----------+----------------------------------------------------------+
| world_innodb.City | check | Error    | Incorrect information in file: './world_innodb/City.frm' |
| world_innodb.City | check | error    | Corrupt                                                  |
+-------------------+-------+----------+----------------------------------------------------------+
2 rows in set (0.00 sec)

我没有改变任何东西。我不知道它是怎么坠毁的。我怎么能找回它..。

错误日志的内容如下

代码语言:javascript
复制
120207 11:50:47 InnoDB: highest supported file format is Barracuda.
120207 11:50:47  InnoDB: Waiting for the background threads to start
120207 11:50:48 InnoDB: 1.1.8 started; log sequence number 5713326
120207 11:50:48 [Note] Event Scheduler: Loaded 0 events
120207 11:50:48 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.5.20-log'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
120207 11:50:57 [ERROR] /usr/local/mysql/bin/mysqld: Incorrect information in file: './world_innodb/City.frm'

编辑

有人打开了City.frm文件并修改了它的content.So,我将如何恢复它。我正在使用innodb_file_per_table。

更新:按照某些人的要求添加my.cnf。

Innodb在My.Cnf

中的特定变量

代码语言:javascript
复制
innodb_file_per_table
innodb_data_home_dir            = /usr/local/mysql/data
innodb_data_file_path           = ibdata1:10M:autoextend
innodb_log_group_home_dir       = /usr/local/mysql/data
innodb_buffer_pool_size         = 1G
innodb_additional_mem_pool_size = 2M
innodb_log_file_size            = 128M
innodb_log_files_in_group       = 2
innodb_log_buffer_size          = 8M
innodb_flush_log_at_trx_commit  = 1
innodb_lock_wait_timeout        = 50
innodb_force_recovery           = 4 
EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-02-07 10:50:35

我创建了一个名为test2的表

代码语言:javascript
复制
CREATE TABLE `test2` (   `t` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然后我插入了一张唱片

代码语言:javascript
复制
insert into test2 values(1);

我停止了MySQL,然后用vi将一堆字符添加到test2.frm文件中。

然后我启动了MySQL,并看到了以下内容

代码语言:javascript
复制
mysql> show table status \G;
*************************** 1. row ***************************
           Name: test2
         Engine: NULL
        Version: NULL
     Row_format: NULL
           Rows: NULL
 Avg_row_length: NULL
    Data_length: NULL
Max_data_length: NULL
   Index_length: NULL
      Data_free: NULL
 Auto_increment: NULL
    Create_time: NULL
    Update_time: NULL
     Check_time: NULL
      Collation: NULL
       Checksum: NULL
 Create_options: NULL
        Comment: Incorrect information in file: './test2/test2.frm'

然后我创建了另一个具有相同结构的表。

代码语言:javascript
复制
CREATE TABLE `test3` (   `t` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

然后我停止了mysql并在test2.frm上复制了test3.frm

代码语言:javascript
复制
cp /var/lib/mysql/testdb/test3.frm /var/lib/mysql/testdb/test2.frm

我重新启动了MySQL并访问了test2

代码语言:javascript
复制
mysql> show table status \G;
*************************** 1. row ***************************
           Name: test2
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 1
 Avg_row_length: 16384
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 25675431936
 Auto_increment: NULL
    Create_time: 2012-02-07 16:24:20
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 

这是我插入的记录

代码语言:javascript
复制
mysql> select * from test2;
+------+
| t    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

如果您知道表城市的结构,您可以创建一个相同的表,然后在现有的损坏表上复制.frm文件

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/12370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档