Mysql 重影/复制表比原始表大很多倍

Mysql 重影/复制表比原始表大很多倍,mysql,amazon-web-services,amazon-rds,schema-migration,Mysql,Amazon Web Services,Amazon Rds,Schema Migration,信息:我使用的是AWS RDS Mysql 5.6.34(500GB)实例(没有副本,只有主副本) 注意:Binlog已启用并设置为行 目标:将列字段_1从enum修改为tinyint 额外信息:我正在使用Rails应用程序。因此,每当我想向枚举添加值时,我都需要编写迁移。因此,将枚举字段转换为tinyint,这样我就可以添加或删除枚举值,而无需使用编写迁移 其他信息:我也尝试过,但RDS实例的内存不足93% 运行gh ost之前的数据库信息: mysql>从information\u sche

信息:我使用的是AWS RDS Mysql 5.6.34(500GB)实例(没有副本,只有主副本)

注意:Binlog已启用并设置为行

目标:将列
字段_1
从enum修改为tinyint

额外信息:我正在使用Rails应用程序。因此,每当我想向枚举添加值时,我都需要编写迁移。因此,将枚举字段转换为tinyint,这样我就可以添加或删除枚举值,而无需使用编写迁移

其他信息:我也尝试过,但RDS实例的内存不足93%

运行gh ost之前的数据库信息:

mysql>从information\u schema中选择table\u schema,sum((数据长度+索引长度)/1024/1024)作为MB,tables按1分组;
+--------------------+-----------------+
|表| MB|
+--------------------+-----------------+
|信息| 0.00976560|
|mysql | 5.96277428|
|性能| 0.00000000|
|我的应用程序数据库223941.79882818|
+--------------------+-----------------+
gh ost之前原始表格的大小:(仅显示需要从列表中修改的表格)

mysql>从information\u schema.TABLES中选择table\u name为`table`,round((数据长度+索引长度)/1024/1024),2)`Size(MB)`来自information\u schema=“my\u app\u db”;
+----------------------------------------+-----------+
|表|大小(MB)|
+----------------------------------------+-----------+
|表| abc | 70.41|
|我的桌子| 86058.73|
开始迁移:

gh-ost\
--user=“user”\
--password=“password”\
--host=“my endpoint.rds.amazonaws.com”\
--database=“我的应用程序数据库”\
--table=“我的桌子”\
--alter=“修改字段\u 1 TINYINT(2)默认值1不为空”\
--假设rbr\
--允许在主机上使用\
--冗长的\
--执行
迁移完成近93%时,RDS可用内存降至20GB。所以我停了下来

停止后的数据库信息:

mysql>从information\u schema中选择table\u schema,sum((数据长度+索引长度)/1024/1024)作为MB,tables按1分组;
+--------------------+-----------------+
|表| MB|
+--------------------+-----------------+
|信息| 0.00976560|
|mysql | 5.96277428|
|性能| 0.00000000|
|我的应用程序数据库| 446299.17968756|
+--------------------+-----------------+
停止后原始表格的大小:

mysql>从information\u schema.TABLES中选择table\u name为`table`,round((数据长度+索引长度)/1024/1024),2)`Size(MB)`来自information\u schema=“my\u app\u db”;
+----------------------------------------+-----------+
|表|大小(MB)|
+----------------------------------------+-----------+
|_my_table_ghc | 0.41|
||我的桌子| 273157.00|
|我的桌子| 85011.62|
问题: 为什么GHOST表比原始表大很多倍

如果需要有关表、索引或数据库的更多信息,我可以提供:)


这是指向gh ost repo中创建的问题的链接:

我从生产数据库的备份中创建了mysql数据库

产品具有
innodb\u文件格式
参数为
Barracuda

新环境的
innodb\u文件格式
参数为
Antelope

生产中表格的
行\u格式
已压缩

不幸的是,
Antelope
db不支持
ROW\u格式
as
COMPRESSED


如果我对信息模式的细节进行更多的研究,我可能会更清楚地解决它

是否检查了两个表中的选项卡定义和记录计数?如果使用
优化表\u name
,会发生什么情况?@O.Jones优化锁定表。我有一张有2.3亿条记录的桌子。所以优化需要很多时间&我不能这么做。@Shadow是的。表定义相同。ghost/copy表中的记录数较少,因为在我取消复制过程之前,只有93%的记录被复制。原始表中的记录计数:229699180复制表中的记录计数:175215000我还检查了单词计数