Aways on故障系列之三:所有从数据库均无法同步

服务器用的阿里云服务器,自己做的非域Aways On主从同步。

故障描述:所有从数据库无法同步主数据库的数据,查看Aways On的服务器状态,所有服务器已离线。

故障排查:

    1.查看同步状态,延时非常高。

SELECT  availability_mode_desc ,
        role_desc ,
        replica_server_name ,
        last_redone_time ,
        GETDATE() now ,
        DATEDIFF(ms, last_redone_time, GETDATE()) diffMS
FROM    ( ( sys.availability_groups AS ag
            JOIN sys.availability_replicas AS ar ON ag.group_id = ar.group_id
          )
          JOIN sys.dm_hadr_availability_replica_states AS ar_state ON ar.replica_id = ar_state.replica_id
        )
        JOIN sys.dm_hadr_database_replica_states dr_state ON ag.group_id = dr_state.group_id
                                                             AND dr_state.replica_id = ar_state.replica_id;

    2.检查同步面板,所有服务器离线。

    3.检查数据库日志,发现问题:大致意思为证书过期。

Database Mirroring login attempt failed with error: 'Connection handshake failed. The certificate used by this endpoint was not found: Certificate expired. Use DBCC CHECKDB in master database to verify the metadata integrity of the endpoints. State 85

    4.检查群集状态,正常。

    5.百度后发现是由于服务器aways on证书过期导致的。昨天对服务器进行了续费操作,因而推断去年的今天做了数据库非域Aways on,没有注意到证书的有效时间,而证书默认有效时间为1年,与证书过期相吻合。

故障原因:非域Aways on同步对应的数据库证书过期。

故障解决:

    1.在各服务器查询所有的证书,找到所有的过期证书。

select * from master.sys.certificates

    2.删除所有的过期证书。

DROP CERTIFICATE 证书名称

    如果证书名称中包含有特殊字符,例如-,需要采用下面的方法进行删除。

declare @CompName varchar(255),@dySql varchar(1000)
set @CompName='证书部分名称'
set @dySql=CONCAT('drop CERTIFICATE ', QUOTENAME(@CompName + '-特殊字符后'))
exec (@dySql);

    3.如果是删除当前服务器的证书,则会报错,删除失败,需要先删除端点,再删除证书。

    查看端点

select * from master.sys.database_mirroring_endpoints

    删除端点

DROP ENDPOINT Endpoint_Mirroring

    4.参考Aways on的搭建,重新生成证书并导入到对应的服务器中。

    5.参考Aways on的搭建,重新加入从数据库到Aways on中。

    6.讲过上述步骤后,主从同步正常。

 

posted @ 2018-10-26 12:29  MyFirstHome  阅读(613)  评论(0编辑  收藏  举报