我正在尝试从 MySQL 到 redshift 制作一个复制服务器,为此,我正在解析 MySQL 二进制日志。对于初始复制,我将转储 mysql 表,将其转换为 CSV 文件并将其上传到 S3,然后使用 redshift copy 命令。为此,性能是有效的。
在初始复制之后,为了在我读取 binlog 时进行连续同步,插入和更新必须按顺序运行,这非常慢。
有什么可以提高性能的吗?
我能想到的一种可能的解决方案是将语句包装在一个事务中,然后立即发送该事务,以避免多次网络调用。但这并不能解决 redshift 中单个更新和插入语句运行速度很慢的问题。单个更新语句需要 6 秒。知道 redshift 的局限性(它是一个列式数据库,单行插入会很慢)可以做些什么来解决这些局限性?
编辑1:
关于 DMS:我想使用 redshift 作为一个仓储解决方案,它只是不断地复制我们的 MYSQL,我不想对数据进行非规范化,因为我在 mysql 中有 170 多个表。在持续复制期间,DMS 在一天内多次显示许多错误,并在一两天后完全失败,并且很难破译 DMS 错误日志。此外,当我删除和重新加载表时,它会删除 redshift 上的现有表并创建新表,然后开始插入数据,这在我的情况下会导致停机。我想要的是创建一个新表,然后用新表切换旧表并删除旧表
请您参考如下方法:
这是让 DMS 正常工作所需要做的事情
1) 使用“迁移和持续复制”和“在目标上删除表”创建并运行 dms 任务
2)这可能会失败,别担心。 “停止”dms 任务。
3)在 Redshift 上对表进行以下更改
by dms for redshift copy 无法处理 '00:00:00 00:00' 日期
你进入 mysql)
4)在dms上-在“目标表准备模式”中将任务修改为“截断”
5) 重新启动 dms 任务 - 完全重新加载
现在 - 初始副本和正在进行的二进制日志复制应该可以工作。
确保您使用的是最新的复制实例软件版本
确保您完全按照此处的说明进行操作
http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html
如果您的来源是 aurora,还要确保您已将 binlog_checksum 设置为“none”(错误的文档)




