Question: For example, I issued an ALTER TABLE statement to create an index on a MEDIUMTEXT field in an InnoDB table that has 134k rows where the size of the index was 255 bytes and the average size of the data in the field is 30k. This command has been running for the last 15 minutes or so (and is the only thing running on the database). Is there any way for me to determine if it is going to finish in closer to 5 minutes, 5 hours, or 5 days?

Answer: 
This is a pretty common request apparently - requested as far back as 2005 on [bugs.mysql.com](http://bugs.mysql.com). 
It exists in Oracle already, and is listed as useful, but ["it is not a simple thing to do, so don't expect it to be
implemented soon."](http://bugs.mysql.com/bug.php?id=3926). Although that was 2005 :)

That said, the chap who asked the original question later released a [patch](http://jcole.us/blog/archives/2007/02/08/progress-in-mysql-process-list/) for MySQL 5.0, backported to 4.1, which might help you out.
Very old question but at leas mysql 5.7 has a proper answer for this

<https://dev.mysql.com/doc/refman/5.7/en/monitor-alter-table-performance-schema.html>

In essence...

```
UPDATE performance_schema.setup_instruments
       SET ENABLED = 'YES'
       WHERE NAME LIKE 'stage/innodb/alter%';
UPDATE performance_schema.setup_consumers
       SET ENABLED = 'YES'
       WHERE NAME LIKE '%stages%';

```

... run the alter table ...

```
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
       FROM performance_schema.events_stages_current;
+------------------------------------------------------+----------------+----------------+
| EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
+------------------------------------------------------+----------------+----------------+
| stage/innodb/alter table (read PK and internal sort) |            280 |           1245 |
+------------------------------------------------------+----------------+----------------+
1 row in set (0.01 sec)

```