11

如何将现有 MySQL 数据库导入 Amazon RDS?

4

9 回答 9

12

在 AWS 文档上找到了这个页面,它解释了如何使用 mysqldump 并将其通过管道传输到 RDS 实例中。

这是他们的示例代码(在命令行/shell/ssh 中使用): mysqldump acme | mysql --host=hostname --user=username --password acme

acme您要迁移的数据库在哪里, hostname/username是您的 RDS 实例中的数据库。

您可以像连接常规 mysql 服务器一样连接到 RDS,只需确保按照此论坛发布的内容将您的 EC2 IP 添加到您的安全组。

我必须包含本地 mysqldump 的密码,所以我的命令最终看起来更像这样: mysqldump --password=local_mysql_pass acme | mysql --host=hostname --user=username --password acme

FWIW,我刚刚完成了数据库的迁移。我将此参考用于创建用户和授予权限等mysql 命令。

希望这可以帮助!

于 2012-01-12T23:17:42.503 回答
5

导入数据有两种方式:

  1. mysqldump:如果你的数据小于1GB,你可以直接使用mysqldump命令将你的数据导入RDS。
  2. mysqlimport: 如果您的数据大小超过 1GB 或任何其他格式,您可以将数据压缩成平面文件并使用 sqlimport 命令上传数据。
于 2011-04-06T07:12:30.840 回答
3

我是SqlYog工具的忠实粉丝。它使您可以连接到源数据库和目标数据库并同步模式和/或数据。我也使用过SQLWave,但改用 SqlYog。自从我做出切换以来已经很长时间了,我不记得我到底为什么切换了。无论如何,这是我的两分钱。我知道有些人会反对我对 MySQL 的 Windows GUI 工具的建议。实际上,我非常喜欢 SqlYog 产品,以至于我从 Wine 运行它(对我来说,在 Ubuntu 上的 Wine 可以完美运行)。这个博客可能会有所帮助。

在此处输入图像描述

于 2011-02-03T02:30:24.687 回答
3

GoSquared Engineering 帖子的快速摘要:

配置+引导

  • 选择实例处于最低负载时的维护时段和备份时段
  • 是否选择多可用区(强烈推荐用于自动故障转移和维护)
  • 启动您的 RDS 实例
  • 配置安全组,以便您的应用等可以访问新实例

数据迁移+准备

  1. 如果您还没有启用 binlogging
  2. 在旧实例上运行mysqldump --single-transaction --master-data=2 -C -q dbname -u username -p > backup.sql以转储当前数据
  3. 运行mysql -u username -p -h RDS_endpoint DB_name < backup.sql以将数据导入您的 RDS 实例(这可能需要一段时间,具体取决于您的数据库大小)
  4. 同时,您当前的生产实例仍在服务查询 - 这就是master-data=2binlogging的用武之地
  5. 在您的 backup.sql 文件中,您将在顶部有一行看起来像CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=350789121;
  6. backup.sql以 SQL 文件的形式获取差异mysqlbinlog /var/log/mysql/mysql-bin.000003 --start-position=350789121 --base64-output=NEVER > output.sql
  7. 在您的 RDS 实例上运行这些查询以更新它cat output.sql | mysql -h RDS_endpoint -u username -p DB_name
  8. 通过在最新文件end_log_pos的末尾查找来获取新的日志位置。output.sql
  9. 获取自上次以来的差异output.sql(如步骤 6)并重复步骤 7 + 8。

实际迁移

  1. 准备好使用新 RDS 实例快速部署所有应用程序
  2. 获取最新end_log_pos信息output.sql
  3. 在旧实例上运行FLUSH TABLES WITH READ LOCK;以停止所有写入
  4. 开始使用新的 RDS 实例部署您的应用程序
  5. 从上面运行步骤 6-8 以使用对旧服务器的最后查询更新 RDS 实例

结论

使用此方法,您将有少量时间(取决于部署应用程序所需的时间 + MySQL 实例服务的写入次数 - 可能只有一两分钟),而旧服务器拒绝写入,但是您将有一个一致的迁移,没有读取停机时间。

完整而详细的帖子解释了我们(GoSquared)如何以最少的停机时间(包括错误调试)迁移到 RDS:https ://engineering.gosquared.com/migrating-mysql-to-amazon-rds 。

于 2013-06-13T13:28:24.943 回答
2

我完全同意@SanketDangi。

有两种方法可以做到这一点,一种方法是建议使用mysqldumpor 或mysqlimport

我已经看到在云上恢复数据损坏时会产生问题的情况。

然而,如今在云上导入应用程序变得更加容易。您尝试通过 ravello 将您的数据库服务器上传到公共云。

您可以使用 ravello 在 Amazon 上导入数据库服务器本身。

披露:我为 ravello 工作。

于 2014-10-16T17:37:50.343 回答
1

最简单的例子:

# export local db to sql file:
mysqldump -uroot -p —-databases qwe_db > qwe_db.sql

# Now you can edit qwe_db.sql file and change db name at top if you want

# import sql file to AWS RDS:
mysql --host=proddb.cfrnxxxxxxx.eu-central-1.rds.amazonaws.com --port=3306 --user=someuser -p qwe_db < qwe_db.sql
于 2015-10-27T15:23:39.927 回答
0

适用于 Mysql 的 AWS RDS 客户数据导入指南可在此处获得: http: //aws.amazon.com/articles/2933

  • 创建包含要加载的数据的平面文件
  • 停止访问目标数据库实例的任何应用程序
  • 创建数据库快照
  • 禁用 Amazon RDS 自动备份
  • 使用 mysqlimport 加载数据
  • 再次启用自动备份
于 2013-12-04T10:01:16.353 回答
0

如果您使用的是终端,这对我有用:

mysqldump -u local_username -plocal_password local_db_name | mysql -h myRDS-at-amazon.rds.amazonaws.com -u rds-username -prds_password_xxxxx remote_db_name

然后我使用 MYSQL WorkBench(免费下载)来检查它是否正常工作,因为在按下提交后命令行是静态的,我可能将 -v 放在末尾以查看它的输出

注意:-p后面没有空格

于 2014-03-04T11:18:56.720 回答
0

这是我已经完成并成功的步骤。

获取所需数据库的 MySQLdump。

mysqldump -u 用户名 -p 数据库名 --single-transaction --quick --lock-tables=false >databasename-backup-$(date +%F).sql

(不要忘记将用户名替换为 root - 大多数情况下,以及 databasename -> 您要迁移到 RDS 的数据库的 Db 名称)

出现提示后,输入您的密码。

完成后,从您的 MySQL 服务器登录到 RDS 实例(确保将安全组配置为允许从 Ec2 连接到 RDS)

mysql -h 主机地址 -P 3306 -u rdsusername -p

(不要忘记将 hostaddress 替换为您的 RDS 实例的地址,并将 rdsusernmae 替换为您的 RDS 实例的用户名,当提示输入密码时)

您可以在 – Connectivity & security -> Endpoint & port 下的 RDS Database From AWS Console 下找到该主机地址。

登录后,使用 MySQL 命令创建数据库:

创建数据库数据库名称;\q

在 RDS 中创建数据库后,导入在步骤 1 中创建的 SQL 文件:

mysql -h 主机地址 -u rdsusername -p 数据库名 < 备份文件.sql

这应该将 SQL 文件导入 RDS 并将内容恢复到新数据库中。

参考来自:https ://k9webops.com/blog/migrate-an-existing-database-on-mysql-mariadb-to-an-already-running-rds-instance-on-the-aws/

于 2019-09-04T16:22:21.283 回答