6

我正在尝试制作一个从 MySQL 到 redshift 的复制服务器,为此,我正在解析 MySQL binlog。对于初始复制,我将 mysql 表转储,将其转换为 CSV 文件并将其上传到 S3,然后使用 redshift copy 命令。为此,性能是有效的。

在初始复制之后,为了在我读取 binlog 时进行连续同步,插入和更新必须按顺序运行,这非常慢。

有什么可以提高性能的吗?

我能想到的一种可能的解决方案是将语句包装在事务中,然后一次发送事务,以避免多次网络调用。但这并不能解决 redshift 中单个 update 和 insert 语句运行速度很慢的问题。单个更新语句需要 6 秒。了解 redshift 的局限性(它是一个列式数据库,单行插入会很慢)如何解决这些局限性?


编辑 1:关于 D​​MS:我想使用 redshift 作为仓储解决方案,它只是连续复制我们的 MYSQL,我不想对数据进行非规范化,因为我在 mysql 中有 170 多个表。在持续复制期间,DMS 在一天内多次显示许多错误,并在一两天后完全失败,并且很难破译 DMS 错误日志。此外,当我删除并重新加载表时,它会删除 redshift 上的现有表并创建新表,然后开始插入数据,这在我的情况下会导致停机。我想要的是创建一个新表,然后用新表切换旧表并删除旧表

4

1 回答 1

0

这是使 DMS 正常工作所需要做的事情

1)使用“迁移和持续复制”和“在目标上删除表”创建并运行 dms 任务

2)这可能会失败,不用担心。“停止” dms 任务。

3) 在 redshift 上对表格进行以下更改

  • 将所有日期和时间戳更改为 varchar(因为 dms 用于 redshift 复制的选项无法处理您在 mysql 中获得的 '00:00:00 00:00' 日期)
  • 将所有 bool 更改为 varchar - 由于 dms 中的错误。

4) on dms - 在“目标表准备模式”中修改任务为“Truncate”

5)重启dms任务——完全重载

现在 - 初始副本和正在进行的二进制日志复制应该可以工作。

确保您使用的是最新的复制实例软件版本

确保您完全按照此处的说明进行操作

http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html

如果您的来源是极光,还要确保您已将 binlog_checksum 设置为“none”(错误的文档)

于 2017-11-17T10:21:42.657 回答