(1)前文回顾:
之前的很长一段时间,对于MySQL内核级工作原理已经有一个了解,包括数据如何写入MySQL服务器的内存以及磁盘的,过程中的事务,锁分别是怎么实现的,多事务并发的时候,隔离机制是如何运作的,MVCC的原理是什么?同时对MySQL的索引数据结构以及工作原理,包括SQL查询语句的执行原理以及执行计划的分析,以及SQL语句调优的一些技巧和方法,应该会有一个比较透彻的了解。
因此简单来说,假设面对一个单机版的MySQL数据库,对于数据库是如何执行增删改操作写入数据库的,以及索引是如何设计的,如何组织的,查询是如何执行的,查询应该如何优化,都有较为系统全面的理解,而且这个理解是基于MySQL内核级原理的,有一定深度。
(2)高可用主从复制:
由此进入一个全新的阶段,MySQL真正的生产环境,一定不是一个单机版的架构,因为单机版的MySQL一般仅能用于本地开发环境和测试环境,是绝对不可能运用于生产环境的。简单来说,MySQL在生产环境中,必须要搭建一套主从复制的架构,同时可以基于一些工具实现高可用架构。另外如果有需求,还需要基于一些中间件实现读写分离架构,最后如果数据量很大,还必须实现分库分表的架构。对生产环境下的MySQL架构有了一个全面的理解,能够在自己的生产项目中运用上MySQL的生产级的架构。
主从复制架构,顾名思义,就是部署两台机器,每台服务器上都得有一个MySQL,其中一个MySQL是master(主节点),另外一个MySQL是slave(从节点),然后系统平时连接到master节点写入数据,当然也可以从里面查询,跟用一个单机版的MySQL是一样的,但是master节点会把写入的数据自动复制到slave节点去,让slave节点可以跟master节点有一模一样的数据。
(3)主从架构的意义?
其实这个架构用处是极多的,首当其冲的一个需求就是高可用架构,如果MySQL单机部署,一旦宕机,岂不是数据库就完蛋了,数据库完蛋了,Java业务系统也就完蛋了,所以,真正生产架构里,MySQL必须得做高可用架构。
高可用架构怎么做?先决条件就是主从复制架构,必须让主节点可以复制数据到从节点,保证主从数据是一致的,接着万一主节点宕机,此时可以让Java业务系统连接到从节点上去执行SQL语句,写入和查询数据,因为主从数据是一致的,所以这是没问题的。
(4)主从的注意点:
如果实现了这样的效果,自然实现了MySQL的高可用了,单机宕机不影响你的Java业务系统的运行,但是也得注意,实际哪怕这套架构运用到生产环境,也是有大量的问题要解决。比如主从进行数据复制的时候,其实从节点通常会落后一些,所以数据不完全一致。另外,主节点宕机后,要能自动切换从节点对外提供服务,这个也需要一些中间件的支持,也没那么容易。
知识点:主从架构中,建索引,需要每个MySQL建相同的一份索引。