无需停机即可将数据类型从 mediumint 更改为 int

use*_*ksa 3 mysql replication datatypes alter-table

我当前的表MEDIUMINT用于 ID 列“主键自动增量”。当前表记录很快就会达到最大值,mediumint即8388607。既然如此,我需要将类型int更改为或更改为unsigned不停机。

我的设置是 Amazon RDS 上的主从 MySQL 5.6。我有一个主人和四个奴隶。

  • 我试图在从属服务器上将列类型更改为 int ,但它破坏了复制。
  • 记录正在更改,因此无法将表复制到另一个表。
  • 我无法pt-table-sync在 Amazon RDS 上使用同步另一个表,然后在新表上进行更改。

有什么办法可以int不用锁表就改成?

更新:我不确定该属性是签名还是未签名。我无法找到它签署与否的地方。我运行show columns from table,结果如下:

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
|     id         | mediumint(8) | NO   | PRI | NULL    | auto_increment |
Run Code Online (Sandbox Code Playgroud)

jyn*_*nus 6

虽然 Rolando 有我的投票权,因为他在你的情况下是对的,我想回答你关于 percona 工具包的原始问题(为你将来和其他人):

pt-table-sync不是你想要的。想想pt-online-schema-change。虽然有一些硬角,但它可以在 RDS 上使用正确的配置或对脚本进行最小的更改。pt-table-sync还将在下一个版本中修复 rds 的问题。在线模式更改还有其他替代方案,如 Oak-toolkit 和 Facebook 的。

作为替代方案,您需要一个备用从站,它可以在ALTER运行期间遭受延迟,然后进行受控切换。