Home Database Mysql Tutorial MySQL数据库INNODB 表损坏修复过程

MySQL数据库INNODB 表损坏修复过程

Jun 07, 2016 pm 04:16 PM
innodb mysql repair damage database process

突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,下次遇到就不会这么手忙脚乱了。 处理过程: 一遇到报警之后,直接打开错误日志,

   突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程,,下次遇到就不会这么手忙脚乱了。

  处理过程:

  一遇到报警之后,直接打开错误日志,里面的信息:

  InnoDB: Database page corruption on disk or a failed

  InnoDB: file read of page 30506.

  InnoDB: You may have to recover from a backup.

  130509 20:33:48 InnoDB: Page dump in ascii and hex (16384 bytes):

  ##很多十六进制的代码

  ……

  ……

  InnoDB: End of page dump

  130509 20:37:34 InnoDB: Page checksum 1958578898, prior-to-4.0.14-form checksum 3765017239

  InnoDB: stored checksum 3904709694, prior-to-4.0.14-form stored checksum 3765017239

  InnoDB: Page lsn 5 614270220, low 4 bytes of lsn at page end 614270220

  InnoDB: Page number (if stored to page already) 30506,

  InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 19

  InnoDB: Page may be an index page where index id is 54

  InnoDB: (index "PRIMARY" of table "maitem"."email_status")

  InnoDB: Database page corruption on disk or a failed

  InnoDB: file read of page 30506.

  InnoDB: You may have to recover from a backup.

  InnoDB: It is also possible that your operating

  InnoDB: system has corrupted its own file cache

  InnoDB: and rebooting your computer removes the

  InnoDB: error.

  InnoDB: If the corrupt page is an index page

  InnoDB: you can also try to fix the corruption

  InnoDB: by dumping, dropping, and reimporting

  InnoDB: the corrupt table. You can use CHECK

  InnoDB: TABLE to scan your table for corruption.

  InnoDB: See also

  InnoDB: about forcing recovery.

  InnoDB: A new raw disk partition was initialized or

  InnoDB: innodb_force_recovery is on: we do not allow

  InnoDB: database modifications by the user. Shut down

  InnoDB: mysqld and edit my.cnf so that newraw is replaced

  InnoDB: with raw, and innodb_force_... is removed.

  130509 20:39:35 [Warning] Invalid (old?) table or database name '#sql2-19c4-5'

  从错误日志里面很清楚的知道哪里出现了问题,该怎么处理。这时候数据库隔几s就重启,所以差不多可以说你是访问不了数据库的。所以马上想到要修复innodb表了。

  以前在Performance的blog上看过类似文章。

  当时想到的是在修复之前保证数据库正常,不是这么异常的无休止的重启。所以就修改了配置文件的一个参数:innodb_force_recovery

  innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的

  innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

  1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。

  2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。

  3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。

  4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。

  5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。

  6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

  因为错误日志里面提示出现了坏页,导致数据库崩溃,所以这里把innodb_force_recovery 设置为1,忽略检查到的坏页。重启数据库之后,正常了,没有出现上面的错误信息。找到错误信息出现的表:

  (index "PRIMARY" of table "maitem"."email_status")

  数据页面的主键索引(clustered key index)被损坏。这种情况和数据的二级索引(secondary indexes)被损坏相比要糟很多,因为后者可以通过使用OPTIMIZE TABLE命令来修复,但这和更难以恢复的表格目录(table dictionary)被破坏的情况来说要好一些。

  操作步骤:

  因为被破坏的地方只在索引的部分,所以当使用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回来。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1664
14
PHP Tutorial
1269
29
C# Tutorial
1248
24
MySQL and phpMyAdmin: Core Features and Functions MySQL and phpMyAdmin: Core Features and Functions Apr 22, 2025 am 12:12 AM

MySQL and phpMyAdmin are powerful database management tools. 1) MySQL is used to create databases and tables, and to execute DML and SQL queries. 2) phpMyAdmin provides an intuitive interface for database management, table structure management, data operations and user permission management.

MySQL vs. Other Programming Languages: A Comparison MySQL vs. Other Programming Languages: A Comparison Apr 19, 2025 am 12:22 AM

Compared with other programming languages, MySQL is mainly used to store and manage data, while other languages ​​such as Python, Java, and C are used for logical processing and application development. MySQL is known for its high performance, scalability and cross-platform support, suitable for data management needs, while other languages ​​have advantages in their respective fields such as data analytics, enterprise applications, and system programming.

Oracle's Role in the Business World Oracle's Role in the Business World Apr 23, 2025 am 12:01 AM

Oracle is not only a database company, but also a leader in cloud computing and ERP systems. 1. Oracle provides comprehensive solutions from database to cloud services and ERP systems. 2. OracleCloud challenges AWS and Azure, providing IaaS, PaaS and SaaS services. 3. Oracle's ERP systems such as E-BusinessSuite and FusionApplications help enterprises optimize operations.

Explain the purpose of foreign keys in MySQL. Explain the purpose of foreign keys in MySQL. Apr 25, 2025 am 12:17 AM

In MySQL, the function of foreign keys is to establish the relationship between tables and ensure the consistency and integrity of the data. Foreign keys maintain the effectiveness of data through reference integrity checks and cascading operations. Pay attention to performance optimization and avoid common errors when using them.

Compare and contrast MySQL and MariaDB. Compare and contrast MySQL and MariaDB. Apr 26, 2025 am 12:08 AM

The main difference between MySQL and MariaDB is performance, functionality and license: 1. MySQL is developed by Oracle, and MariaDB is its fork. 2. MariaDB may perform better in high load environments. 3.MariaDB provides more storage engines and functions. 4.MySQL adopts a dual license, and MariaDB is completely open source. The existing infrastructure, performance requirements, functional requirements and license costs should be taken into account when choosing.

SQL vs. MySQL: Clarifying the Relationship Between the Two SQL vs. MySQL: Clarifying the Relationship Between the Two Apr 24, 2025 am 12:02 AM

SQL is a standard language for managing relational databases, while MySQL is a database management system that uses SQL. SQL defines ways to interact with a database, including CRUD operations, while MySQL implements the SQL standard and provides additional features such as stored procedures and triggers.

How to safely store JavaScript objects containing functions and regular expressions to a database and restore? How to safely store JavaScript objects containing functions and regular expressions to a database and restore? Apr 19, 2025 pm 11:09 PM

Safely handle functions and regular expressions in JSON In front-end development, JavaScript is often required...

Redis: Understanding Its Architecture and Purpose Redis: Understanding Its Architecture and Purpose Apr 26, 2025 am 12:11 AM

Redis is a memory data structure storage system, mainly used as a database, cache and message broker. Its core features include single-threaded model, I/O multiplexing, persistence mechanism, replication and clustering functions. Redis is commonly used in practical applications for caching, session storage, and message queues. It can significantly improve its performance by selecting the right data structure, using pipelines and transactions, and monitoring and tuning.

See all articles