一,mysql数据库主从同步复制原理
MySQL的 Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql instance(instance英文为实例)(我们称之为Master)复制到另一个Mysql instance(我们称之slave)。在master与slave之间实现整个复制过程主要由三个线程来完成,其中两个线程(SQL线程和IO线程) 在slave端,另外一个线程(IO线程)在master端。
要实现MySQL的 Replication,首先必须打开master端的binlog (mysql-bin.xxxxxx)日志功能,否则无法实现mysql的主从复制。因为mysql的整个主从复制过程实际上就是:slave端从 master端获取binlog日志,然后再在自己身上完全顺序的执行该日志中所记录的各种SQL操作。
具体过程:
1、master在执行sql之后,记录二进制log文件(bin-log)。
2、slave连接master,并从master获取binlog。
3、将binlog日志内容存于本地relay-log(mysql-relay- bin.xxxxxx)的最末端。
4、并读取到的master端的binlog文件名和pos节点位置记录到master-info(该文件存在slave 端)文件中。
5、然后从这个记住的位置起执行SQL语句,一旦遇到错误则停止同步。
简单的说就是: master通过binlogdump线程发送binlog发送到slave上,slave通过I/O线程读取后将数据复制relaylog中,再通过SQL线程读取并执行。
配置可参考:https://blog.csdn.net/jay_youth/article/details/81570700
二,mysql的索引(别称index,key,键)认识
在关系数据库中,索引是对表中一列或多列的值进行排序的一种存储结构,它是表中一列或多列的值的集合,而且其中包含了对应表中记录的引用指针。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
要注意的是,索引也是表的组成部分,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立索引。
举个例子:首先,先假设有一张表,表有10W个记录,其中有一条记录我们已知a='1',如果想要拿到对应记录的话,需要的sql语句是 SELECT * FROM xxx WHERE a='1'.一般情况下,对于查询语句,在没有建立索引的时候,mysql会进行全表扫描,而且不扫描完10W个记录不会停止,如果我在nickname上建立索引,那么mysql相当于只扫描nickname这一列即可,而且因为这一列已排好序,找到对应结果或结果集可以直接返回。
三,mysql的索引类型
索引分单列索引和组合索引。单列索引(全文索引,主键索引,唯一索引,普通索引),即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。
组合索引,即一个索引包含多个列。
具体可参考:https://www.cnblogs.com/chenshishuo/p/5030029.html
四,