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

当MySQL中存在正在执行的大事务时,直接kill会导致回滚并消耗大量资源。为避免生产事故,可以设置innodb_force_recovery来禁用回滚。步骤包括设置innodb_force_recovery为3,重启MySQL,删除问题表,然后恢复默认配置并再次重启。此外,介绍了使用mysqldump和mysqlpump进行数据库的导出和导入操作,以备数据管理需求。
摘要由CSDN通过智能技术生成

如果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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值