一般形式:
- 从库启动两个线程,一个I/O线程,一个SQL线程
- 从库的I/O线程会请求主库的binlog日志,并将binlog日志写到本地的relay-log(中继日志)文件中
- 主库会生成一个log dump线程,用来给从库的I/O线程传送binlog日志
- 从库的SQL线程会从relay-log(中继日志)文件中读取并解析成SQL逐一执行
binlog日志:
binary log,主库保存所有更新事件的二进制文件。
MySQL中的 DDL、DML、DCL、TCL
- DDL(Data Definition Languages),数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常见的关键字有 create、alter、drop、truncate、comment、rename等
- DML(Data Manipulation Languages),数据操纵语句,用来查询、添加、更新、删除,常用关键字有select、insert、update、delete、merge、call、explain、lock table
- DCL(Data Control Languages),数据控制语句,用于授权、撤销数据库极其字段的权限,常用关键词grant、revoke
- TCL(Transaction Control Languages)事物控制语句,用于控制事物,常用关键词 commit、rollback、set、savepoint
主从延迟:
MySQL主从复制是单线程的,主库DDL和DML产生的日志写到binlog,但是在从库重放的时候,写数据I/O是随机的,会慢一些,当主库负载较高时,就会导致主从出现延迟
主从延迟解决方案
- 减轻主库压力,可以拆分业务将主库负载均摊,
- 减轻从库压力,可以多建从库,分摊读的压力,使用缓存,减少读的查询压力
- 从库选用更好的硬件设备
网友评论