将RDS MySQL数据转换为平面文件以在另一个MySQL中重新加载 - 标准CLI无效

cer*_*erd 6 mysql data-migration amazon-web-services amazon-rds

为了建立预先确定,我审查了以下内容:

  • Amazon-RDS数据库到专用服务器
  • AWS RDS的Mysqldump
  • 然而,我没有找到一个明确的解决方案来解决我在这些方面的问题,而且只有辅助因素贯穿始终 - 我想提供一个全面的具体指南,将数据移入AWS RDS中/周围.

    我确实在Percona MySQL性能会议上与一位与RDS合作的DBA顾问进行了讨论,他建议如下,这显然是一个经常出现的问题 - 我希望得到额外的投入,以帮助每个人.

**根据一家大型MySQL咨询公司和谈话中提出的举手数量,这对RDS用户非常重要.**

  • 目标#1.从RDS实例中获取数据 - 您无法在RDS中的主要版本之间移动. - 也许你想把它带到像Percona等的EC2实例.
  • 愿望清单目标#1a.其次,尽可能清理/ QA数据,
  • 目标#3 - 将数据恢复到另一个较小的RDS或其他风味/平台.

事实:

  1. 我在MySQL 5.5.x(<5.5.8)中有一个很大的(主要是utf-8的40-50GB数据集,一些latin-1).1A.无论出于何种原因,旧的管理员将我们的实例大小设置为1000GB的专用存储,只是填充.(?).
  2. 现在所有的表,显然是InnoDB - 几张表约为14GB.那是另一个问题.
  3. 可能存在多重编码:也许是UTF8; Latin-1和Swedish-fkafkakfk?

因此,我正在讨论继续这些选项:

选项A:直接.sql转储; .sql重新加载

  1. 转储,在.sql标准可执行文件中的模式和表等集成,重新加载.
  2. **因此,为了便携性,将latin-1稀释: mysqldump -u username -p --default-character-set=latin1 -N database > backup.sql mysql -u username -p --default-character-set=latin1 database < backup.sql**

问题RE:选项A: - 建议re:上面的代码,用于分块,完整性和以其他方式保证平滑转储和重新加载?或有事项的show information schema可变编码(算法处理latin1的什么不可以?)

选项B:具有Schema + QA/Schema细化的表的单个ascii文件转储

  1. 转储,用直接ASCII(Charset?UTF-8?我必须小心?)将这些数据放入,分开各自的表,也许是用于数据QA的块.

    将继续以下输出TSV DATA和SCHEMA:

    mysqldump --user=dbuser --password --tab=~/output/dir dbname

  2. 其次,通过一些perl/python来清理可能错误的垃圾字符; 编码问题; 来自8年的5个不同的DBA和大约12种不同的数据输入格式/文件类型等.

问题RE:选项B:

  • 我的数据有很多对数据都是真实的垃圾字符; 管道最好的?
  • 我从TSV等加载到AWS RDS中的基本转储中出现了可怕的错误,这些建议超出了他们的数据加载白皮书中发布的建议吗?

Sea*_*anN 0

我强烈建议选项C,即使用ETL工具来移动数据。我已经非常成功地使用了 Pentaho Data Integration 的社区版来完成您所询问的事情(尤其是清理)。这比简单的转储和加载需要更多的工作,但是您有很好的控制能力,并且可以执行诸如稍后再次同步之类的操作。