0%

MySQL主从复制

MySQL主从复制

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,另外一个或多个其它服务器充当从服务器。

基本原理

MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到日志中的数据。

当一个从服务器连接主服务器时,它通知主服务器从服务器日志上读取最后一次成功更新的位置。从服务器接收那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份并不干扰主服务器,灾备份过程中主服务器可以继续处理更新。

主从复制的数据完整性依赖于主库的binlog,只要主库的binlog不丢失,数据就不会丢失

mysqlbinlog可以访问到主库的binlog

过程

1
2
3
4
5
-- 查看binlog刷新到磁盘的频率,默认是1
-- sync_binlog为1,表示事务提交之前,将binlog刷新到磁盘,这样即使主机突然宕机,也只会损失prepared状态的事务,尽可能的保证了数据安全
-- sync_binlog为0,表示MySQL不控制binlog的刷新,由文件系统自己控制文件缓存的刷新
-- sync_binlog不为0和1时,表示n次binlog提交组之后才会刷新到磁盘
show variables like 'sync_binlog';
  • master将改变记录到bin log中,这些记录过程叫做二进制日志事件,binary log events
  • slave将master的bin log拷贝到它的中继日志(relay log)
  • slave重做中继日志中的事件,将改变应用到自己的数据库中,MySQL的复制是异步且串行化的