如何在mysql中设置innodb_force_recovery
mysql> 显示类似 '%innodb_force_recovery%' 的变量;
+------------------------+ -------+
|变量名 |值 |
+---------------------- -+--------+
| innodb_force_recovery | innodb_force_recovery | innodb_force_recovery 0 |
+-------------------- ---+--------+
该参数默认值为0,表示需要恢复时,将执行模型的所有恢复操作。当无法进行有效的恢复时,例如数据页发生损坏时,MySQL数据库可能会崩溃并将错误写入错误日志。
该参数还可以设置为 6 个非零值:1-6。大数字代表之前所有小数字的影响。
1 srv_force_ignore_corrupt:忽略检查的损坏页
2 srv_force_no_background:防止running of Master Thread 线程,例如 Master Thread 线程需要进行完全清除操作,这可能会导致崩溃。
3 srv_force_no_trx_undo:不执行事务回滚操作
4 srv_force_no_ibuf_merge:不执行insert buffer merge操作
5 srv_force_no_undo_log_scan:不查看undo log (undo log),InnoDB存储引擎会将未提交的事务视为已提交
6 srv_force_no_log_redo 无前滚操作
注意:
当设置参数innodb_force_recovery时大于0 用户可以对表进行select、create、drop操作,但不允许进行insert\update\delete等DML操作。
模拟失败
数据库已更改 mysql>启动事务 -> ; 查询正常,0 行受影响(0.00 秒) mysql> update t4 set VERSION=1; 查询正常,581632 行受影响(11.40 秒) 行匹配d:581632 更改:581632 警告:0 [root@mysql5-7 ~]# ps aux | grep mysql root 3928 0.0 0.0 106244 1448 pts/1 S 14:55 0:00 /bin/sh /usr/local/mysql/ bin/mysqld_safe --defaults-file=/data/3306/ my.cnf root 4585 0.0 0.1 126688 3012 pts/1 S+ 14:55 0:00 mysql -uroot -px xxxx -S /data/3306/soket/mysql.sock mysql 4624 10.3 21.7 2 269864 417796 pts/ 1 Sl 14:57 0:18 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local /mysql --datadir=/data/3306 /data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/logs/mysql_ray.err - -open-files-limit=10240 --pid-file=/data/3306/logs/ray.pid --socket=/data/3306/soket/mysql.sock --port=3306 根 5884 0.0 0.0 100952 612 点/2 S+ 15:00 0:00 尾部 -f /data/3306/logs/mysql_ray.err 根 5889 0.0 0.0 103260 832 点/3 S+ 15:00 0 :00 grep mysql [root@mysql5-7 ~]#kill -9 3928 [root@mysql5-7 ~]#kill -9 4624 [root@mysql5-7 ~]# ps aux | G代表mysql root 4585 0.0 0.1 126688 3012 pts/1 S+ 14:55 0:00 mysql -uroot -px xxxx -S /data/3306/soket/mysql.sock 根 5884 0.0 0.0 100952 612 点/2 S+ 15:00 0:00 尾部 -f /data/3306/logs/mysql_ray.错误 root 5895 0.0 0.0 103260 836 pts/3 S+ 15:00 0:00 grep mysql 2017-05-25T07: 01:10.663268Z 0 [注意] InnoDB: 数据库未正常关闭! 2017-05-25T07:01:10.663287Z0 [注意] InnoDB: 开始崩溃恢复。 2017 -05-25T07:01:10.695649Z 0 [注意] InnoDB:必须回滚或清理 1 个事务,总共 581632 行操作才能撤消 2017-05-25T07:01: 10.695733Z 0 [注意] InnoDB: Trx id 计数器为 5888 2017-05-25T07:01:10.700667Z 0 [注意] InnoDB: 最后的 MySQL binlog 文件位置 0 62744449,文件名 ray-bin. 000007 2017-05-25T07:01:10.806383Z 0 [注意] InnoDB:删除临时表空间数据文件:“ibtmp1” 2017-05-25T07:01:10.806472Z 0 【注意】InnoDB:为临时表创建共享表空间 |
这里我们看到有 581632 个要撤消的行操作。由于数据回滚,启动时间会更长。如果回滚的数据很多,启动时间会很慢。
再做一次实验,设置innodb_force_recovery为3。
[root@mysql5-7 ~]#辅助 | grep mysql root 4585 0.0 0.1 126640 3004 pts/1 S+ 14:55 0:00 mysql -uroot -px xxxx -S /data/3306/soket/mysql.sock 根 5884 0.0 0.0 100952 612 点/2 S+ 15:00 0:00 尾部 -f /data/3306/logs/mysql_ray.err 根 5916 0.0 0.0 106244 1456 点/3 S 15:01 0 :00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults -file=/data/3306/my.cnf mysql 6546 7.3 21.7 2269272 417740 pts/3 Sl 15:01 0:19 /usr/local/mysql/bin/mysqld --defaults-file= /data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin -dir=/usr/local/mysql/lib/plugin --user=mysql - -log-error=/data/3306/logs/mysql_ray.err --open-files-limit=10240 --pid-file=/data/3306/logs/ray.pid --socket=/data/3306/soket/mysql.sock --port=3306 root 6586 0.0 0.0 103260 836 pts/3 S+ 15:05 0:00 grep mysql [root@mysql5-7 ~]#kill -9 5916 [root@mysql5-7 ~]#kill -9 6546 [root@mysql5-7 ~]#kill -9 6546 p> [root@mysql5- 7 ~]# ps aux | grep mysql root 4585 0.0 0.1 126640 3004 pts/1 S+ 14:55 0:00 mysql -uroot -px xxxx -S /data/3306/soket/mysql.sock 根 5884 0.0 0.0 100952 612 点/2 S+ 15:00 0:00 tail -f /data/3306/logs/mysql_ray.err 根 5916 0.0 0.0 1062 44 1456 点/3 S 15:01 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf mysql 6546 7.3 21.7 2269272 417740 pts/ 3 Sl 15: 01 0:19 /usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/3306 /data --插件目录=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3306/logs/mysql_ray.err --open-files-limit=10240 --pid-file= /data/3306/logs/ray.pid --socket=/data/3306/soket/mysql.sock --port=3306 root 6586 0.0 0.0 103260 836 pts/3 S+ 15:05 0:00 grep mysql [root@mysql5-7 ~]#kill -9 5916 p> [root@mysql5-7 ~]#kill -9 6546 2017-05-25T07:06:05.298605Z 0 【注】 InnoDB:32 个非重做回滚段处于活动状态。 2017-05-25T07:06:05.299344Z 0 [注意] InnoDB:5.7.10 开始;日志序列号805301564 2017-05-25T07:06:05.299424Z 0 【注意】InnoDB:!!! innodb_force_recovery 设置为 3 !!! 2017-05-25T07:06:05.300353Z 0 [注意] 插件“FEDERATED”已禁用。 2017-05-25T07:06 :05.302471Z 0 [Note] 使用 /data/ 3306/logs/ray-bin 崩溃后恢复 2017-05-25T07:06:05.302981Z 0 [Note] InnoDB: 加载缓冲池) 来自 /data/3306/data/ib_buffer_pool 2017-05-25T07:06:05.303049Z 0 [注意] InnoDB: 未启动 2017-05-25T07:06: 05.305844Z 0 [注意] 开始崩溃恢复... 2017-05-25T07:06:05.305926Z 0 [注意] 崩溃恢复已完成。 |
因为没有回滚,所以启动很快就完成了。但用户应注意数据库当前的状态,并确认是否不需要回滚事务。
感谢您的阅读!这篇关于《如何在mysql中设置innodb_force_recovery》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人知道。人们看到了!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在mysql中设置innodb_force_recovery