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
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:
log