这次我们来介绍下如何备份和恢复MySQL。当我们在生产环境中备份和恢复MySQL,我们需要思考下面的问题:
我们需要备份哪些K8S对象?
我如何备份我的持久卷(PVs)?
我的备份文件存储在哪里?
我的备份需要保持多久的可用性?
我能否恢复我的备份到另外一个K8S集群?
谁有访问这些备份的权限?
谁有权限实施备份?
我们能否按照预定的时间计划自动进行备份?
备份需要多长时间?
我的备份是安全的吗?
下面的介绍会逐一回答上面的问题,以及介绍如何在K8S生产环境备份和恢复MySQL。
在K8S上备份MySQL的必要步骤
在我们制定备份和恢复计划的时候,很重要的一点是不是所有的数据都需要同等级别的保护。在生产环境中,我们需要满足我们的商业需求和客户需要的最合适的保护级别。下面我们来了解一下在生产环境中创建备份和恢复的一些必要的步骤。
1. 了解谁负责来创建备份
2. 所需RPO(恢复点目标)的级别
3. 确保清晰的知道备份到哪个位置
4. 备份的时间计划以及备份的留存时间计划
5. 确保与应用关联的数据也被正确备份了,从而确保应用的一致性
MySQL的前置规则
在备份MySQL的时候,推荐方式是把一些特定数据flush到磁盘里,这样可以确保备份的一致性。如数据库表和日志,就应该被flush。对MySQL而言,另外很重要的一点是锁定数据库表,这样在备份期间,没有新的I/O请求来增加数据库记录,否则MySQL就无法保持一致性。
为了达到这样的目标,我们可以在前置规则中部署FLUSH TABLES WITH READ LOCK命令,它会进行下面的操作:
(FLUSH TABLES WITHREAD LOCK)- 关闭所有打开的数据库表,通过全局化的读锁定,来锁定所有数据库的所有表。对于文件系统是可以及时进行快照的Veritas或者ZFS来说,这是一个非常便捷的备份方式。
为MySQL创建一个备份
现在我们已经完成了配置,我们也已经为应用创建了规则。我们可以开始备份我们的MySQL了。我们需要进入应用所在集群的备份界面,选择我们的应用正在运行所在的命名空间。
在命名空间内,我们可以选择MySQL相关的标签,可以仅备份具备标签的特定的对象。或者在命名空间备份界面中,通过点击右上角的Backup按钮备份整个命名空间。
如果你需要备份特定的对象,在跳出的菜单栏中,输入下面的信息,
名称
备份位置
选择现在备份,还是有一个备份的时间计划
提供前置和后置规则
可选的备份标签
信息输入完成后,点击创建,
一旦创建完成,备份会进入Pending状态,然后进入In Progress状态。这时的备份图标是下面的样子。
如果需要了解备份过程的进展,可以选择菜单栏里面的Show Details按钮,这会允许你查看当前的状态,以及与备份有关的元数据。所有的进展和错误信息都会在这个界面显示出来。
我们之前创建的前置和后置规则的一些状态信息也会显示出来。当这些规则在执行的时候,会显示为进行中。如果有任何的错误,也会在这个界面显示出来。
当规则执行完成,它会继续备份卷,信息细节也会变化,下面是一些信息的例子:
一旦备份成功完成,图标就会显示成下面的样子。
如果中间有任何错误,图标就会变成下面的红色的样子,在Show Details栏位,会显示错误的信息。
从备份中恢复MySQL
开始恢复,选择菜单栏里的Backups,找到你需要恢复的备份,选择菜单栏里的Restore。
在下面的界面中,你可以提供恢复的名称,恢复到的目标集群,以及其它一些选项,包括:
默认恢复
会恢复备份到这个备份原本来自的命名空间。注意是否需要覆盖现有资源这个选项。
定制化恢复
会允许我们提供一个新的命名空间,来恢复备份。注意这个新的命名空间不需要在此之前就已经创建好。
覆盖现有资源
恢复的过程会覆盖现有的对象。实际操作中这些对象会被删除并重新创建。
恢复Jobs
Jobs通常运行一次就会完成。通常不需要反复运行这些Jobs – 特别是当我们把备份恢复到该备份原本来自的同一集群的情况下。但当我们恢复到一个新的集群或者新的命名空间的时候,就需要再次运行Jobs了。
你会在界面中看到状态从Pending变成了Success,你可以选择菜单里的Show Details,来获得备份相关的信息。