面试题答案
一键面试备份策略设计
- 在线备份
- 备份频率:采用基于MySQL二进制日志(binlog)的增量备份,每15分钟进行一次。这是因为电商系统读写频繁,较频繁的增量备份能有效减少数据丢失。
- 时间点选择:考虑到系统7x24小时运行,选择系统负载相对较低的时间点进行备份操作,比如每小时的15分、30分、45分等。这样能尽量降低备份对业务的影响。
- 离线备份
- 备份频率:每天进行一次全量离线备份。由于数据量庞大,全量备份耗费资源较多,每天一次可以平衡备份成本和数据安全性。
- 时间点选择:选择在凌晨2 - 4点进行,这个时间段电商业务量通常最低,对系统性能影响最小。
备份数据的存储方案
- 在线备份数据存储
- 增量备份生成的binlog文件存储在独立的高性能磁盘阵列上,该阵列具备冗余机制(如RAID 10)以保障数据安全。同时,将这些文件定期(例如每周)传输至对象存储(如阿里云OSS)进行长期存档,以防止本地存储故障导致数据丢失。
- 离线备份数据存储
- 每天的全量离线备份数据存储在磁带库中。磁带库具有大容量、低成本、数据保存时间长的特点,适合长期数据存储。同时,为了提高恢复速度,保留最近一周的全量备份数据在本地高性能存储设备(如SSD阵列)上。
不同类型故障下的数据恢复操作
- 数据库服务器硬件故障
- 首先,将备用服务器投入使用,切换业务流量到备用服务器。
- 然后,从本地高性能存储设备中获取最近一次的全量离线备份数据进行恢复。如果故障发生在当天凌晨4点之后,还需要结合当天凌晨4点之前的最新一次在线增量备份数据(binlog)进行恢复,以确保数据的完整性。若本地存储设备中的数据也因硬件故障受损,则从磁带库中获取最近一次全量备份数据,并结合对象存储中的binlog进行恢复。
- 数据库逻辑错误(如误删除表)
- 如果是在当天发生的错误,先从本地获取凌晨2 - 4点的全量备份数据进行恢复,再应用当天凌晨4点之后的所有在线增量备份数据(binlog)直到错误发生前的时间点,以达到最小的数据丢失。
- 如果错误发生时间距离当前时间超过一天,则从磁带库中获取最近一次全量备份数据,结合对象存储中的binlog进行恢复到错误发生前的时间点。
- 存储设备故障(针对在线备份存储设备)
- 由于在线备份数据同时存储在本地高性能磁盘阵列和对象存储中,当本地存储设备发生故障时,可以直接从对象存储中获取最近的增量备份数据(binlog)。然后结合最近一次的全量备份数据(本地或磁带库中获取)进行数据恢复。