首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在K8S上备份和恢复MySQL

如何在K8S上备份和恢复MySQL

原创
作者头像
Portworx
修改于 2020-07-27 02:53:19
修改于 2020-07-27 02:53:19
3K00
代码可运行
举报
运行总次数:0
代码可运行

如何在K8S上备份和恢复MySQL

越来越多的生产系统和关键应用运行在K8S上。在生产系统运行有状态应用,并不是一件容易的事情,它需要我们仔细的计划并部署。我们之前有一篇文章专门介绍如何在K8S上运行高可用的MySQL。这次我们来介绍下如何备份和恢复MySQL。当我们在生产环境中备份和恢复MySQL,我们需要思考下面的问题:

  • 我们需要备份哪些K8S对象?
  • 我如何备份我的持久卷(PVs)?
  • 我的备份文件存储在哪里?
  • 我的备份需要保持多久的可用性?
  • 我能否恢复我的备份到另外一个K8S集群?
  • 谁有访问这些备份的权限?
  • 谁有权限实施备份?
  • 我们能否按照预定的时间计划自动进行备份?
  • 备份需要多长时间?
  • 我的备份是安全的吗?

下面的介绍会逐一回答上面的问题,以及介绍如何在K8S生产环境备份和恢复MySQL。

在K8S上备份MySQL的必要步骤

在我们制定备份和恢复计划的时候,很重要的一点是不是所有的数据都需要同等级别的保护。在生产环境中,我们需要满足我们的商业需求和客户需要的最合适的保护级别。下面我们来了解一下在生产环境中创建备份和恢复的一些必要的步骤。

1.   了解谁负责来创建备份

2.   所需RPO(恢复点目标)的级别

3.   确保清晰的知道备份到哪个位置

4.   备份的时间计划以及备份的留存时间计划

5.   确保与应用关联的数据也被正确备份了,从而确保应用的一致性

我们来详细过一遍备份MySQL的关键步骤,包括一些代码样例和截图。

对MySQL进行备份和恢复

在我们备份MySQL之前,我们必须首先正确配置PX-Backup,使它可以访问集群。>本篇文章并没有覆盖如何安装PX-Backup,可以参考以前的系列文章,有一篇专门讲解如何安装PX-Backup。在PX-Backup界面里,选择“Add Cluster

接下来需要提供一个集群名称,以及为集群提供一个Kubeconfig (https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/),以及Portworx的一些信息。注意Kubeconfig控制了对集群进行访问的权限类型,对PX-Backup也是这样。如果我们仅仅对一个命名空间有访问权限,我们就只能为这一个命名空间进行备份和恢复。如果你没有Portworx集群信息,或者并没有为卷来使用Portwrox,这部分可以先留空。

这步完成后,就可以看到集群已经被添加到主界面了,在集群那里就会出现一个绿色的备份图标,点击就可以进入备份界面。

如果你的备份图标不是绿色的,看一下集群里运行的是不是Stork 2.4+的版本(https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/stork/#install)>参考备份界面里面Add Cluster的界面,可以复制下面的命令来为集群增加stork。

(正在运行 Portworx)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
KBVER=$(kubectl version --short | awk -Fv '/Server Version: /{print $3}')

curl -fsL -o stork-spec.yaml "https://install.portworx.com/2.5?kbver=${KBVER}&comp=stork"

kubectl apply -f stork-spec.yaml

(没有运行 Portworx)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -fsL -o stork-spec.yaml "https://install.portworx.com/2.5?comp=stork&storkNonPx=true"

kubectl apply -f stork-spec.yaml

配置你的备份目标位置

在备份MySQL之前,我们必须创建一个备份目标位置,点击Cloud Settings,继续输入备份目标位置的身份信息等。

关于不同的备份目标位置,这里有详细的文档(https://backup.docs.portworx.com/use-px-backup/credentials/)。一般来说,至少需要创建一个云账户(如AWS,Azure,Google),以及创建一个备份位置(如云对象存储的位置)。

当你创建了一个备份位置,你可以选择之前创建的云账户,输入相关的信息。

创建一个备份的时间计划

这步是可选的。

我们需要创建一个备份时间计划,来明确备份的频率(以达到RPO的目标),以及保存多少个备份。(注意:如果需要RPO为零,则需要使用PX-DR)。点击设定菜单的Schedule Policies,会出现一个界面来帮助你配置备份的时间计划。

点击浏览栏的Add按钮,

在这个界面,创建你需要的备份时间计划。你可以选择定期、每天、每周、或者每月,然后选择需要保存多少个备份。在后续对MySQL进行备份的过程中,就可以选择这个备份时间计划。

创建应用一致的MySQL备份的前置和后置规则

当系统验证发现数据已经准备好可以备份了,就可以开始备份了。这就是我们说的应用感知。为了保持应用的一致性,我们希望在备份前和备份后进行一定的控制。通过PX-Backup,我们可以配置前置和后置规则(https://backup.docs.portworx.com/use-px-backup/rules/),这些规则会通过在一个或多个Pods里运行命令来达到我们的目标。首先,我们需要理解MySQL是如何存储状态的。这会对我们的备份方式和规则有很大的帮助。MySQL服务器管理的信息,都保存在data directory里,(https://dev.mysql.com/doc/refman/8.0/en/data-directory.html)

这个data directory位于MySQL服务器的文件系统的/var/lib/mysql 目录里。在这个目录里存储的文件和数据对于MySQL维持数据一致性非常重要。因此,我们mount K8S持久卷声明(PVCs),到MySQL镜像的data directory也非常重要。在K8S里,volumeMount的配置文件差不多是下面的样子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-data

在data directory内,MySQL存储与系统、性能和客户数据有关的:数据结构,表,日志文件、配置、以及数据库数据。Mount持久卷,使得PX-Backup可以在需要的时候对MySQL的数据进行快照和备份。

MySQL有一个叫做mysqldump的工具,可以专门用来对MySQL做备份。由于PX-Backup可以为多种数据类型提供数据备份和恢复的抽象,我们可以复制mysqldump的最佳工作方式(https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_add-locks)。例如flush和锁定日志和数据库表,并保存到PX-Backup的前置和后置规则里。PX-Backup的规则和备份可以跨多个MySQL实例和跨云来使用,这对于DevOps团队管理云环境和多云环境很有帮助。

MySQL的前置规则

在备份MySQL的时候,推荐方式是把一些特定数据flush到磁盘里,这样可以确保备份的一致性。如数据库表和日志,就应该被flush。对MySQL而言,另外很重要的一点是锁定数据库表,这样在备份期间,没有新的I/O请求来增加数据库记录,否则MySQL就无法保持一致性。

为了达到这样的目标,我们可以在前置规则中部署FLUSH TABLES WITH READ LOCK命令,它会进行下面的操作:

(FLUSH TABLES WITHREAD LOCK)- 关闭所有打开的数据库表,通过全局化的读锁定,来锁定所有数据库的所有表。对于文件系统是可以及时进行快照的Veritas或者ZFS来说,这是一个非常便捷的备份方式。

可以使用UNLOCK TABLES来解除锁定。

由于PX-Backup对K8S里的持久卷做快照,这会帮助我们完成我们的目标。

在PX-Backup的界面里,创建规则。

> 注意:我们设定规则在后台运行,这需要一个WAIT_CMD(https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/create-snapshots/snaps-3d/#step-1-create-rules),来使得规则可以正确的执行和退出。

MySQL的后置规则

由于我们在备份之前,Flush并锁定了MySQL的数据。那么在备份完成后,我们必须从全局化的读锁定中,解除对数据库的锁定。根据MySQL的技术文档,这是因为在FLUSH TABLES WITHREAD LOCK操作后,全局化的锁定并不会自动解锁。FLUSH LOGS(https://dev.mysql.com/doc/refman/8.0/en/flush.html#flush-logs)也是一个好的操作,它关闭并重新打开服务器正在执行写入操作的所有日志文件,并且更新日志的序列数字。如果用户需要在备份前后保持一个清晰的日志的区别,这个操作就很重要。Flushing Logs在我们现在的步骤中并不是必须的,但我们把它加入到后置规则中,以保持操作的完整。

在PX-Backup界面中创建规则。

> 注意: 备份的后置规则不允许在后台运行,所以我们需要WAIT_CMD(https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/create-snapshots/snaps-3d/#step-1-create-rules)

为MySQL创建一个备份

现在我们已经完成了配置,我们也已经为应用创建了规则。我们可以开始备份我们的MySQL了。我们需要进入应用所在集群的备份界面,选择我们的应用正在运行所在的命名空间。

在命名空间内,我们可以选择MySQL相关的标签,可以仅备份具备标签的特定的对象。或者在命名空间备份界面中,通过点击右上角的Backup按钮备份整个命名空间。

如果你需要备份特定的对象,在跳出的菜单栏中,输入下面的信息,

  • 名称
  • 备份位置
  • 选择现在备份,还是有一个备份的时间计划
  • 提供前置和后置规则
  • 可选的备份标签

信息输入完成后,点击创建,

一旦创建完成,备份会进入Pending状态,然后进入In Progress状态。这时的备份图标是下面的样子。

如果需要了解备份过程的进展,可以选择菜单栏里面的Show Details按钮,这会允许你查看当前的状态,以及与备份有关的元数据。所有的进展和错误信息都会在这个界面显示出来。

我们之前创建的前置和后置规则的一些状态信息也会显示出来。当这些规则在执行的时候,会显示为进行中。如果有任何的错误,也会在这个界面显示出来。

当规则执行完成,它会继续备份卷,信息细节也会变化,下面是一些信息的例子:

一旦备份成功完成,图标就会显示成下面的样子。

如果中间有任何错误,图标就会变成下面的红色的样子,在Show Details栏位,会显示错误的信息。

从备份中恢复MySQL

开始恢复,选择菜单栏里的Backups

找到你需要恢复的备份,选择菜单栏里的Restore

在下面的界面中,你可以提供恢复的名称,恢复到的目标集群,以及其它一些选项,包括:

  • 默认恢复

会恢复备份到这个备份原本来自的命名空间。注意是否需要覆盖现有资源这个选项。

  • 定制化恢复

会允许我们提供一个新的命名空间,来恢复备份。注意这个新的命名空间不需要在此之前就已经创建好。

  • 覆盖现有资源

恢复的过程会覆盖现有的对象。实际操作中这些对象会被删除并重新创建。

  • 恢复Jobs

Jobs通常运行一次就会完成。通常不需要反复运行这些Jobs – 特别是当我们把备份恢复到该备份原本来自的同一集群的情况下。但当我们恢复到一个新的集群或者新的命名空间的时候,就需要再次运行Jobs了。

你会在界面中看到状态从Pending变成了Success,你可以选择菜单里的Show Details,来获得备份相关的信息。

结论

对于K8S上的应用来说,备份和恢复是非常重要的。PX-Backup使得备份和恢复的过程变得非常简单。并且有效地保证了数据的一致性。可以访问Portworx网站获取更详细的文档,或者申请试用。(https://portworx.com/products/px-backup/)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
演示视频:在K8S上备份和恢复MySQL
这是关于PX-Backup的一个Demo。在左侧,有PX-Backup和两个集群。我们使用上面那个集群,运行的是1.17.8版本的K8S。在右侧有一个终端,也是访问的那个集群,我们可以看到集群运行的是1.17.8版本的K8S。
Portworx
2020/07/27
8750
如何通过Openshift实现K8S容灾?
越来越多的K8S应用采用RedHat OpenShift进行部署,IT团队需要部署容灾功能,来防范系统崩溃导致业务受损。一部分行业通常有较强的监管要求,在出现大规模错误的时候必须有数据保护。例如HIPAA 监管要求中的CFR 164.308(7)(ii)(B),要求公司必须能够在出现系统错误的时候“恢复所有数据”。这种情况下对于Openshift上的关键应用来说,容灾是必须的。
Portworx
2020/05/30
1.6K0
如何在两个OpenShift集群间迁移有状态应用
Portworx是一个支撑K8S有状态应用的持久存储和数据管理平台。通过Portworx,它为有状态应用提供了一个单一的数据管理层,从而用户可以在任何底层架构上运行类似数据库这样的有状态应用。
Portworx
2020/06/29
1.1K0
如何为K8S生产系统配置安全管理?
PX-Security:针对Kubernetes持久卷的多租户授权、身份验证和RBAC
Portworx
2020/02/04
1.4K0
如何跨不同版本K8S,为有状态工作负载做蓝绿部署
容器的生态正在爆发!不仅仅应用层在快速变化,还有用于管理应用程序的平台:Kubernetes,也在快速变化。这就为Ops团队带来了一个必须要解决的难题。IT团队如何才能保证一款应用程序能够在各种不同版本的Kubernetes上都能良好运行呢?
Portworx
2019/12/02
1.8K0
操作指南:通过Rancher在K8S上运行PostgreSQL数据库
通过Rancher Kubernetes Engine运行高可用 PostgreSQL
Portworx
2020/02/06
3.4K0
K8S数据保护工具比较
K8S数据保护工具比较:Cohesity、 Kasten、 OpenEBS、 Portworx、 Rancher Longhorn、 和Velero
Portworx
2020/04/23
1.5K0
Portworx演示:在K8S集群间迁移有状态的应用和数据
越来越多的企业选择Kubernetes作为基础架构,它能够帮助我们缩短软件项目上市时间、降低基础架构成本、并提高软件质量。由于Kubernetes比较新,因此IT团队都在学习如何在生产环境中,在Kubernetes上对应用程序进行运行和维护。本文将探讨,当在需要额外的计算能力时,将Kubernetes应用程序迁移至另一个新的集群。
Portworx
2019/11/14
2.6K0
K8S备份、恢复、迁移神器 Velero
Kubernetes 集群备份一直是我们的痛点。虽然可以通过Etcd v3备份与恢复来实现K8S集群备份,但是这种备份很难恢复单个 Namespace。
YP小站
2020/07/01
8.4K1
打算用容器跑生产系统?备份怎么做才靠谱?
对于IT系统来说,备份是至关重要的。很多情况下需要用到备份数据。例如系统被发现有Bug后,运维团队需要从某个具体时间点的备份数据来重新恢复之前的应用。或者需要调出3年前的某批数据,来供审计部门调查合规性。对于容器化的应用来说,目前的应用备份操作,以及在多环境中追踪数据的完整性和一致性的操作,都是手动且比较复杂的。有些工具能够启动备份的过程,但是这些工具需要能跟传统的企业级存储系统集成。它们并不能很好的支持Kubernetes的环境,并且不能够提供完整的、端到端的企业级云原生备份解决方案。
Portworx
2020/02/03
1.4K0
Portworx Essentials + Velero:备份Kubernetes应用
Portworx近期发布了免费的Essentials版本。(https://portworx.com/announcing-portworx-essentials/)。Essentias)。
Portworx
2020/05/08
1.3K0
点击鼠标即可完成的K8S企业级备份: PX-Backup & PX-Autopilot
Portworx,容器存储与数据管理专业解决方案提供商,对其行业领先的容器原生存储解决方案Portworx Enterprise进行了更新,使其企业用户能够在Kubernetes上对关键应用程序进行扩展、备份和恢复。PX-Backup和PX-Autopilot均用于实现存储容量管理。Portworx通过PX-Backup进入企业级备份市场,使企业用户能够方便而安全地对其所有的Kubernetes应用备份进行云原生方式的管理。PX-Backup在容器领域内的独特性在于它支持使用单个命令进行单个Pod、多个Pod以及整个Kubernetes NameSpace的备份,即便企业使用的是Microsoft Azure、AWS或谷歌存储。
Portworx
2019/11/26
1.1K0
点击鼠标即可完成的K8S企业级备份: PX-Backup & PX-Autopilot
mysql在windows下每天定时备份数据库几种方法
在windows中备份mysql 数据库的方法有很多种,如有常用的WinRAR备份mysql、mysqldump备份成sql文件、xcopy 直接复制文件形式备份数据库,下面我来总结一下这些方法,并给出相关实例。
用户4988085
2021/07/19
2.8K0
k8s集群备份与迁移
Velero 是一个用Go语言开发的开源工具,用于 Kubernetes 集群的备份、恢复、灾难恢复和迁移。
SRE运维手记
2024/09/13
5250
k8s集群备份与迁移
Kubernetes 集群资源数据的备份、恢复和自动化
“Kubernetes(常简称为 K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。该系统由 Google 设计并捐赠给 Cloud Native Computing Foundation(今属 Linux 基金会)来使用。”这是维基百科上对 Kubernetes 的介绍。
CNCF
2019/12/05
6.3K2
Mysql 备份恢复与xtrabackup备份
  备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。
惨绿少年
2019/05/24
16.4K0
mysql备份与恢复
  MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。
暖月寒星
2020/03/11
2.8K0
MySQL/MariaDB数据库备份与恢复
前言 数据库一般存放着企业最为重要的数据,它关系到企业业务能否正常运转,数据库服务器总会遇到一 些不可抗拒因素,导致数据丢失或损坏,而数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库的其他问题。本文将讲解 MySQL/MariaDB数据库的几种备份方法。 基础知识 备份类型 完全备份:备份整个数据库 部分备份:仅备份其中的一张表或多张表 增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分 差异备份:备份上次备份后变化的数据部分,和增量备份区别在于差异备份只可以相对完全备份做备
小小科
2018/05/02
3.1K0
MySQL/MariaDB数据库备份与恢复
mysql的备份及恢复
我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失、或者丢失后可以快速恢复呢?
用户4877748
2020/07/22
6800
mysql数据备份与恢复
MySQL数据备份与恢复 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。 #2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 #3. 导出表: 将表导入到文本文件中。 一、使用mysqldump实现逻辑备份 #语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql (本地使用可以省略 -h 服务器名) 当用户登陆不需要密码时(密码为空或在配置文件中已
用户1214487
2018/01/24
3.4K0
推荐阅读
相关推荐
演示视频:在K8S上备份和恢复MySQL
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验