当前位置:首页 > 问答 > 正文

Linux异构网络环境下MySQL数据库备份那些事儿,怎么搞才靠谱

主要参考了知乎专栏“运维漫谈”、CSDN博客“老李的数据库笔记”以及开源社区的一些实践经验分享)

咱们得搞清楚啥是“异构网络环境”,说白了,就是你负责的MySQL数据库服务器可能不在同一个地方,网络情况很复杂,有的可能在公司的机房,网速快又稳定;有的可能是在阿里云、腾讯云这些云服务商那里;还有的可能为了省钱或者特殊需求,放在某个小机房的物理服务器上,这些服务器之间的网络连接,速度有快有慢,延迟有高有低,甚至有时候还会抽风似的不稳定,在这种背景下做备份,就不能像在自家后院一样随便来了,得讲究点方法。

Linux异构网络环境下MySQL数据库备份那些事儿,怎么搞才靠谱

核心思想就一条:备份这事儿,绝对不能给正在跑业务的数据库带来太大压力,尤其是不能长时间锁表导致业务卡顿甚至停摆,那种直接在业务高峰期用mysqldump去导出一个几百G的大库,这种蛮干的做法是首先被排除的,数据库很可能被拖垮。

怎么搞才靠谱呢?根据大家的经验,主要有以下几招:

Linux异构网络环境下MySQL数据库备份那些事儿,怎么搞才靠谱

第一招,也是最重要的一招,用好MySQL自带的利器——主从复制,这个功能本来是做高可用的,但用来做备份简直是“神器”,你可以在同一网络区域内,或者网络条件比较好的地方,专门搭建一台或多台从库,让主库的数据实时地、异步地同步到这些从库上,这样,你的备份操作就可以完全在从库上进行,爱怎么折腾就怎么折腾,丝毫不会影响主库的业务,这是实现备份与生产分离最有效的方式。(来源:CSDN博客“老李的数据库笔记”中多次强调此方案的基础性作用)

第二招,针对不同的数据量和网络环境,选择不同的物理备份工具,如果数据库体积非常庞大,逻辑备份(比如mysqldump导出的SQL文件)恢复起来会慢得让人绝望,这时候就要考虑物理备份,直接拷贝数据文件。

Linux异构网络环境下MySQL数据库备份那些事儿,怎么搞才靠谱

  • 对于同机房或高速网络:可以用Percona XtraBackup这个工具,它可以在不锁表(或者极短暂的锁表)的情况下,对InnoDB表进行热备,备份出的文件比逻辑备份小,恢复速度也快得多,备份完成后,你可以用scp或者rsync这类工具把备份文件传输到异地。
  • 对于跨云、跨地域的慢速或不稳定网络:直接传输几个G甚至T级别的压缩包会很痛苦,这时候rsync的增量同步能力就派上用场了,你可以先用XtraBackup做一个全量备份,然后定期做增量备份,传输时,rsync只传输发生变化的那部分数据块,能极大地节省带宽和时间,现在很多云厂商也提供了数据库备份服务,它们底层可能也是类似的原理,如果觉得自建麻烦,直接购买服务也是个省心的选择。(来源:知乎专栏“运维漫谈”中详细对比过不同工具在跨网络场景下的优劣)

第三招,别忘了“验证”这个关键环节,备份不是为了放在那里好看的,是为了关键时刻能救命的,定期(比如每季度或每半年)进行一次恢复演练至关重要,随便挑一个备份集,在一个测试环境上把它恢复起来,检查数据是否完整、是否可以正常启动,这个过程能帮你发现备份脚本的问题、存储介质损坏、或者恢复流程中的缺陷,不然真到出事儿那天,发现备份是坏的,那可就叫天天不应了。

第四招,备份文件的管理和监控,不能备份完成了就撒手不管了。

  • 生命周期管理:制定一个策略,比如保留最近3天的每日备份、最近4周的每周备份、最近3个月的每月备份,自动清理过期的备份,节省存储空间,可以用简单的Shell脚本配合crontab实现。
  • 监控报警:备份任务是否成功执行?备份文件是否正常生成?备份文件的大小是否在合理范围内(比如突然变得特别小,可能就意味着备份失败了)?这些都需要有监控,一旦异常立刻发报警通知到负责人,可以用Zabbix、Prometheus等监控系统来实现。
  • 异地存放:遵循“3-2-1”备份原则(至少3个副本,用2种不同介质存储,其中1份放在异地),你的备份文件不能只存在数据库服务器本地,至少要通过网络传输到另一台专门的备份服务器上,重要的备份最好还能同步到对象存储(比如阿里云OSS、AWS S3)这类更安全可靠的地方。

还得提一下网络安全,在异构网络间传输备份数据,尤其是跨公网时,得考虑数据的安全性,使用SSH、VPN或者具有加密能力的传输协议(如rsync over SSH)来保证数据在传输过程中不会被窃听,如果备份内容非常敏感,可能还需要在备份前或存储前对备份文件进行加密。

在Linux异构网络环境下搞MySQL备份,靠谱的做法是:主从复制做基础,物理备份提效率,增量同步省带宽,定期恢复做验证,生命周期加监控,安全传输不能忘,这是一个系统工程,需要根据自己公司的实际网络条件和业务重要性,组合搭配这些方法,形成一套适合自己的、自动化的备份方案。