Improved alternative to official mongooplog utility.
mongooplog-alt is the Python remake of official mongooplog utility, shipped with MongoDB starting from version 2.2.0. It reads oplog of a remote server, and applies operations to the local server. This can be used to keep independed replica set loosly synced in a sort of one way replication, and may be useful in various backup and migration scenarios.
mongooplog-alt implements basic functionality of the official utility and adds following features:
Using pip (preferred):
pip install --upgrade mongooplog-alt
easy_install -U mongooplog-alt
Options common to original mongooplog:
--from <hostname><:port> Hostname of the mongod server from which oplog operations are going to be pulled. --host <hostname><:port>, -h Hostname of the mongod server to which oplog operations are going to be applied. Default is "localhost" --port <number> Port of the mongod server to which oplog operations are going to be applied, if not specified in ``--host``. Default is 27017. -s SECONDS, --seconds SECONDS seconds to go back. If not set, try read timestamp from --resume-file. If the file not found, assume --seconds=86400 (24 hours)
Options specific to mongooplog-alt:
--to An alias for ``--host``. --follow, -f Wait for new data in oplog. Makes the utility polling oplog forever (until interrupted). New data is going to be applied immideately with at most one second delay. --exclude, -x List of space separated namespaces which should be ignored. Can be in form of ``dname`` or ``dbname.collection``. --ns Process only these namespaces, ignoring all others. Space separated list of strings in form of ``dname`` or ``dbname.collection``. --rename [ns_old=ns_new [ns_old=ns_new ...]] Rename database(s) and/or collection(s). Operations on namespace ``ns_old`` from the source server will be applied to namespace ``ns_new`` on the destination server. --resume-file FILENAME resume from timestamp read from this file and write last processed timestamp back to this file (default is mongooplog.ts). Pass empty string or 'none' to disable this feature.
Consider the following sample usage:
mongooplog-alt --from prod.example.com:28000 --to dev.example.com:28500 -f --exclude logdb data.transactions --seconds 600
This command is going to take operations from the last 10 minutes from prod, and apply them to dev. Database logdb and collection transactions of data database will be omitted. After operations for the last minutes will be applied, command will wait for new changes to come, keep running until Ctrl+C or other termination signal recieved.
Note, that you will need existing writable /data/db dir.
Tests produce alot of output. Succesfull execution ends with line like this:
ReplSetTest stopSet *** Shut down repl set - test worked ****