数据库的数据一致

数据库主备一致

数据库的数据一致

  • 都是用binlog来保证数据库主备一致的

流程

  • 备库b通过change master命令,设置主库的ip host,用户名,密码,偏移量等,
  • 备库b执行start slave命令,备库开启两个线程,io-thread和sql-thread,io负责连接
  • 主库a验证用户名,密码之后,去binlog以偏移量为起点开始读,发给b
  • 备库b那个binlog之后,写到本地文件,为relay log(中转日志)
  • 备库的sql-thread开始读relay-log,解析执行

binlog的三个格式区别

  • row:记录每条sql执行影响的数据
  • statement:记录每条执行的sql(备份或者回退都有语义问题和上下文问题)
    mysql> show binlog events in ‘master.000001’;//查看记录
  • mixed:mysql自己区别语义是否用row还是statement,
    可以使用mysqlbinlog工具来查看binlog的内容

循环复制

主备切换流程(双主模式)

数据库的数据一致

  • 两个库有自己独有的server id,和另外一个库不相同
  • 库a同步数据到库b,binlog里面带有a的server id
  • 库b读到server id,判断是否和自己的server id一样,不一样则同步,然后再同步给库a
  • 库a读到server id,和自己一样,不写,循环结束