Я смотрел MysQL Diffing несколько раз. К сожалению, хороших решений не существует.
Одним из инструментов, которые я пробовал, был mysqldiff (www.mysqldiff.org). mysqldiff - это инструмент, написанный на PHP, который способен анализировать схемы mysql. К сожалению, большую часть времени это не помогает.
MySQL Workbench, собственная SQL IDE в MySQL предоставляет возможность создания сценария изменения, и я думаю, что он делает это, выполняя некую внутреннюю операцию diff.
Aqua Data Studio - еще один инструмент, способный сравнивать схемы и выводить их разность. Хотя ADS diff довольно хорош, он не предоставляет инструмента для создания сценария изменения.
Если бы я писал свои собственные, я бы написал код, способный сравнивать структуру двух таблиц. Такой код можно настроить так, чтобы он был высокочувствительным (например, если порядок столбцов отличается от версии к следующей, это различие) или более умеренно чувствительным (например, порядок столбцов не имеет большого значения, типы данных и длины важны, так же как индексы и ограничения).
Хранение, я не уверен. Я хотел бы посмотреть, как система контроля версий, такая как Mercurial, хранит свою разностную информацию для ревизий, и использовать ее для разработки метода, подходящего для БД.
Наконец, для визуального вывода я рекомендую вам взглянуть на функцию сравнения Aqua Data Stduio (вы можете использовать пробную версию, чтобы проверить это ...). У него довольно хороший вывод различий.