Skip to content

--attempt-instant-ddl leaves behind _gho table when INSTANT DDL succeeds #1773

Description

@NoskyOrg

gh-ost version: 1.1.8 ~ 1.1.11
MySQL version: AWS Aurora MySQL 8.0.42

Description
When --attempt-instant-ddl is enabled and the ALTER can be executed with ALGORITHM=INSTANT, gh-ost succeeds but leaves behind the ghost table _xxx_gho.
This is not caused by an unexpected interruption. The process exits normally with Success! table ... migrated instantly, but the _gho table is not dropped.

Steps to reproduce

Run gh-ost with --attempt-instant-ddl on an ALTER that MySQL can execute instantly:

./gh-ost --user=root --password='xx' --host=xxx.rds.amazonaws.com --port=3306 \
--database=testdb1 --table=xxx \
--alter="ADD COLUMN id4 INT COMMENT 'a'" \
--assume-master-host=xxx:3306 --default-retries=60 \
--cut-over=atomic --ok-to-drop-table --assume-rbr --allow-on-master \
--max-load=Threads_running=300 --critical-load=Threads_running=3000 \
--chunk-size=2000 --max-lag-millis=2000 \
--skip-metadata-lock-check \
--verbose --execute --attempt-instant-ddl --nice-ratio=0

log

2026-09-21 12:06:19 INFO rotate to next log from mysql-bin-changelog.062254:0 to mysql-bin-changelog.062254
2026-09-21 12:06:59 INFO Ghost table created
2026-09-21 12:06:59 INFO Altering ghost table `testdb1`.`_xxx_gho`
[2026/09/21 12:07:06] [info] binlogsyncer.go:868 rotate to (mysql-bin-changelog.062255, 4)
[2026/09/21 12:07:06] [info] binlogsyncer.go:868 rotate to (mysql-bin-changelog.062255, 4)
2026-09-21 12:07:06 INFO rotate to next log from mysql-bin-changelog.062255:134260707 to mysql-bin-changelog.062255
2026-09-21 12:07:06 INFO rotate to next log from mysql-bin-changelog.062255:0 to mysql-bin-changelog.062255
2026-09-21 12:07:21 INFO Ghost table altered
2026-09-21 12:07:21 INFO Intercepted changelog state GhostTableMigrated
2026-09-21 12:07:21 INFO Attempting to execute alter with ALGORITHM=INSTANT
2026-09-21 12:07:21 INFO INSTANT DDL query is: ALTER /* gh-ost */ TABLE `testdb1`.`xxx` ADD COLUMN id4 INT COMMENT 'a', ALGORITHM=INSTANT
2026-09-21 12:07:21 INFO Setting LOCK timeout as 6 seconds
2026-09-21 12:07:43 INFO Writing changelog state: Migrated
[2026/09/21 12:07:43] [info] binlogsyncer.go:225 syncer is closing...
[2026/09/21 12:07:43] [error] binlogstreamer.go:78 close sync with err: sync is being closed...
[2026/09/21 12:07:43] [info] binlogsyncer.go:988 kill last connection id 3564563
[2026/09/21 12:07:43] [info] binlogsyncer.go:255 syncer is closed
2026-09-21 12:07:43 INFO Closed streamer connection. err=<nil>
2026-09-21 12:07:43 INFO Dropping table `testdb1`.`_xxx_ghc`
2026-09-21 12:07:44 INFO Table dropped
2026-09-21 12:07:44 INFO Dropping table `testdb1`.`_xxx_del`
2026-09-21 12:07:44 INFO Table dropped
2026-09-21 12:07:44 INFO Dropping table `testdb1`.`_xxx_ghk`
2026-09-21 12:07:44 INFO Table dropped
2026-09-21 12:07:44 INFO Success! table `testdb1`.`xxx` migrated instantly
2026-09-21 12:07:44 INFO Tearing down inspector
2026-09-21 12:07:44 INFO Tearing down applier
2026-09-21 12:07:44 INFO Tearing down streamer
# Done

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions