我有一张Innodb
桌子我得到了错误
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)
我没有更改 my.cnf 中的任何内容。我不知道它是如何崩溃的。 怎样才能恢复...
错误日志的内容如下
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 文件并修改了它的内容。那么我将如何恢复它。? 我正在使用innodb_file_per_table
.
更新:按照某些人的要求添加 my.cnf。
My.Cnf 中的 Innodb 特定变量
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
我创建了一个名为 test2 的表
然后我插入了一条记录
我停止了 MySQL,然后用 vi 在 test2.frm 文件中添加了一堆字符。
然后我启动 MySQL 并看到以下内容
然后我创建了另一个具有相同结构的表
然后我停止了 mysql 并在 test2.frm 上复制了 test3.frm
我重新启动了 MySQL 并可以访问 test2
这是我插入的记录
如果您知道表City的结构,则可以创建一个相同的表,然后将 .frm 文件复制到现有损坏的表上