zoukankan      html  css  js  c++  java
  • MySQL 8.0支持DDL原子化

    在MySQL 5.5/5.6/5.7版本中,DDL操作是非原子型操作,在执行过程中遇到实例故障重启,可能导致DDL没有完成也没有回滚。如
    1、执行DROP TABLE T1,T2操作,实例重启恢复后,表T1被删除,表T2仍存在。
    2、执行CREATE TABLE操作,创建过程中实例重启,表创建失败但是有部分表文件残留,导致后续DDL执行失败。
     
    问题原因:
    1、在MySQL Server层使用MyISAM引擎的系统表来存放元数据信息,故障恢复时不能保证数据一致性
    2、在存储引擎层不同引擎使用不同规则存放元数据信息,故障恢复后存在MySQL Server层和存储引擎层的元数据不一致问题。
     
    存在风险:
    1、两份元数据信息不一致,数据访问出错
    2、DDL操作未原子化,在DDL操作部分完成的情况下Binlog被传递到从库,导致主库不一致。
    3、DDL操作未原子化,导致故障恢复后,不能正常回滚和恢复
     
    MySQL 8.0解决办法:
    1、将MySQL Server层和存储引擎层的元数据信息统一存放在一起,并使用MySQL Innodb存储引起保存这些数据,保证事务一致性。
    2、使用Innodb表(系统表)存放DDL操作锁所产生的日志,用于DDL事务提交或回滚,每条DDL事务分配一个事务ID,所产生的DDL LOG被同步刷新到表中进行持久化,该同步操作不受参数innodb_flush_log_at_trx_commit的控制。
     
     
     
  • 相关阅读:
    msyql数据库位置
    linux端口
    crontab
    floyd算法 青云的机房组网方案(简单)
    拓扑排序 codevs 4040 cojs 438
    高精度模板
    莫比乌斯函数
    二分算法~~~大综合
    莫比乌斯反演 BZOJ 2820
    2016.6.2考试整理
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10610763.html
Copyright © 2011-2022 走看看