解决数据库Operation not allowed when innodb_forced_recovery > 0

请修改my.cnf

innodb_force_recovery = 1

修改为

innodb_force_recovery = 0

在关闭时,参数innodb_fast_shutdown影响着表的存储引擎为InnoDB的行为。

该参数取值为0、1、2

0 代表党MySql关闭时,InnoDB需要完成所有的full purge 和 merge insert buffer操作,这会需要一些时间。1 代表不需要完成上述的full purge ,merge insert buffer操作,但是在缓冲池的一些数据脏页还是会刷新到磁盘。2 代表不完成full purge ,merge insert buffer操作,也 不将缓冲池中的数据脏页写回磁盘,而是将日志都写入日志文件。这样不会有任何事物会丢失,但是Mysql数据库下次启动时,会执行recovery
参数Innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况。默认0

测试:

环境:innodb_fast_shutdown = 2

innodb_flush_log_at_trx_commit  = 2

sync_binlog   = 0

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

恢复操作。当不能进行有效的恢复操作时,mysql有可能无法启动,并记录下错误日志。
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):不执行前滚的操作。

测试一
破坏xbb5.ibd表
删除了数据页

innodb_force_recovery = 1-3  表不可用
报ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysqld.sock' 错误
innodb_force_recovery = 4-6  select * 可用,select count(*) 不准缺
报ERROR 2013 (HY000): Lost connection to MySQL server during query错误

测试二
创建事务,不提交

root@test 04:32:32>begin;
Query OK, 0 rows affected (0.01 sec) root@test 04:33:14>update test set b = b+100;
Query OK, 9999 rows affected (0.18 sec)
Rows matched: 9999  Changed: 9999  Warnings: 0

innodb_force_recovery =0  要检查回滚操作

130626 16:32:20  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 9999 row operations to undo
InnoDB: Trx id counter is 0 12544
InnoDB: Last MySQL binlog file position 0 920753, file name /vobiledata/mysqllog/mysql-bin.000245
InnoDB: Starting in background the rollback of uncommitted transactions
130626 16:32:21  InnoDB: Rolling back trx with id 0 12032, 9999 rows to undo InnoDB: Progress in percents: 1130626 16:32:21  InnoDB: Started; log sequence number 0 4330016
130626 16:32:21 [Note] Recovering after a crash using /vobiledata/mysqllog/mysql-bin
130626 16:32:21 [Note] Starting crash recovery...
130626 16:32:21 [Note] Crash recovery finished.
 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97130626 16:32:21 [Note] Event Scheduler: Loaded 0 events
130626 16:32:21 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
 98 99 100
InnoDB: Rolling back of trx id 0 12032 completed
130626 16:32:21  InnoDB: Rollback of non-prepared transactions completed

如果回滚数据多,恢复就相对的慢
innodb_force_recovery =2 阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。

InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 9999 row operations to undo
InnoDB: Trx id counter is 0 15616
InnoDB: Last MySQL binlog file position 0 920753, file name /vobiledata/mysqllog/mysql-bin.000245
InnoDB: Starting in background the rollback of uncommitted transactions
130626 17:05:53  InnoDB: Rolling back trx with id 0 15104, 9999 rows to undo InnoDB: Progress in percents: 1130626 17:05:53  InnoDB: Started; log sequence number 0 13016158
InnoDB: !!! innodb_force_recovery is set to 2 !!!
130626 17:05:53 [Note] Recovering after a crash using /vobiledata/mysqllog/mysql-bin
130626 17:05:53 [Note] Starting crash recovery...
130626 17:05:53 [Note] Crash recovery finished.
 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85130626 17:05:53 [Note] Event Scheduler: Loaded 0 events
130626 17:05:53 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
InnoDB: Rolling back of trx id 0 15104 completed
130626 17:05:53  InnoDB: Rollback of non-prepared transactions completed

innodb_force_recovery =3 不执行回滚操作

130626 16:33:53  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 9999 row operations to undo
InnoDB: Trx id counter is 0 13056
InnoDB: Last MySQL binlog file position 0 920753, file name /vobiledata/mysqllog/mysql-bin.000245
130626 16:33:53  InnoDB: Started; log sequence number 0 6497918
InnoDB: !!! innodb_force_recovery is set to 3 !!!
130626 16:33:53 [Note] Recovering after a crash using /vobiledata/mysqllog/mysql-bin
130626 16:33:53 [Note] Starting crash recovery...
130626 16:33:53 [Note] Crash recovery finished.
130626 16:33:53 [Note] Event Scheduler: Loaded 0 events
130626 16:33:53 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

innodb_force_recovery =5 不查看重做日志,innodb存储引擎会将未提交的事务事务已经提交
此时数据已经被update

+----+------+------+------+
| a  | b    | c    | d    |
+----+------+------+------+
|  1 |  101 |    1 |    1 |
|  2 |  102 |    2 |    2 |
|  3 |  103 |    3 |    3 |
|  4 |  104 |    4 |    4 |
|  5 |  105 |    5 |    5 |
|  6 |  106 |    6 |    6 |
|  7 |  107 |    7 |    7 |
|  8 |  108 |    8 |    8 |
|  9 |  109 |    9 |    9 |
| 10 |  110 |   10 |   10 |
+----+------+------+------+

innodb_force_recovery =6 不执行前滚操作,但是恢复的时候有回滚操作

+----+------+------+------+
| a  | b    | c    | d    |
+----+------+------+------+
|  1 |  101 |    1 |    1 |
|  2 |  102 |    2 |    2 |
|  3 |  103 |    3 |    3 |
|  4 |  104 |    4 |    4 |
|  5 |  105 |    5 |    5 |
|  6 |  106 |    6 |    6 |
|  7 |  107 |    7 |    7 |
|  8 |  108 |    8 |    8 |
|  9 |  109 |    9 |    9 |
| 10 |  110 |   10 |   10 |
+----+------+------+------+
130626 16:44:29  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 0 8680656
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 9999 row operations to undo
InnoDB: Trx id counter is 0 14080
InnoDB: Last MySQL binlog file position 0 920753, file name /vobiledata/mysqllog/mysql-bin.000245
InnoDB: Starting in background the rollback of uncommitted transactions
130626 16:44:29  InnoDB: Rolling back trx with id 0 13057, 9999 rows to undo InnoDB: Progress in percents: 1130626 16:44:29  InnoDB: Started; log sequence number 0 8680656
 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79130626 16:44:29 [Note] Event Scheduler: Loaded 0 events
130626 16:44:29 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
InnoDB: Rolling back of trx id 0 13057 completed
130626 16:44:29  InnoDB: Rollback of non-prepared transactions completed
130626 16:45:08 mysqld_safe Starting mysqld daemon with databases from /vobiledata/mysqldata
130626 16:45:08 [Note] Plugin 'FEDERATED' is disabled.
130626 16:45:08  InnoDB: Initializing buffer pool, size = 2.0G
130626 16:45:08  InnoDB: Completed initialization of buffer pool
InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on
InnoDB: Skipping log redo
130626 16:45:08  InnoDB: Started; log sequence number 0 0
InnoDB: !!! innodb_force_recovery is set to 6 !!!
130626 16:45:08 [Note] Recovering after a crash using /vobiledata/mysqllog/mysql-bin
130626 16:45:08 [Note] Starting crash recovery...
130626 16:45:08 [Note] Crash recovery finished.
130626 16:45:08 [Note] Event Scheduler: Loaded 0 events
130626 16:45:08 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
130626 16:45:14  InnoDB: error: space object of table test/test,
InnoDB: space id 3 did not exist in memory. Retrying an open.
-+------+------+------+
|  1 |  101 |    1 |    1 |
|  2 |  102 |    2 |    2 |
|  3 |  103 |    3 |    3 |
|  4 |  104 |    4 |    4 |
|  5 |  105 |    5 |    5 |
|  6 |  106 |    6 |    6 |
|  7 |  107 |    7 |    7 |
|  8 |  108 |    8 |    8 |
|  9 |  109 |    9 |    9 |
| 10 |  110 |   10 |   10 |
+----+------+------+------+
130626 16:44:29  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 0 8680656
InnoDB: 1 transaction(s) which must be rolled back or cleaned up
InnoDB: in total 9999 row operations to undo
InnoDB: Trx id counter is 0 14080
InnoDB: Last MySQL binlog file position 0 920753, file name /vobiledata/mysqllog/mysql-bin.000245
InnoDB: Starting in background the rollback of uncommitted transactions
130626 16:44:29  InnoDB: Rolling back trx with id 0 13057, 9999 rows to undo InnoDB: Progress in percents: 1130626 16:44:29  InnoDB: Started; log sequence number 0 8680656
 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79130626 16:44:29 [Note] Event Scheduler: Loaded 0 events
130626 16:44:29 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
InnoDB: Rolling back of trx id 0 13057 completed
130626 16:44:29  InnoDB: Rollback of non-prepared transactions completed
130626 16:45:08 mysqld_safe Starting mysqld daemon with databases from /vobiledata/mysqldata
130626 16:45:08 [Note] Plugin 'FEDERATED' is disabled.
130626 16:45:08  InnoDB: Initializing buffer pool, size = 2.0G
130626 16:45:08  InnoDB: Completed initialization of buffer pool
InnoDB: The user has set SRV_FORCE_NO_LOG_REDO on
InnoDB: Skipping log redo
130626 16:45:08  InnoDB: Started; log sequence number 0 0
InnoDB: !!! innodb_force_recovery is set to 6 !!!
130626 16:45:08 [Note] Recovering after a crash using /vobiledata/mysqllog/mysql-bin
130626 16:45:08 [Note] Starting crash recovery...
130626 16:45:08 [Note] Crash recovery finished.
130626 16:45:08 [Note] Event Scheduler: Loaded 0 events
130626 16:45:08 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.1.57-log'  socket: '/tmp/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
130626 16:45:14  InnoDB: error: space object of table test/test,
InnoDB: space id 3 did not exist in memory. Retrying an open.

解决数据库Operation not allowed when innodb_forced_recovery > 0的更多相关文章

  1. mydqldump 备份数单库 然后还原数据的时候报:ERROR 1881 (HY000) at line 52: Operation not allowed when innodb_forced_recovery > 0.

    修改my.cnf innodb_force_recovery = 1 修改为: innodb_force_recovery = 0

  2. db2数据库表操作错误SQL0668N Operation not allowed for reason code "1" on table "表". SQLSTATE=57016的解决方法

    错误sql Operation not allowed for reason code "1" on table "MARKET.PURE_USER".. SQ ...

  3. Operation not allowed after ResultSet closed--操作mysql数据库

    一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互相交替使用,会引起rs已经关闭错误——Operation not all ...

  4. SQLExecption:Operation not allowed after ResultSet closed解决办法

    原网址:http://blog.csdn.net/sku0923/article/details/1722370 一个stmt多个rs进行操作引起的ResultSet已经关闭错误 一个stmt多个rs ...

  5. Operation not allowed for reason code "7" on table 原因码 "7"的解决

    对表进行任何操作都不被允许,提示SQLSTATE=57016 SQLCODE=-668 ,原因码 "7"的错误:SQL0668N Operation not allowed for ...

  6. dbexpress连接mysql提示Operation not allowed on a unidirectional dataset

    最近刚接触delphi,在了解到dbExpress连接mysql的时候,出现了一些问题,特记录下 我遇到的问题有两个 1. TDBGrid --DataSet=TDataSource1 TDataSo ...

  7. db2报错 Operation not allowed for reason

    1.DB2数据库表操作错误SQL0668N Operation not allowed for reason code "1" on table "XXXX". ...

  8. ORA-00392: log 4 of thread 2 is being cleared, operation not allowed

     alter database open resetlogs或者 alter database open resetlogs upgrade报错:ORA-00392 在rman restore 还原数 ...

  9. java.sql.SQLException: Operation not allowed after ResultSet closed

    转自:http://blog.csdn.net/hellobobantang/article/details/7173622 java.sql.SQLException: Operation not ...

随机推荐

  1. NFinal 揭秘之控制器

    用NFinal框架开发的项目类似于MVC的那种开发方式,有Controller层.Model层.View层,还包括表现层Web层,在NFinal开发的项目中真正执行的代码也就是Web层中的代码,Web ...

  2. C# 操作 AppSettings节点

    1.实例 //1.简单获取内容 string value = ConfigurationManager.AppSettings["one"] as string; Console. ...

  3. java web实现img读取盘符下的图像

    最近做了一个项目,用户上传图片后通过img控件显示出来.大家都知道img通过src属性就可以显示图片.如<img src="http://127.0.0.1/a/b/abc.jpg&q ...

  4. rsync+inotify实时同步方案

    rsync+inotify实时同步,inotify可以实时监控本地文件或目录变化,当检测到本地文件变化,执行rsync同步命令,将变化的文件同步到其他服务器节点. 1.配置环境 3.在服务节点1.服务 ...

  5. About USB Data Link Cable API

    About USB Data Link Cable API The text on this webpage is licensed under the Creative Commons Attrib ...

  6. 管理员权限dropfiles和copydata小时失败问题

    //处理低权限向高权限进程发消息的失败的问题 if(windows::version::instance()->IsVistaOrLater()) { typedef BOOL (WINAPI ...

  7. PHP连接Microsoft SQL Server 2005/2008

    PHP自带的MSSQL扩展php_mssql.dll原来是给SQL Server 2000用的,难怪连接不上2008?! -_-!!要使用SQL Server 2005以上版本,就要用到微软为PHP提 ...

  8. hadoop配置文件的加载机制

    hadoop通过Configuration类来保存配置信息 1.通过Configuration.addResource()来加载配置文件 2.通过Configuration.get***()来获取配置 ...

  9. HTML5简单入门系列(一)

    前言 随着HTML5的流行,LZ作为一个web开发者,也决定学习一下前端前沿技术. HTML5 是下一代的HTML,它将成为 HTML.XHTML 以及 HTML DOM 的新标准.它是W3C( Wo ...

  10. 剖析C语言中a=a+++++a的无聊问题

    同僚们闲聊,突然就聊到了a+++++a的问题.这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧.于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解.更有人写出(a++)+(++a) a ...