|
主从复制分了五个步骤进行:
步骤一:主库的更新事件(update、insert、delete)被写到binlog。
步骤二:从库发起连接,连接到主库。
步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log。
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db。
2.Mysql逻辑架构图
如果能在脑海中构建出MySql各组件之间如何协同工作的架构图,就会有助于深入理解MySql服务器。逻辑架构图主要分三层:
1) 第一层负责连接处理,授权认证,安全等等
-
每个客户端连接都会在服务器进程中拥有一个线程,服务器维护了一个线程池,因此不需要为每一个新建的连接创建或者销毁线程。
-
当客户端连接到Mysql服务器时,服务器对其进行认证,通过用户名和密码认证,也可以通过SSL证书进行认证。
-
一旦客户端连接成功,服务器会继续验证客户端是否具有执行某个特定查询的权限。
2)第二层负责编译并优化SQL
-
这一层包括查询解析,分析,优化,缓存以及所有的的内置函数。
-
对于SELECT语句,在解析查询前,服务器会先检查查询缓存,如果能在其中找到对应的查询结果,则无需再进行查询解析、优化等过程,直接返回查询结果。
-
所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图。
3)第三层是存储引擎。
-
存储引擎负责在MySQL中存储数据、提取数据。
-
存储引擎通过API与上层进行通信,这些API屏蔽了不同存储引擎之间的差异,使得这些差异对上层查询过程透明。
-
存储引擎不会去解析SQL,不同存储引擎之间也不会相互通信,而只是简单地响应上层服务器的请求。
3.InnoDb 逻辑存储结构图
从InnoDb 存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace)。表空间又由段(segment),区(extent),页(page)组成。页在一些文档中有时候也称为块(block)。 InnoDb 逻辑存储结构图如下:
-
间是Innodb存储引擎逻辑的最高层,所有的数据都存放在表空间中。
-
默认情况下,Innodb存储引擎有一个共享表空间ibdata1,即所有数据都存放在这个表空间中内。
-
如果启用了innodb_file_per_table参数,需要注意的是每张表的表空间内存放的只是数据、索引、和插入缓冲Bitmap,其他类的数据,比如回滚(undo)信息、插入缓冲检索页、系统事物信息,二次写缓冲等还是放在原来的共享表内的。
段(segment)
-
表空间由段组成,常见的段有数据段、索引段、回滚段等。
-
InnoDB存储引擎表是索引组织的,因此数据即索引,索引即数据。数据段即为B+树的叶子结点,索引段即为B+树的非索引结点。
-
在InnoDB存储引擎中对段的管理都是由引擎自身所完成,DBA不能也没必要对其进行控制。
区(extent)
-
区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。
-
为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。
-
默认情况下,InnoDB存储引擎页的大小为16KB,一个区中一共64个连续的区。
页(page)
-
页是InnoDB磁盘管理的最小单位。
-
在InnoDB存储引擎中,默认每个页的大小为16KB。
-
从InnoDB1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K,8K,16K。
-
InnoDB存储引擎中,常见的页类型有:数据页,undo页,系统页,事务数据页,插入缓冲位图页,插入缓冲空闲列表页等。
-

(编辑:葫芦岛站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|