29、数据都在内存里修改,服务器或数据库宕机会丢数据吗

你好,我是俊达。 InnoDB使用REDO和UNDO来实现事务的ACID属性,保障数据不丢。事务修改缓存页里的数据时,会生成UNDO和REDO日志,事务提交时,虽然缓存页没有实时刷新,但是会确保REDO日志已经完成持久化。 下面是REDO和UNDO机...

MySQL运维实战课

30、事务怎么回滚(上)

你好,我是俊达。 事务是关系型数据库的核心功能,具有ACID的特征。一个事务中的修改,要么全部生效,要么全部不生效,即使数据库异常崩溃,也不会违反事务的ACID属性。 上一讲中我们介绍了用来保证对数据库的修改都不丢的Redo机制。这一讲,我们来看一下...

MySQL运维实战课

31、事务怎么回滚(下)

你好,我是俊达。 我们接着上一讲,继续介绍Undo。 Undo里的链表结构Undo里面,存在着好几个链表结构,包括Undo页面链表、Undo日志头链表、Undo记录链表。 Undo段页面链表Undo段中的页面组成一个双向链表。开始时,Undo段只有1...

MySQL运维实战课

32、隔离级别对应用程序有什么影响

你好,我是俊达。 事务的ACID属性中,I(Isolation)表示隔离性,指的是多个事务并发执行时,各个事务之间相互独立,仿佛在独立的环境中执行一样。数据库用来实现隔离性的两个重要的方法分别是MVCC(Multi-Version Concurren...

MySQL运维实战课

33、 InnoDB锁定和死锁问题:为什么我的SQL锁超时了

你好,我是俊达。 这一讲我们来聊一聊MySQL中的锁。MySQL中,存在很多不同类型的锁,我们先来大致了解下不同锁的作用。 MySQL中的锁MySQL使用锁来控制多个并发的进程或线程对共享资源的访问。那么在MySQL中,有哪些共享资源呢? 我总结起来...

MySQL运维实战课

34、MySQL数据库高可用架构部署和维护

你好,我是俊达。 从这一讲开始,我们来聊一聊怎么构建和运维MySQL高可用环境。高可用的重要性和必要性,这里就不多说了。实现高可用,需要在IT系统的整个链路上消除单点。MySQL要实现高可用,最基本的就是数据复制技术。 MySQL数据复制技术简介数据...

MySQL运维实战课

35、MySQL半同步能提高主备数据的一致性吗

你好,我是俊达。 上一讲中,我留了一个问题,就是在默认的情况下,MySQL的数据复制是异步的,当主库意外崩溃后,备库是否有可能比主库多执行一些事务? 回答这个问题,需要对主库事务提交的过程,以及数据复制的细节有更深入的了解。这一讲我们就来看一看事务的...

MySQL运维实战课

36、备库有延迟怎么办

你好,我是俊达。 在MySQL高可用架构中,备库延迟一直很重要。备库延迟会带来各种问题。在读写分离架构下,如果备库有延迟,读备库时就可能会读到陈旧的数据,影响业务。当主库发生故障,需要切换到备库时,如果备库有延迟,就需要先等备库执行完积压的Binlo...

MySQL运维实战课

37、备库服务器异常重启,备库损坏了该如何修复

你好,我是俊达。 上一讲中,我留了几个问题,就是备库异常崩溃后,复制位点信息是否会丢失?备库重新启动后,复制能不能正常运行?位点信息如果有延迟,对备库有什么影响?这些问题实际上和一些复制参数的设置有关,也和是否使用了GTID Auto Positio...

MySQL运维实战课

38、为什么有了备库还要做备份兼谈 Xtrabackup 的使用

你好,我是俊达。 前面几讲,我花了比较多的篇幅介绍MySQL的数据复制。假设你的数据库都已经做了备库,有了完善的监控,为什么还要做数据库备份呢? 很重要的一个原因,是备库通常都和主库保持同步,如果在主库上执行了一个误操作,或者由于程序的Bug或外部攻...

MySQL运维实战课