MySQL问题
MYSQL
1、主从复制
总览:
mysql主从复制是一个异步的复制过程:
1、主库会创建一个binlog输出线程,实时的将mysql的操作写入本地的binlog二进制文件中
2、从库开始复制时
创建从库I/O线程,将主库传来的binlog文件,保存到本地的relay log文件中。
创建SQL线程,从ready log文件中的操作取出来进行执行,完成复制。
流程:
- 步骤一:主库db的更新事件(update、insert、delete)被写到binlog
- 步骤二:从库发起连接,连接到主库
- 步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库
- 步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
- 步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db
2、数据结构
-
聚簇索引-InnoDB(常用)
-
非聚簇索引-MyISAM(不常用)
区别:
1、InnoDB支持事务,MyISAM不支持事务
2、InnoDB支持外键,MyISAM不支持外键
3、两者使用的都是B+树作为索引结构,其中:
InnoDB的叶子节点存放了索引和数据
MyISAM叶子节点只存放了指向数据的索引值
InnoDB:
主索引:按主键来进行聚集,表必须要有主键,若无主键,mysql会自动选择一个唯一标识的数据记录列作为主键,若不存在该列,会生成一个隐含字段作为主键,长度为6,类型为长整型。最终叶子节点存放该条数据的全部数据。
辅助索引:都是主索引的data域中的各个数据列来作为辅助索引,最终叶子节点存放主索引的索引值。
MYISAM:
主索引:将主键为索引,最终叶子节点存放指向数据磁盘地址的指针。
辅助索引:是其他列作为索引,最终叶子节点也是存放指向数据磁盘地址的指针。