mysqldump schema only, actualización de esquema sin soltar

Estoy buscando utilizar el gancho de precompilation de git para exportar un esquema de database MySQL antes de realizar cambios para que otros desarrolladores puedan actualizar sus propias bases de datos con un script SQL del repository git.

Por defecto, un mysqldump (estoy usando –no-data) eliminará las tablas existentes antes de rebuildlas, que no es lo que estoy buscando. Me pregunto si alguien sabe de una manera de hacer un mysqldump o similar para describir los esquemas db con SQL para actualizar las tablas si existen en lugar de una caída y una reconstrucción. Me doy count de que esto podría ser una posibilidad remota, pero si alguien pudiera orientarme en la dirección correcta sería genial.

¿Cómo sabría MySQL qué actualizar? No puede saber en qué estado estará la database de otra persona, por lo que no puede saber qué actualizaciones aplicar. Además, las actualizaciones con frecuencia requieren más que simplemente cambiar el esquema; pueden requerir cambios en los datos que ya existen, o pueden necesitar que los datos se trasladen del esquema anterior al nuevo. Nunca obtendrás algo que automáticamente detecte todo eso.

La solución correcta es escribir migraciones. Cada vez que cambia la database, en lugar de simplemente cambiar el esquema de su copy de desarrollo usted mismo, escribe una secuencia de commands para actualizar desde el esquema anterior al nuevo (y generalmente un script para degradar de nuevo al esquema anterior, para que pueda hacer eso si necesitas revertir una actualización). Esa secuencia de commands hace todo lo que necesita para cambiar el esquema, mover los datos, y similares.

La mayoría de los frameworks web modernos, como Ruby on Rails , tienen soporte para migraciones para facilitar el seguimiento de las migraciones que ya ha ejecutado. Si no está utilizando un marco que admita migraciones, no sería demasiado difícil escribir sus propios scripts para aplicar migraciones. Simplemente numere cada migration, o ponga una date en ella, y mantenga una tabla en su database que almacene solo la versión actual del esquema en el que se encuentra. Cuando ejecuta su script migrate, si hay migraciones más nuevas que esa versión actual, aplique esos scripts en order y luego actualice el número en la database que indica en qué versión está.