Docker MySQL migration image
This image will automatically play a sequence of SQL scripts against an existing MySQL database. It's useful as part of a compose file to keep the schema up to date without having to delete the MySQL volume to update the schema.
Run the image setting the following environment variables:
Ensure your database container is running and link it to the container (
Finally, map your directory containing migrations to
/docker-entrypoint-migrations.d. Each migration should be an
sql.gzfile and must start with
docker run --link=database \ -e MYSQL_HOST=database \ -e MYSQL_USER=user \ -e MYSQL_PASSWORD=password \ -e MYSQL_DATABASE=db \ -v $(pwd)/migrations:/docker-entrypoint-migrations.d/ \ mathewhall/mysql_migration
database: image: mysql expose: - 3306 volumes: - ./schema:/docker-entrypoint-initdb.d - /var/lib/mysql environment: MYSQL_DATABASE: database MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: root_password migration: image: mathewhall/mysql_migration volumes: - ./migrations:/docker-entrypoint-migrations.d links: - database environment: MYSQL_HOST: database MYSQL_DATABASE: database MYSQL_USER: user MYSQL_PASSWORD: password
Each time your containers are started via compose, the migrations will run. You can avoid repeating the environment variables using the
env_file directive in your compose file to define the MySQL credentials in one place instead of two.