”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 将本地 MySQL 数据库迁移到 AWS RDS

将本地 MySQL 数据库迁移到 AWS RDS

发布于2024-11-04
浏览:265

在这篇文章中,我将分享使用 MySQL 将本地 MySQL 数据库中的数据迁移到 AWS RDS 上新创建的实例的详细步骤。

背景

我在 2023 年参与了一个全栈项目,手动处理数据库和后端到 AWS 的生产部署。今年早些时候,我关闭了所有基础设施,因为我每月在数据库上积累了太多成本(不感谢我的过度配置)。

现在,快进到本月,我仍然有大量 AWS 积分(作为社区构建者的福利)将于今年年底到期。我试图恢复我的项目,却发现它并不像我想象的那么容易。

首先,我没有正确创建可用于恢复生产数据的快照,并且不断出现访问错误。我还想起了整个部署过程是多么令人痛苦的手动操作,以及我如何没有记录我所采取的任何步骤(我也不记得它们)。

这是一个教训,所以这一次,我记录了整个过程。正如我从未完成的 Udemy 课程中的一句话:

“在继续自动化之前,您必须知道如何手动执行任务”。

因此,我将首先分享我手动执行迁移的步骤,在接下来的文章中,我将编写脚本来使用 Terraform 提供基础设施,并在成功后将本地数据转储到远程数据库中发射。

这也是我自己分配的正在进行的项目的一部分,旨在通过构建管道来自动化项目的整个部署来了解有关 CI/CD 的更多信息。

A) 手动步骤

1. 在 Amazon RDS 上创建新的数据库实例

这一次的配置更加用心和实用。尽管这是一个“生产部署”,但我仍然选择了可能是最便宜的运行成本,因为它不是实际的实时产品(这也影响了我选择不添加的一些安全选项)。

我总结了我在“创建数据库”向导中选择的选项如下:

AWS Region: eu-west-2
Database creation method: Standard Create
Engine type/edition/version: MySQL/MySQL Community/MySQL 8.0.35
Use case template: Free Tier
Credential settings: define these as you'd prefer
DB instance class: db.t3.micro
Storage: gp2, 20GB, auto-scaling enabled up to 100GB
Connectivity: 
    - define these for your specific use-case; I chose not to use an EC2
    - Public access: Yes, because I wanted to connect to the database locally via MySQL Workbench
Database authentication: Password auth
Additional configuration:
    - I created one database from here; but you can also leave it blank and create one when you get access via Workbench
Others: 
    - use default options or modify for your use-case
Deletion protection:
    - enabled (to dissuade myself from deleting easily like the last time)

预计每月费用:

Migrate Your Local MySQL Database to AWS RDS

2.本地连接RDS实例

实例启动成功后,使用mysql客户端连接实例。这假设您已安装并运行 MySQL 服务器。

MySQL 入门
MySQL 客户端

您还需要实例端点以及您在凭据设置中定义的用户名和密码来运行此命令:

mysql -h sample_endpoint.rds.amazonaws.com -u username_sample -p

注意: 您的实例将使用所选 VPC 安全组的正确入站和出站规则创建。

但是,如果您在连接时遇到错误,请确认您的 IP 地址是否包含在入站规则的允许来源中。当我在特定位置使用其 IP 地址创建实例时,遇到了类似的问题,当我尝试在另一个位置连接不同的 IP 地址时,连接超时。

[可选] 创建数据库
如果您在创建实例时跳过了附加配置步骤,您可以在此步骤创建一个:

CREATE DATABASE sample_db;

3.从本地数据库导入数据

为此,您首先需要使用 mysqldump 命令将本地数据库中的架构和数据导出到 .sql 转储文件:

mysqldump -u root -p local_db_name > sample_dump.sql

注意:如果您在尝试导出时遇到错误,请查看我在 Stack Overflow 上的问题以及可以解决一些可能问题的答案。

然后,使用mysql命令将转储文件导入到您的RDS实例中:

mysql -h sample_endpoint.rds.amazonaws.com -u username_sample -p 
sample_db 



4. [可选]通过MySQL Workbench连接到您的RDS实例

确认您能够毫无问题地连接到实例,并检查数据库内的架构和数据以确认它们也已正确导入。

无法连接?

  • 确保您已正确配置公共访问设置,或者
  • 使用 EC2 实例安全地连接到数据库并通过实例运行 sql 命令。确保EC2实例也在RDS实例所在的VPC内。

接下来将是:

  • 使用本文中所需的数据库凭据(以及必要的基础设施访问)部署到 App Runner,
  • 使用 Terraform 编写脚本,以及
  • 创建 CI/CD 管道来更新未来的后端和前端更新。
版本声明 本文转载于:https://dev.to/aws-builders/migrate-your-local-mysql-database-to-aws-rds-3609?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 PHP 中为注册用户自定义 URL?
    如何在 PHP 中为注册用户自定义 URL?
    在 PHP 中为注册用户设置自定义 URL对于电子商务平台来说,为每个用户提供唯一的 URL 对于展示他们的产品至关重要单独的产品。通过生成单独的网址(例如 www.seloncart.com/customername),您可以显示客户的特定产品。为此,请按照下列步骤操作:配置服务器路由: 修改服务...
    编程 发布于2024-11-08
  • 我如何用 Python 创建 QR 码生成器
    我如何用 Python 创建 QR 码生成器
    这将是一篇简短的文章,介绍我如何在 Python 中创建一个简单的二维码生成器 对于此步骤,您需要使用 qrcode 库:https://pypi.org/project/qrcode/ 创建项目文件夹后我所做的第一步就是创建一个虚拟环境。 Python 中的虚拟环境只是计算机上另一个独立的工作区,...
    编程 发布于2024-11-08
  • 如何在 PHP 中验证整数数据类型?
    如何在 PHP 中验证整数数据类型?
    验证 PHP 中的整数数据类型在 PHP 中处理数字数据时,确定变量是否表示整数至关重要。为了解决这个问题,通常使用 is_int() 函数。然而,它的行为有时可能是意想不到的,导致混乱。为了纠正这个问题,我们引入了验证整数数据类型的替代方法:FILTER_VALIDATE_INT使用该方法,可以高...
    编程 发布于2024-11-08
  • 为什么 DOMSubtreeModified 在 DOM Level 3 中被弃用以及替代方案是什么?
    为什么 DOMSubtreeModified 在 DOM Level 3 中被弃用以及替代方案是什么?
    在 DOM Level 3 中弃用 DOMSubtreeModified 事件DOMSubtreeModified 事件曾经是跟踪文档子树中更改的基本元素,现在已被在 DOM level 3 中已过时。了解这种弃用背后的基本原理并确定合适的替代方案至关重要。DOM Level 3 规范对 DOMSu...
    编程 发布于2024-11-08
  • 将 PDO 连接设置为 NULL 是否真正关闭连接并释放资源?
    将 PDO 连接设置为 NULL 是否真正关闭连接并释放资源?
    关闭PDO连接在PHP中,有两种流行的数据库连接接口:MySQLi和PDO。虽然两者的用途相似,但它们处理连接关闭的方式不同。MySQLi 需要显式关闭函数调用来释放连接:$this->connection->close();相反,PDO 使用空赋值来终止连接:$this->con...
    编程 发布于2024-11-08
  • 动态数据管理:了解 Vue.js 中的数据属性
    动态数据管理:了解 Vue.js 中的数据属性
    Vue.js 是用于开发现代 Web 应用程序的最流行的 JavaScript 框架之一。它提供了一种创建交互式动态应用程序的有效方法。在本文中,我们将深入研究 Vue.js 中的 data 属性,并探讨它的工作原理、为什么要使用它以及围绕它的最佳实践。 什么是数据属性? 在Vue....
    编程 发布于2024-11-08
  • 如何有效地检查 Python 字符串中是否存在列表元素?
    如何有效地检查 Python 字符串中是否存在列表元素?
    检查 Python 中字符串中列表元素的存在Python 编程中的一个常见任务是验证字符串是否包含给定的元素列表。传统方法采用 for 循环,如下面的代码所示:extensionsToCheck = ['.pdf', '.doc', '.xls'] for extension in extensio...
    编程 发布于2024-11-08
  • \'window.JSON\' 如何在现代浏览器中提供本机 JSON 支持?
    \'window.JSON\' 如何在现代浏览器中提供本机 JSON 支持?
    浏览器原生 JSON 支持:window.JSON 对象window.JSON 对象为现代 Web 浏览器提供原生 JSON 解析和序列化功能,实现结构化数据的高效、安全处理。本文探讨了该对象的详细信息,包括其支持的方法和浏览器兼容性。window.JSON 公开的方法window.JSON 对象公...
    编程 发布于2024-11-08
  • Java 中的接口继承自对象类吗?
    Java 中的接口继承自对象类吗?
    接口和对象类:继承和方法调用在 Java 中,接口提供了一种定义类可以实现的契约的方法。在考虑接口和Object类的关系时,就提出了继承的问题。接口是否继承自Object类?答案是否。接口不继承自Object 类。与类不同,所有接口都不会隐式继承任何公共根接口。接口实例上的方法调用尽管不是从 Obj...
    编程 发布于2024-11-08
  • Python:有趣的代码模式
    Python:有趣的代码模式
    我主要使用 Python 工作,几乎每天都会检查代码。在我们的代码库中,格式化和 linting 由 CI 作业使用 black 和 mypy 处理。因此,我们只关注变化。 在团队中工作时,您已经知道某个团队成员会编写什么样的代码。当新人加入团队时,代码审查会变得有趣。我说有趣,是因为每个人都有一些...
    编程 发布于2024-11-08
  • 在 Laravel 中使用 Redis 进行缓存:分步指南
    在 Laravel 中使用 Redis 进行缓存:分步指南
    Introduction Laravel is, without fear of contradiction, the most popular PHP framework, and among the most popular within web development. Re...
    编程 发布于2024-11-08
  • 释放实时 UI 的力量:使用 React.js、gRPC、Envoy 和 Golang 流式传输数据的初学者指南
    释放实时 UI 的力量:使用 React.js、gRPC、Envoy 和 Golang 流式传输数据的初学者指南
    作者:Naveen M 背景 作为 Kubernetes 平台团队的一部分,我们面临着提供用户工作负载实时可见性的持续挑战。从监控资源使用情况到跟踪 Kubernetes 集群活动和应用程序状态,每个特定类别都有许多开源解决方案。然而,这些工具往往分散在不同的平台上,导致用户体验支离...
    编程 发布于2024-11-08
  • 构建您自己的操作系统(真的!):初学者 C 编程
    构建您自己的操作系统(真的!):初学者 C 编程
    建立自己的操作系统:安装 C 编译器和工具,如 MinGW-w64。使用汇编语言编写引导加载程序,加载内核。用 C 语言创建内核,包括命令解释器。使用 Makefile 将引导加载程序和内核组合为“os.img”文件。在 VirtualBox 等虚拟机或硬件上运行“os.img”文件。创建自己的操作...
    编程 发布于2024-11-08
  • 如何在 C++ 中复制 Python 的startswith() 和子字符串到整数功能?
    如何在 C++ 中复制 Python 的startswith() 和子字符串到整数功能?
    在 C 中检查前缀字符串是否存在并将子字符串转换为整数 用户寻求有关实现 Python 字符串前缀检查和子字符串转换的指导在 C .具体来说,他们的目标是实现Python的startswith()方法以及子字符串转换为整数的功能。检查前缀字符串是否存在检查C字符串是否开始使用特定前缀,利用搜索位置为...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3