如何在mysql中设置innodb_force_recovery

分类:编程技术 时间:2024-02-20 15:43 浏览:0 评论:0
0
本文与大家分享如何在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。

< /tbody>

[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

[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》的文章就分享到这里。希望以上内容能够给大家带来一些帮助,让大家能够学到更多的知识。如果您觉得文章不错,可以分享出去,让更多的人知道。人们看到了!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在mysql中设置innodb_force_recovery

用户评论