我们使用 ruby 脚本将数据从 MySQL 迁移到 Redshift(PostgreSQL)。目前我们使用 YAML 配置文件来维护模式信息(列名和类型)。所以每当 MySQL 表发生更改时,我们都需要手动更改 YAML 文件。现在,我们正在考虑将 YAML 配置作为 JSON 对象移动到数据库(PSQL)。但是我们仍然需要手动更改模式配置。我们希望自动化这个过程。(最好使用 Ruby。)
PS:我们使用 bin-log 来增量更新 AWS Redshift 中的数据。
我们使用 ruby 脚本将数据从 MySQL 迁移到 Redshift(PostgreSQL)。目前我们使用 YAML 配置文件来维护模式信息(列名和类型)。所以每当 MySQL 表发生更改时,我们都需要手动更改 YAML 文件。现在,我们正在考虑将 YAML 配置作为 JSON 对象移动到数据库(PSQL)。但是我们仍然需要手动更改模式配置。我们希望自动化这个过程。(最好使用 Ruby。)
PS:我们使用 bin-log 来增量更新 AWS Redshift 中的数据。
有几种可能的解决方案适合您。
第一个是使用 AWS Data Pipeline。这是一项在不同 AWS 计算和存储服务之间移动数据的服务。(https://aws.amazon.com/datapipeline/)
另一种选择是使用数据集成工具,例如 Alooma。它可以近乎实时地将 Amazon RDS 上托管的 MySQL 数据库中的表复制到 AWS Redshift。
它支持您正在使用的 bin-log 复制方法。
请按照以下步骤复制您的数据:
为托管的 MySQL 设置 bin-log:
要复制 MySQL 表,Alooma 需要设置基于行的复制,以便能够读取您的 MySQL 事件。
通过运行以下语句验证您的 binlog 是否已配置 - 返回的值应为 ROW:
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';
验证您的 binlog 行格式是否设置为 FULL:
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_row_image';
验证您的日志从属更新选项是否设置为 ON:
mysql> 显示全局变量,例如“log_slave_updates”;
如果您的 MySQL 当前未设置为基于行的复制,则需要对其进行设置。
在 my.cnf 文件中包含以下行(在 /etc/mysql/ 下)。下面的示例适用于“vanilla” MySQL 5.6 安装:
[mysqld] log-bin=mysql-bin server-id=1 binlog_format = ROW log-slave-updates=true
确保重新启动 MySQL 服务器以获取更改。
创建一个 Alooma 用户,类似于 MySQL 从属用户:
mysql> CREATE USER 'alooma'@'%' IDENTIFIED BY 'YOUR_PASSWORD';
mysql> GRANT REPLICATION SLAVE, SELECT, RELOAD, REPLICATION CLIENT, LOCK TABLES, EXECUTE ON . TO 'alooma'@'%';
mysql> 刷新权限;