mysql&tdsql&pg的复制方式
MYSQL的复制方式:
异步:主库提交后就立即返回结果
同步:主库执行完,所有从库都回放改事务后,才返回
半同步:主库执行完,等待至少一个从库接受并写到relaylog中,才返回,超时后退化为异步
半同步复制的“半”体现在,虽然主从库的Binlog是同步的,但主库不会等待从库执行完Relay-log后才返回,而是确认从库接收到Binlog,达到主从Binlog同步的目的后就返回了,所以从库的数据对于主库来说还是有延时的,这个延时就是从库执行Relay-log的时间。所以只能称为半同步。
TDSQL的复制方式:
异步:同上
强同步:
在原生异步复制的基础上做了性能改良,接近异步复制,其中一台备机落盘成功,主才返回成功。如果Master等待Slave ACK出现超时,则返回给客户端失败
要求至少两个备
sqlasyntimeout=30
强同步下Master等待Slave ACK最大时间;如果超时之后会报超时的错误并断开连接
tdsql_allow_async=OFF
如果Master没有收到Slave ACK,则允许降级为异步复制。
sqlasync_after_sync=OFF
如果为ON,则Master的用户线程在收到Slave ACK后进行engine commit,即AFTER_SYNC模式。如果为OFF,则AFTER_COMMIT模式。
PG的复制方式:
单机状态:
synchronous_commit=on / local
提交事务等待wal写入本地wal日志文件后,才返回
主从状态:
synchronous_commit=off
类似mysql的异步,不等待wal写入本地wal日志文件后,才返回
synchronous_commit=local
同单机状态
synchronous_commit=remote_write
等待备库接收到wal,并写入备节点的OS cache中,才返回
synchronous_commit=on
等待备库接收到wal,并写入备节点的wal文件,才返回——也就是本地和备库的wal都落盘了,但此时备库可能还没有完成apply
synchronous_commit=remote_apply
等待备库完成了apply,才返回
本文来自博客园,作者:{dyy},转载请注明原文链接:{https://www.cnblogs.com/ddlearning/}