• 涉及mysql集群
    • 主从复制
    • 读写分离
    • 分库分表
  • 优化
    • 监控sql执行时间
    • 减少连接
    • 数据库设计时字段类型,schema选择
    • 索引优化
    • sql语句优化
    • 设置mysql参数
    • 分布式集群如何设计

1、什么是主从复制

  • 添加代理层proxy分配查询任务
  • 读写分离:读和写分到不同的数据库
    • 多台数据库要数据同步->主从复制
  • 日志类型
    • binlog
      • 归属于mysql服务,记录更改数据的语句
    • undo log
      • 归属于innodb存储引擎
    • redo log
      • 归属于innodb存储引擎
  • 主从复制
    • master
      • 客户端在master进行DML操作,会记录binlog日志
    • slave
      • slave将binlog读取写入到本地(IO thread),日志在slave上持续化存储(中继日志 relay log)
      • 根据relay log执行重放,根据日志进行恢复(sql thread)
      • slave中执行的DML也会记录到自己的binlog

image.png

2、延迟问题

  • 随机读写和顺序读写
    • 随机读写需要进行寻址操作,花费时间长,比顺序读写慢
  • DML写入binlog时为顺序读写,速度快(append)
  • IO thread读取时是顺序读,速度快
  • 写入relay log是顺序写,速度快
  • 重放读relay log是顺序读,速度快
  • 按照relay log执行sql写操作是随机写速度慢,可能会形成relay log里数据堆积
    • 找数据,如果不在同一个磁盘块要寻址
  • 解决方法:MTS