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,才返回

posted @ 2022-03-16 22:51  y_dou  阅读(249)  评论(0)    收藏  举报