none
sqlserver高可用自动切换是否会丢失数据? RRS feed

  • 问题


  • 1、oracle的dataguard有一种设置,主库写入数据时,必须确保另外一台从库也进行了事物提交,那么此时才会返回给客户端结果,

         如果主从之间网络断开,则主库也不能写入数据了

    2、mysql5.7开始,也有以上类似方案,mysql5.6的半同步复制,当主从网络断开后,主库依然可以继续写入

    3、sqlserver的镜像 alwayson的高安全模式其实与mysql5.6的半同步类似,即:网络断开后,写库依然可以工作

    所以:

          sqlserver高可用自动切换时是否会丢失数据?比如,当主库网络断开后,SQLSERVER如何知道从库的数据与写库的数据是一模一样的?

         

    2017年7月28日 8:59

答案

  • Hi wanyongwy,

     

    一般来说Always-on节点自动切换的时候是不会丢失数据的,具体的'SQLSERVER如何知道从库的数据与写库的数据是一模一样的'官方文档上提到了: https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/failover-and-failover-modes-always-on-availability-groups

     

    简单的来说,当主节点出现问题是,会立即与客户端断开,然后在辅助节点恢复队列里未来得及重做的日志文件重做完成,然后辅助节点变成主节点,在新的主节点上回滚未提交事物,然后连接客户端。等到原来的主节点恢复的时候,再和新的主节点同步然后成为新的辅助节点上线。

     

    Best Regards,

    Teige

     


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年7月29日 2:46
    版主
  • 能自动切换意味着是高可用模式

    在高可用械,数据是要确保写入辅助副本(从服务器)才会提交结果并反馈给客户端的

    至于从库断开后主库仍然能够写,在这个时候,自动切换已经失效了,在重新完成同步前,自动切换是不会生效的,从库也不会变成主库,除非你手工使用允许丢失数据的模式切换到从库

    所以自动切换始终保证了不会丢失数据

    而且从库断开主库仍然可写,这其实应该算保持高可用

    • 已标记为答案 wanyongwy 2017年8月2日 0:43
    2017年7月31日 1:00
  • It depends on how many live nodes the alwayson group has, including witness. 
    • 已标记为答案 wanyongwy 2017年8月2日 0:44
    2017年7月31日 2:45

全部回复

  • Hi wanyongwy,

     

    一般来说Always-on节点自动切换的时候是不会丢失数据的,具体的'SQLSERVER如何知道从库的数据与写库的数据是一模一样的'官方文档上提到了: https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/failover-and-failover-modes-always-on-availability-groups

     

    简单的来说,当主节点出现问题是,会立即与客户端断开,然后在辅助节点恢复队列里未来得及重做的日志文件重做完成,然后辅助节点变成主节点,在新的主节点上回滚未提交事物,然后连接客户端。等到原来的主节点恢复的时候,再和新的主节点同步然后成为新的辅助节点上线。

     

    Best Regards,

    Teige

     


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年7月29日 2:46
    版主
  • 能自动切换意味着是高可用模式

    在高可用械,数据是要确保写入辅助副本(从服务器)才会提交结果并反馈给客户端的

    至于从库断开后主库仍然能够写,在这个时候,自动切换已经失效了,在重新完成同步前,自动切换是不会生效的,从库也不会变成主库,除非你手工使用允许丢失数据的模式切换到从库

    所以自动切换始终保证了不会丢失数据

    而且从库断开主库仍然可写,这其实应该算保持高可用

    • 已标记为答案 wanyongwy 2017年8月2日 0:43
    2017年7月31日 1:00
  • 邹建老师的 “而且从库断开主库仍然可写,这其实应该算保持高可用“,

    其实我觉得应该有两种设置让用户选择:

    1、网络断开后,主从的写节点依然可以写入数据,比如:这个时候更在乎可用性而不是数据安全性

    2、网络断开后,主从的写节点不能写入数据,因为此时的场景可能是数据安全性更重要,因为此时只有写节点一个节点拥有新的数据,万一写节点的磁盘马上又挂了,

         岂不是就很危险了

    2017年7月31日 1:10
  • It depends on how many live nodes the alwayson group has, including witness. 
    • 已标记为答案 wanyongwy 2017年8月2日 0:44
    2017年7月31日 2:45