Schema Sync a MySQL Schema Versioning and Migration Utility
schemasync [options] <source> <target> # source/target format: mysql://user:pass@host:port/database # output format: <database>[_<tag>].YYYYMMDD.(patch|revert)[_<version>].sql
Schema Sync will generate the SQL necessary to migrate the schema of a source database to a target database (patch script), as well as a the SQL necessary to undo the changes after you apply them (revert script).
- Schema Sync does not alter your database. It only generates the .sql files containing the differences. You must apply the changes.
- All ADD|MODIFY COLUMN statements have the AFTER (or FIRST) SQL syntax even if no move is required.
- COMMENTS and AUTO_INCREMENT values are not by synced by default. See help (-h) for details.
- Schema Sync does not yet recognize Tables or Columns that have been renamed. A rename will result in the old table or column being dropped and the new one added.
- Partitions (MySQL 5.1+) are not yet supported
- Sync the production db with the changes from the development db
schemasync mysql://user:pass@dev-host:3306/dev_db mysql://user:pass@prod-host:3306/production_db
- Bob and Sally were working on independent parts of the application that required schema changes. Migrate these changes to the SAN so they can be tested and later rolled up to the production db.
schemasync --tag="bob" --ouput-dir="/location/of/san/" \ mysql://user:pass@dev-host:3306/dev_db_bob mysql://user:pass@prod-host:3306/production_db
schemasync --tag="sally" --ouput-dir="/location/of/san/" \ mysql://user:pass@dev-host:3306/dev_db_sally mysql://user:pass@prod-host:3306/production_db
-h, --help show this help message and exit -V, --version show version and exit. -r, --revision increment the migration script version number if a file with the same name already exists. -a, --sync-auto-inc sync the AUTO_INCREMENT value for each table. -c, --sync-comments sync the COMMENT field for all tables AND columns --tag=TAG tag the migration scripts as <database>_<tag>. Valid characters include [A-Za-z0-9-_] --output-directory=OUTPUT_DIRECTORY directory to write the migration scrips. The default is current working directory. Must use absolute path if provided. --log-directory=LOG_DIRECTORY set the directory to write the log to. Must use absolute path if provided. Default is output directory. Log filename is schemasync.log
Download & Install
- Python 2.4, 2.5, or 2.6
- MySQL, version 5.0 or higher
- MySQLdb, version 1.2.1p2 or higher
- SchemaObject 0.5.3 or higher (Auto installed with Schema Sync)
To run the test suite, you will need to install the Sakila Database, version 0.8
Download SchemaSync-0.9.2 tar xvzf SchemaSync-0.9.2.tar.gz cd SchemaSync-0.9.2 sudo python setup.py install
To install without root access or install the latest development version, see Installation Instructions.
Mitch Matuson <code at matuson com>
Status & License
Schema Sync is under active development and released under the Apache License, Version 2.0.
You can follow important notices and updates to Schema Sync on the Updates page.
You can obtain a copy of the latest source code from the Git repository, or fork it on Github.
You can report bugs via the Schema Sync Issues page
Comments, questions, and feature requests can be sent to code at matuson com
Thanks to Ronald Bradford for feedback on the design of Schema Sync