马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

生产环境下,MySQL大事务操作导致的回滚解决方案

[复制链接]
查看2049 | 回复0 | 2019-10-24 09:48:09 | 显示全部楼层 |阅读模式

如果mysql中有正在实行的大事件DML语句,此时不能直接将该历程kill,否则会引发回滚,非常消耗数据库资源和性能,生产环境下会导致巨大生产事故。

如果事件利用的语句非常之多,而且没有办法等待那么久,可以采取以后利用:

1. 在数据库中的配置文件中新增:innodb_force_recovery = 3。

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):不实行前滚的利用。


2.
重启msql,drop掉导致回滚的表,再将配置文件恢复成默认值(即不需要在配置文件中设置innodb_force_recovery参数),再次重启mysql。

 重启利用会因为数据量非常大,导致mysql恢复缓慢,此时需要等待mysql举行瓦解恢复。根据数据量的不同,等待的时间也不同。

注:

  如果需要导入导出数据库数据,可以使用以下下令:

  1. 导出:mysqldump -uroot -p --opt -R -E --default-character-set=utf8 --databases device2> /mysql/device_20191022.sql

      mysql5.7以后可以使用pump下令,调用多线程:

        /mysql/bin/mysqlpump -uroot -p --default-character-set=utf8 --compress-output=LZ4 --default-parallelism=4 --databases device2 > /mysql/device_20191022.sql.LZ4

  2. 导入:mysql -uroot -p < /opt/device_20191022.sql

      如果使用了pump导出,需要先解压:

        lz4_decompress /tmp/backup_kevin.sql /tmp/kevin.sql

        mysql < source /tmp/kevin.sql;







来源:https://www.cnblogs.com/wangjingu/p/11729462.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则