redis mysql 数据安全性
redis 数据丢失
redis集群状态下,参考复制(Replication),主要有两种情况导致丢失数据
-
为了保证性能,主库未开启持久化,主库宕机后短时间内自动重启,从服务器同步主库,导致数据被清空
避免: 关闭主服务器的自动重启 -
由于redis用异步复制,在主库宕机后,由于网络问题,主库最新的数据未同步到从库,从库升级为主库后导致部分数据丢失
避免:保证网络可靠性
mysql 数据丢失
Mysql 在使用异步复制和半同步复制时会有数据丢失的风险,参考详解Mysql 高可用方案 之 Failover mha
mysql 支持的数据同步方式:
-
同步复制
数据更新请求到主库是,主库保证该操作在从库都执行成功。优点:主库宕机后,从库有完整数据;缺点:从库未响应时,主库会阻塞所有请求
-
异步复制
数据更新请求到达主库后,主库操作结束直接返回客户端,不需要从库确认,从库后台从主库更新数据。优点:从库落后了,主库也会处理写入操作;缺点:主库宕机后,未同步给从库,此时切换主库数据可能丢失
-
半同步复制(semi-synchronous):
半同步复制是一种中间策略,当有更新数据请求到 master 节点,需要保证该操作在某个 slave 上也执行成功才最终返回客户端;
如果某个同步的slave变得缓慢,则可以使一个异步 slave 变为同步,这样在保证一定数据一致性的前提下也能保证可靠性(这里可能会导致数据不一致,还可能产生数据延时)。 -
mysql的半同步复制(mysql semi-synchronous):
master在执行完更新操作后立即向 slave 复制数据,slave 接收到数据并写到 relay log (无需执行)后才向 master 返回成功信息,master 必须在接受到 slave 的成功信息后再向客户端返回响应,仅在数据复制发生异常(slave 节点不可用或者数据复制所用网络发生异常)的情况下,master 才会暂停(mysql 默认约 10 秒左右) 对客户端的响应,将复制方式降级为异步复制。当数据复制恢复正常,复制方式将恢复为半同步复制
综上
在redis和Mysql异步复制时,由于网络或其它原因导致主库和从库数据不一致,此时发生主从切换时会导致数据丢失。
网友评论