主从复制
- 指定某一个副本为主节点,当客户写数据库时,必须将写请求首先发送给主节点,主节点首先将新数据写入本地存储。
- 主节点把新数据写入本地存储后,将数据更改作为日志或数据流发送给所有从节点。每个从节点获得更改日志后将其应用到本地,且严格保持与主节点相同的写入顺序。
- 客户端从数据库中读数据时,可以在主节点或从节点上执行查询。
主从复制形式
主从复制有三种形式:主从异步,主从同步,主从半同步。
主从异步
主节点不会主动推送数据到从节点,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。
如果主节点崩溃,此时主节点上已提交的事务可能并没有传到从节点上,如果强行将从提升为主,可能导致新主节点上的数据不完整。
主从异步是 mysql 的默认主从复制方式。
主从同步
当数据写入,主服务器必须和从服务器同步后,才告诉用户写入成功,等待时间较长。
主从半同步
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后,等待至少一个从库接收到并写到 relay log
中,才返回成功信息给客户端(只能保证主库的 Binlog 至少传输到了一个从节点上),否则需要等待直到超时时间然后切换成异步模式再提交。
Mysql
mysql 自带了主从复制功能。MySQL 主从复制基于主服务器的二进制日志,跟踪所有对数据库的更改。因此,要进行复制,主服务器必须启用二进制日志。
当一个从服务器连接到主服务器时,它通知主服务器自己最后一个更新成功的位置。从服务器接收从那时发生起的任何更新,并执行相同的操作。然后等待主服务器通知的更新。
主从服务器都有有单独的线程来处理复制问题,从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
mysql 的日志有两种格式,语句复制和行数据复制。语句复制效率高,行数据复制更加精确,默认采用语句复制的形式。