将现有数据库迁移到Amazon RDS

时间:2011-01-24 11:30:34

标签: mysql database-migration amazon-rds

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

9 个答案:

答案 0 :(得分:10)

我发现this page on the AWS docs解释了如何使用mysqldump并将其传输到RDS实例中。

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

其中acme是您要迁移的数据库,而hostname / username是来自您的RDS实例的数据库。

您可以连接到RDS,就像它是常规的mysql服务器一样,只需确保按照this forum posting将EC2 IP添加到您的安全组。

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

FWIW,我刚刚完成移动数据库。我使用this reference for mysql commands来创建用户和授予权限。

希望这有帮助!

答案 1 :(得分:6)

导入数据的方法有两种:

  1. mysqldump:如果数据大小小于1GB,则可以直接使用mysqldump命令并将数据导入RDS。
  2. mysqlimport:如果您的数据大小超过1GB或任何其他格式,您可以使用sqlimport命令将数据压缩为平面文件并上传数据。

答案 2 :(得分:4)

我是SqlYog工具的忠实粉丝。它允许您连接到源和目标数据库并同步模式和/或数据。我也使用了SQLWave,但是切换到了SqlYog。我做了开关已经很久了,我记不清切换的原因了。无论如何,那是我的两分钱。我知道有些人会反对我对MySQL的Windows GUI工具的建议。我实际上非常喜欢SqlYog产品,因此我从Wine运行它(在Ubuntu上为Wine完美地工作)。 这个blog可能会有所帮助。

enter image description here

答案 3 :(得分:3)

GoSquared Engineering帖子的快速摘要:

配置+启动

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

数据迁移+准备

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

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

      使用这种方法,您将花费少量时间(取决于部署应用程序所需的时间长度以及您的MySQL实例所服务的写入次数 - 可能只有一两分钟),而旧的写入被拒绝服务器,但您将获得一致的迁移,无需读取停机时间。

      此处提供了完整而详细的文章,说明我们(GoSquared)如何以最短的停机时间(包括错误调试)迁移到RDS:https://engineering.gosquared.com/migrating-mysql-to-amazon-rds

答案 4 :(得分:2)

我完全赞同@SanketDangi。

使用mysqldumpmysqlimport建议的方法有两种方法。

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

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

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

披露:我为ravello工作。

答案 5 :(得分:0)

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

  • 创建包含要加载的数据的平面文件
  • 停止访问目标数据库实例的所有应用程序
  • 创建数据库快照
  • 禁用Amazon RDS自动备份
  • 使用mysqlimport
  • 加载数据
  • 再次启用自动备份

答案 6 :(得分: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

后没有空格

答案 7 :(得分:0)

最简单的例子:

import pandas as pd

result = []

for i in range(1,31):
    result.append(pd.DataFrame((find_peaks(df1['R'], df1['I {}'.format(i)])), index = None))
    df2 = pd.concat(result)

print df2.head()
df2.to_csv('Output.csv')

答案 8 :(得分:0)

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

获取所需数据库的MySQLdump。

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

(大多数时候,不要忘记将用户名替换为root,而databasename->要迁移到RDS的数据库的Db名称)

提示后,输入密码。

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

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

(不要忘记用RDS实例的地址替换主机地址,并用RDS实例的用户名替换rdsusernmae,当系统提示时也输入密码)

您可以在–连接性和安全性->在AWS控制台的RDS数据库下找到该主机地址。

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

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

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

mysql -h主机地址-u rdsusername -p数据库名

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

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