Maxwell changelog

v1.35.4: "pity"

  • log4j turns 2.17.0, happy birthday

v1.35.3: "see nothing wrong"

  • log4j vulnerability #2

v1.35.2: "used to be on fire"

  • better logging when we can't connect on startup

v1.35.1: "The holy game of poker"

  • log4j upgrade to upgrade past the giant security hole

v1.35.0: "two for the price of one"

  • couple of parser fixes
  • docker builds are now multi-platform
  • replication_reconnection_retries configuration option
  • quote table names in bootstrapper properly

v1.34.1: "the MC at the end of the world"

  • support for mysql 8's visible/invisible columns
  • support mariadb's if-exists/if-not-exists for partition management
  • add an index for the http endpoint

v1.34.0: "Gil's song"

  • intern a bunch of objects in our in-memory representation of schema. Saves gobs of memory in cases where one has N copies of the same database. Note that this changes the API of Columns, should any embedded Maxwell application be using that.
  • go up to BIGINT for maxwell's auto-increment ids

v1.33.1: "la la la la"

  • properties may now be fetched from a javascript blob in the env
  • RowMap provides access to primary keys
  • fix an odd NPE in mariaDB init

v1.33.0: "tradegy of birds and windows"

  • Add HTTP endpoint for runtime reconfiguration

v1.32.0: "cmon cmon no one can see you cry"

  • Amazon SNS producer added, thanks Rober Wittman
  • kafka 2.7.0 supported
  • stackdriver metrics logging available

v1.31.0: "84 tent cabin"

  • Add producer for NATS streaming server

v1.30.0: "all of this has happened before"

  • support server-sent heartbeating on the binlog connection via --binlog-heartbeat
  • can connect to rabbitmq by URL, supports SSL connections
  • fix parser bug with multiline SQL
  • target JDK 11 -- we have dropped support for JDK 8
  • ability to send a microsecond timestamp via --output_push_timestamp
  • fixes for odd azure mysql connection failures

v1.29.2: "i now know the meaning of shame"

  • fix for terrible performance regression in bootstrapping

v1.29.1: "depluralize"

  • small bugfix release, fixes binlog event type processing in mysql 8

v1.29.0: "i don't know, i don't know, i don't know"

  • High Availability support via jgroups-raft
  • rework --help text

v1.28.2: "fantasy baseball"

  • fix for encryption parsing error on table creation
  • some logging around memory usage in RowMapBuffer

v1.28.1: "bootras bootras gallliiiii"

  • fix http server issue in 1.28.0

v1.28.0: "stardew mania"

  • schema compaction! with the new --max_schemas option, maxwell will periodically roll up the maxwell.schemas table, preventing it from growing infinitely long.
  • fix metricsAgeSloMS calculation
  • support SRID columns
  • fix parsing of complex INDEX(CAST()) statements
  • various dependency bumps

v1.27.1: "red bag? red bag"

  • redis producer gets sentinal support
  • fix a double-reconnect race condition
  • file producer honors javascript row-suppression
  • better error messaging when we lack REPLICATION SLAVE privs
  • miscellaneous dependency bumps

v1.27.0: "running water"

  • better support for empty/null passwords
  • allow bootstrap utility to query replication_host
  • a few library upgrades, notably pubsub and kinesis library
  • bootstrap connection uses jdbc_options properly
  • add logging for when we hit out of sync schema exceptions
  • allow for partitioning by thread_id, thx @gogov
  • fresh and clean documentation

v1.26.4: "No songs here"

  • support now() function with precision

v1.26.3: "the worst song in the goddamn world"

  • use pooled redis connections, fixes corruption when redis was accessed from multiple threads (bootstrap/producer), thanks @lucastex
  • fix date handling of '0000-01-01'
  • fix race condition in binlog reconnect logic

v1.26.2: "dave the butcher"

  • bootstraps can be scheduled in the future by setting the started_at column, thanks @lucastex
  • two mysql 8 fixes; one for a DEFAULT(function()) parse error, one for supporting DEFAULT ENCRYPTION

v1.26.1: "maybe we can break your ankle / clean and unsuspiciously"

  • fixes for redis re-connection login, thanks much @lucastex

v1.26.0: "tip the waitress, feed her cocaine habit"

  • We now support mysql 8's caching_sha2_password authentication scheme
  • support for converting JSON field names to camelCase

v1.25.3: "bye, bolinas"

  • fixes memory leak in mysql-binlog-connector
  • fixes exceptions that occur when a connection passes wait_timeout

v1.25.2: "love potion #9"

  • Fixes for a long standing JSON bug in 8.0.19+

v1.25.1: "nowhere to put it"

  • issue #1457, ALTER DATABASE with implicit database name
  • maxwell now runs on JDK 11 in docker
  • exit with status 2 when we can't find binlog files

v1.25.0: "mah mah mah my corona. I'm sorry. I'm sorry."

  • swap un-maintained snaq.db with C3P0.
  • support eu datadog metrics
  • protect against lost connections during key queries (bootstrapping, heartbeats, postition setting)

v1.24.2: "#shelterinstyle"

  • bugfix parsing errors: compressed columns, exchange partitions, parenthesis-enclosed default values, drop column foo.t.
  • add partition-by-random feature.
  • update jackson-databind to get security patch
  • fix redis channel interpolation on RPUSH

v1.24.1: "pixies in my head all damn week"

  • allow jdbc_options on secondary connections
  • fix a crash in bootstrapping / javascript filters
  • fix a regression in message.publish.age metric

v1.24.0: "la la la la la la low"

  • add comments field to bootstrapping, thanks Tom Collins
  • fix sql bug with #comments style comments

v1.23.5: "And I get so stuck in my head - Lost in all the lies, nihilistic backslide"

  • Update bootstrap documentation
  • Bump drop wizard metrics to support Java versions 10+

v1.23.4: "Try to be kinder to people who bore you, You're probably boring them too."

  • Bump and override dependencies to fix security vulnerabilities.
  • Update redis-key config options

  • list changes

v1.23.3: "but that's not the way it feels"

  • pubsubDelayMultiplier may now be 1.0
  • allow %{database} and %{topic} interpolation into redis producer
  • docs updates
  • setup default client_id in maxwell-bootstrap util

v1.23.2: "you enjoy it every time"

  • upgrade jackson
  • stop passing maxwell rows through the JS filter. too dangerous.

v1.23.1: "the new barrista"

  • Add option for XADD (redis streams) operation
  • Add configuration flag for tuning transaction buffer memory
  • sectionalize help text

v1.23.0: "When it breaks If it breaks We will see"

  • Added AWS FIFO support
  • Add retry and batch settings to pubs producer
  • Add support for age SLO metrics

v1.22.6: "the things that keep your, like, dresses, like"

  • upgrade mysql-connector-java to 8.0.17
  • use a newer docker image as base
  • list changes

v1.22.5: "all of the names"

  • bugfix for bootstrapping off a split replica that doesn't contain a "maxwell" database
  • Fix a parser issue with db.table.column style column names

v1.22.4: "Last Christmans, I gave you my heart"

  • Add row type to fallback message
  • Upgrade jackson-databind

v1.22.3: "my doubt, my failings"

  • fix issue with google pubsub in 1.22.2

v1.22.2: "some girls"

  • fix an issue with bootstrapping-on-replicas
  • add --output_primary_keys and --output_primary_key_columns
  • fix a very minor memory leak with blacklists

v1.22.1: "a snow covered field"

  • fix crash in rabbit-mq producer
  • better support for maxwell + azure-mysql
  • remove bogus different-host bootstrap check
  • some security upgrades

v1.22.0: "through the roof, and underground"

  • Bootstrapping has been reworked and is now available in all setups, including those in which the maxwell store is split from the replicator.
  • cleanup and fix a deadlock in the kafka fallback queue logic
  • add .partition_string = to javascript filters

v1.21.1: "ohhhhhh oh oh"

  • Upgrade binlog connector. Should fix issues around deserialization errors.

v1.21.0: "through the roof"

  • Bootstrapping output no longer contain binlog positions. Please update any code that relies on this.
  • Fix 3 parser issues.

v1.20.0: "and so you learn the only way to go is"

  • add support for partitioning by transaction ID thx @hexene
  • add support for a kafka "fallback" topic to write to when a message fails to write
  • add UJIS charset support
  • parser bug: multiple strings concatenate to make one default string
  • parser bug: deal with bizarre column renames which are then referenced in AFTER column statements

v1.19.7: "in every corner of your room"

  • fix a parser error with empty sql comments
  • interpret latin-1 as windows-1252, not iso-whatever, thx @borleaandrei

v1.19.6: "set up for you"

  • Further fixes for GTID-reconnection issues.
  • Crash sanely when GTID-enabled maxwell is connected to clearly the wrong master, thanks @acampoh

v1.19.5: "when there is trap"

  • Fixes for unreliable connections wrt to GTID events; previously we restart in any old position, now we throw away the current transaction and restart the replicator again at the head of the GTID event.

v1.19.4: "and underground"

  • Fixes for a maxwell database not making it through the blacklist
  • Add output_null_zerodates parameter to control how we treat '0000-00-00'

v1.19.3: "through the roof"

  • Add a universal backpressure mechanism. This should help people who were running into out-of-memory situations while bootstrapping.

v1.19.2: "the same I wore last night"

  • Include schema_id in bootstrap events
  • add more logging around binlog connector losing connection
  • add retry logic to redis
  • some aws fixes
  • allow pushing JS hashes/arrays into data from js filters

  • list changes

v1.19.1: "the swoop here doesn't change things one bit"

  • Handle mysql bit literals in DEFAULT statements
  • blacklist out CREATE ROLE etc
  • upgrade dependencies to pick up security issues

v1.19.0: "whole lotta milka"

  • mysql 8 support!
  • utf8 enum values are supported now
  • fix #1125, bootstrapping issue for TINYINT(1)
  • fix #1145, nasty bug around SQL blacklist and columns starting with "begin"
  • only resume bootstraps that are targeted at this client_id
  • fixes for blacklists and heartbeats. Did I ever mention blacklists are a terrible idea?

v1.18.0: "hello from the Andes"

  • memory optimizations for large schemas (especially shareded schemas with lots of duplicates)
  • add support for an http endpoint to support Prometheus metrics
  • allow javascript filters to access the row query object
  • javascript filters now run in the bootstrap process
  • support for non-latin1 column names
  • add --output_schema_id option
  • better handling of packet-too-big errors from Kinesis
  • add message.publish.age metric

v1.17.1: "ay, ay, ay"

  • fix a regression around filters + bootstrapping
  • fix a regression around filters + database-only-ddl

v1.17.0: "monday, not sunday tuesday"

v1.17.0 brings a new level of configurability by allowing you to inject a bit of javascript into maxwell's processing. Should be useful! Also:

  • fix regression for Alibaba RDS tables

v1.16.1: "the 90 degree angle thing"

  • Fix Bootstrapping for JSON columns
  • add --recapture_schema flag for when ya wanna start over
  • add kafka 1.0 libraries, make them default

v1.16.0: "kind of sort of a reference to something"

v1.16.0 brings a rewrite of Maxwell's filtering system, giving it a concise list of rules that are executed in sequence. It's now possible to exclude tables from a particular database, exclude columns matching a value, and probably some other use cases. See for details.

v1.15.0: "I'm sure I'm being supportive here."

This is a bug-fix release, but it's big enough I'm giving it a minor version.

  • Fix a very old bug in which DDL rows were writing the start of the row into maxwell.positions, leading to chaos in some scenarios where maxwell managed to stop on the row and double-process it, as well as to a few well-meaning patches.
  • Fix the fact that maxwell was outputting "next-position" instead of "position" of a row into JSON.
  • Fix the master-recovery code to store schema that corresponds to the start of a row, and points the replicator at the next-position.

Much thanks to Tim, Likun and others in sorting this mess out.

v1.14.7: "casamir pulaski day"

  • add RowMap#getRowQuery, thx @saimon7
  • revert alpine-linux docker image fiasco
  • fix RawJSONString not serializable, thx @niuhaifeng

v1.14.6: "gimme one sec, I need to grab something"

  • Fix docker image

v1.14.5: "he looks funny, he moves funny"

  • reduce docker image footprint
  • add benchmarking framework
  • performance improvements for date/datetime columns
  • fix parser error on UPGRADE PARTITIONING

v1.14.4: "chinese food"

  • Fix race condition in SchemaCapturer

v1.14.3: "what's for lunch?"

  • Enable jvm metrics

v1.14.2: "bork bork bork"

  • fix regression in 1.14.1 around bootstrapping host detection
  • fix heartbeating code around table includes

v1.14.1: "half asleep in frog pajamas"

  • bootstraps can now take a client_id
  • improved config validation for embedded mode

v1.14.0: "cats, cats, more cats. sadness at lack of cats."

  • new feature --output_xoffset to uniquely identify rows within transactions, thx Jens Gyti
  • Bug fixes around "0000-00-00" times.
  • Bug fixes around dates pre 1000 AD

v1.13.5: "cyclone keni is real"

  • Support environment variable based configuration

v1.13.4: "it was just a dream"

  • Added possibility to do not declare the rabbitmq exchange.

v1.13.3: "winner winner chicken dinner"

  • Add logging for binlog errors
  • Maven warning fix
  • Do not include current position DDL schema to avoid processing DDL twice
  • Always write null fields in primary key fields
  • Bugfix: fix http_path_prefix command line option issue

v1.13.2: "I just bought them to sleep in"

  • fix a bug with CHARACTER SET = DEFAULT
  • maxwell now eclipse-friendly.
  • configurable bind-address for maxwell's http server

v1.13.1: "line up your exes in song"

  • redis producer now supports LPUSH, thx @m-denton
  • RowMap can now contain artbitrary attributes for embedded maxwell, thx @jkgeyti
  • bugfix: fix jdbc option parsing when value contains =
  • bugfix: apparently the SQS producer was disabled
  • bugfix: fix a situation where adding a second client could cause schemas to become out of sync
  • support for --daemon

v1.13.0: "sorry, I burned your clothes"

  • proper SSL connection support, thanks @cadams5
  • support for including original SQL in insert/update/deletes, thanks @saimon7
  • fixes for float4, float8 and other non-mysql datatypes
  • bump kinesis lib to 0.12.8
  • fix for bug when two databases share a single table

v1.12.0: "Cold Feet, literally and metaphorically."

  • Support for injecting a custom producer, thanks @tomcollinsproject
  • New producer for Amazon SQS, thanks @vikrant2mahajan
  • Maxwell can now filter rows based on column values, thanks @finnplay
  • Fixes for the Google Pubsub producer (it was really broken), thanks @finnplay
  • DDL output can now optionally include the source SQL, thanks @sungjuly
  • Support for double-quoted table/database/etc names
  • rabbitmq option for persistent messages, thanks @d-babiak
  • SQL parser bugfix for values like +1.234, thanks @hexene

v1.11.0: "the latest, the greatest"

 - default kafka client upgrades to
 - fix the encryption issue (

v1.10.9: "no one left behind"

We recommend all v1.10.7 and v1.10.8 users upgrade to v1.10.9.

  • Add missing Kafka clients
  • Listen and report on binlog connector lifecycle events for better visibility
  • Reduce docker image size

v1.10.8: "what doesn't kill you makes you stronger"

  • Fix docker builds
  • Add Google Cloud Pub/Sub producer
  • RabbitMQ producer enhancements

v1.10.7: "it's never too l8!"

  • Java 8 upgrade
  • Diagnostic health check endpoint
  • Encryption
  • Documentation update: encryption, kinesis producer, schema storage fundamentals, etc.

v1.10.6: "a new starter is here"

  • Binlog-connector upgrade
  • Bug-fix: when using literal string for an option that accepts Regex, Regex characters are no longer special
  • If master recovery is enabled, Maxwell cleans up old positions for the same server and client id

v1.10.5: "half asleep on her couch"

  • Shyko's binlog-connector is now the default and only replication backend available for maxwell.

v1.10.4: "shutdown --harder"

Notable changes:

  • Shutdown hardening. If maxwell can't shut down (because the kafka producer is in a bad state and close() never terminates, for example), it would previously stall and process no messages. Now, shutdown is run in a separate thread and there is an additional watchdog thread which forcibly kills the maxwell process if it can't shut down within 10 seconds.
  • Initial support for running maxwell from java, rather then as its own process. This mode of operation is still experimental, but we'll accept PRs to improve it (thanks Geoff Lywood).
  • Fix incorrect handling of negative (pre-epoch dates) when using binlog_connector mode (thanks Geoff Lywood).

v1.10.3: "1.10.2-and-a-bit"

  • tiny release to fix a units error in the replication.lag metric (subtracting seconds from milliseconds)

v1.10.2: "just in time for tomorrow"

  • added metrics: "replication.queue.time" and "inflightmessages.count"
  • renamed "time.overall" metric to "message.publish.time"
  • documentation updates (thanks Chintan Tank)

v1.10.1: "forgive and forget"

The observable changes in this minor release are a new configuration for Kafka/Kinesis producer to abort processing on publish errors, and support of Kafka 0.10.2. Also a bunch of good refactoring has been done for heartbeat processing. List of changes:

  • Support Kafka 0.10.2
  • Stop procesing RDS hearbeats
  • Keep maxwell heartbeat going every 10 seconds when database is quiet
  • Allow for empty double-quoted string literals for database schema changes
  • Ignore Kafka/Kinesis producer errors based on new configuration ignore_producer_error

v1.10.0: "slightly more ones than zeroes"

This is a small release, primarily around a change to how schemas are stored. Maxwell now stores the last_heartbeat_read with each entry in the schemas table, making schema management more resilient to cases where binlog numbers are reused, but means that you must take care if you need to roll back to an earlier version. If you deploy v1.10.0, then roll back to an earlier version, you should manually update all schemas.last_heartbeat_read values to 0 before redeploying v1.10.0 or higher.

Other minor changes:

  • allow negative default numbers in columns
  • only store final binlog position if it has changed
  • blacklist internal aurora table `rds_heartbeat*'
  • log4j version bump (allows for one entry per line JSON logging)

v1.9.0: "now with added whimsy"

Maxwell 1.9 adds one main feature: monitoring support, contributed by Scott Ferguson. Multiple backends can be configured, read the updated docs for full details.

There's also some bugfixes:

  • filter DDL messages based on config
  • determine newest schema from binlog order, not creation order
  • add task manager to shutdown cleanly on error
  • minor logging improvements

v1.8.2: "just as the postcards wept"

Bugfix release.

  • maxwell would crash on a quoted partition name
  • fixes for alters on non-string tables containing VARCHAR
  • use seconds instead of milliseconds for DDL messages

v1.8.1: "famous is faster, don't have to be talented"

  • performance improves in capturing and restoring schema, thx Joren Minnaert
  • Allow for capturing from a separate mysql host (adds support for using Maxscale as a replication proxy), thx Adam Szkoda

v1.8.0: "upbeat, honest, contradictory"

In version 1.8.0 Maxwell gains alpha support for GTID-based positions! All praise due to Henry Cai.

v1.7.2: "comparing self to better"

  • Fix a bug found where maxwell could cache the wrong TABLE_MAP_ID for a binlog event, leading to crashes or in some cases data mismatches.

v1.7.1: "blame it on your seratonin"

  • bootstrapping now can take a --where clause
  • performance improvements in the kafka producer

v1.7.0: "lucky me, lucky mud"

Maxwell 1.7 brings 2 major new, alpha features. The first is Mysql 5.7 support, including JSON column type support and handling of 5.7 SQL, but not including GTID support yet. This is based on porting Maxwell to Stanley Shyko's binlog-connector library. Thanks to Stanley for his amazing support doing this port.

The second major new feature is a producer for Amazon's Kinesis streams, This was contributed in full by the dogged and persistent Thomas Dziedzic. Check it out with --producer=kinesis.

There's also some bugfixes: - Amazon RDS heartbeat events now tick maxwell's position, thx Scott Ferguson - allow CHECK() statements inside column definitions

v1.6.0: "give me a quest"

This is mostly a bugfix release, but it gets a minor version bump due to a single change of behavior: dates and timestamps which mysql may accept, but are considered invalid (0000-00-00 is a notable example) previously had inconsistent behavior. Now we convert these to NULL. Other bugfixes: - heartbeats have moved into their own table - more fixes around alibaba rds - ignore DELETE statements that are output for MEMORY tables upon server restart - allow pointing maxwell to a pre-existing database

v1.5.2: "french banana"

  • add support for kafka 0.10.1 @ smferguson
  • master recovery: cleanup positions from previous master; prevent errors on flip-back.
  • fix a bug that would trigger in certain cases when dropping a column that was part of the primary-key

v1.5.1: "1.5.1 is just 1.5.1"

This is a bugfix release. - fixes for bootstrapping with an alternative maxwell-schema name and an include_database filter, thanks Lucian Jones - fixes for kafka 0.10 with lz4 compression, thanks Scott Ferguson - ignore the RDS table mysql.ha_health_check table - Get the bootstrapping process to output NULL values. - fix a quoting issue in the bootstrap code, thanks @mylesjao.

v1.5.0: "someone, somewhere, is still smoking cigarettes, damnit"

  • CHANGE: Kafka producer no longer ships with hard-coded defaults. Please ensure you have "compression.type", "", and "retries" configured to your liking.
  • bugfix: fix a regression in handling ALTER TABLE change c int after b statements
  • warn on servers with missing server_id

v1.4.2: "drawer cat is back"

  • kafka 0.10.0 support, as well as a re-working of the --kafka_version command line option.

v1.4.1: "cat snores"

  • support per-table topics, Thanks @smferguson and @sschatts.
  • fix a parser issue with DROP COLUMN CASCADE, thanks @smferguson

v1.4.0: "deep, insomniac character flaws"

1.4.0 brings us two nice new features: - partition-by-column: see --kafka_partition_columns. Thanks @smferguson - output schema changes as JSON: see --output_ddl. Thanks @xmlking - As well as a fix around race conditions on shutdown.

v1.3.0: "yogg-saron"

  • support for fractional DATETIME, TIME, TIMESTAMP columns, thanks @Dagnan
  • support for outputting server_id & thread_id, thanks @sagiba
  • fix a race condition in bootstrap support

v1.2.2: "bats wearing frog pajamas"

  • Maxwell will now include by default fields with NULL values (as null fields). To disable this and restore the old functionality where fields were omitted, pass --output_nulls=false
  • Fix an issue with multi-client support where two replicators would ping-pong heartbeats at each other
  • Fix an issue where a client would attempt to recover a position from a mismatched client_id
  • Fix a bug when using CHANGE COLUMN on a primary key

v1.2.1: "point-ones are a sad and inevitable fact"

This is a bugfix release. - fix a parser bug around ALTER TABLE CHARACTER SET - fix bin/maxwell to pull in the proper version of the kafka-clients library

v1.2.0: "just here, not to talk to you"

1.2.0 is a major release of Maxwell that introduces master recovery features; when a slave is promoted to master, Maxwell is now capable of recovering the position. See the --master_recovery flag for more details.

It also upgrades the kafka producer library to 0.9. If you're using maxwell with a kafka 0.8 server, you must now pass the --kafka0.8 flag to maxwell.

v1.1.6: "pithy"

  • minor bugfix in which maxwell with --replay mode was trying to write heartbeats

v1.1.5: "my brain is a polluted mess"

  • @dadah89 adds --output_binlog_position to optionally output the position with the row
  • @dadah89 adds --output_commit_info to turn off xid/commit fields
  • maxwell now supports tables with partitions
  • maxwell now supports N maxwells per-server. see the client_id / replica_server_id options.
  • two parser fixes, for engine=innodb and CHARSET ASCII
  • lay the ground work for doing master recovery; we add a heartbeat into the positions table that we can co-ordinate around.

v1.1.4: "george flunk"

  • add support for a bunch more charsets (gbk, big5, notably)
  • fix Maxwell's handling of kafka errors - previously we were trying to crash Maxwell by throwing a RuntimeException out of the Kafka Producer, but this was a failure. Now we log and skip all errors.

v1.1.3: "the button I push to not have to go out"

This is a bugfix release, which fixes: -, a problem parsing RENAME INDEX -, a problem with the SERIAL datatype -, we now preserve the original casing of columns -, we were incorrectly expecting heartbeats to work under 5.1

v1.1.2: "scribbled notes on red pages"

  • pick up latest mysql-connector-j, fixes #369
  • fix an issue where maxwell could skip ahead positions if a leader failed.
  • rework buffering code to be much kinder to the GC and JVM heap in case of very large transactions / rows inside transactions
  • kinder, gentler help text when you specify an option incorrectly

v1.1.1: scribbled notes on blue pages

  • fixes a race condition setting the binlog position that would get maxwell stuck

v1.1.0: "sleep away the afternoon"

  • much more efficient processing of schema updates storage, especially when dealing with large schemas.
  • @lileeyao added --exclude-columns and the --jdbc_options features
  • @lileeyao added --jdbc_options
  • can now blacklist entire databases
  • new kafka key format available, using a JSON array instead of an object
  • bugfix: unsigned integer columns were captured incorrectly. 1.1 will recapture the schema and attempt to correct the error.

v1.1.0-pre4: "buck buck buck buck buck buck-AH!"

  • Eddie McLean gives some helpful patches around bootstrapping
  • Bugfixes for the patch-up-the-schema code around unsigned ints


  • forgot to include some updates that back-patch unsigned column problems

v1.1.0-pre2: "yawn yawn"

  • fix performance issues when capturing schema in AWS Aurora
  • fix a bug in capturing unsigned integer columns

v1.0.1: "bag of oversized daisies"

  • fixes a parsing bug with CURRENT_TIMESTAMP()

v1.0.0: "Maxwell learns to speak"

Since v0.17.0, Maxwell has gotten: - bootstrapping support - blacklisting for tables - flexible kafka partitioning - replication heartbeats - GEOMETRY columns - a whole lotta lotta bugfixes

and I, Osheroff, think the damn thing is stable enough for a 1.0. So there.

v1.0.0-RC3: "C'mon and take it"

pull in support for replication heartbeats. helps in the flakier network environs.

v1.0.0-RC2: "same thing, just without the v"

  • fixes the way ALTER DATABASE charset= was handled
  • adds proper handling of ALTER TABLE CONVERT TO CHARSET

v1.0.0-RC1: "Richard Buckner's release"

  • modifications to the way the bootstrap utility works
  • fix a race condition crash bug in bootstrapping
  • fix a parser bug

v1.0.0-PRE2: "an embarassment of riches"

1.0.0-PRE2 brings in a lot of changes that got merged while we were testing out PRE1. so, hey. - Configurable names for the maxwell schema database (Kristian Kaufman) - Configurable key (primary key, id, database) into the kafka partition hash function (Kristian Kaufman) - Configurable Kafka partition hash function (java hashCode, murmur3) (Kristian Kaufman) - support GEOMETRY columns, output as well-known-text - add --blacklist_tables option to fully ignore excessive schema changes (Nicolas Maquet) - bootstrap rows now have 'bootstrap-insert' type

v1.0.0-PRE1: "drunk conversations with sober people"

  • Here we have the preview release of @nmaquet's excellent work around bootstrapping initial versions of mysql tables.

v0.17.0: "wrists of William"

v0.17 is a large bugfix release with one new feature. - FEATURE: allow specifying an alternative mysql schema-storage server and replication server - BUGFIX: properly handle case-sensitivity by aping the behavior of the master server. Fixes #230. - BUGFIX: parse some forms of CHECK( ... ) statements. Fixes #203. - BUGFIX: many more SQL-parser fixes. We are mostly through some thousands of lines of SQL produced by mysql-test.

v0.16.2: "The best laid plans"

This is a large-ish bugfix release. - Support, with reservations, binlog_row_image=MINIMAL - parser bug: handle table names that look like floating points - parser bug: fix for entity names that have '.', '\', etc in them - handle UPPERCASE encoding names - support UCS2 (start trying to operate ok on the mysql-test suite) - use ObjectOutputStream.reset to fix memory leaks when buffering to disk

v0.16.1: "me and room service"

This is a bug-fix-roundup release: - support ALTER DATABASE - fix a bunch of parse errors: we've started running mysql-test at maxwell and are fixing up failures. - some modifications to the overflow-to-disk logic; we buffer the input and output, and we fix a memory leak

v0.16.0: "Kristian Kaufmann's version"

Version 0.16.0 introduces a feature where UPDATE statements will now show both the new row image and the old values of the fields that changed. Thanks @kristiankaufmann

v0.15.0: "the littlest little city"

  • fix a parse problem with indices ordered by ASC/DESC

v0.15.0-RC1: "it's later than you think"

  • large transactions now buffer to disk instead of crushing maxwell.
  • support ALGORITHM=[algo], LOCK=[lock] for 5.6 alters

v0.14.6: "It's about being American. Sort of."

  • fix TIME column support
  • fix parsing on millisecond precision column defintions
  • fix CREATE SCHEMA parsing

v0.14.5: "false is the new true"

  • handle BOOLEAN columns with true/false defaults

v0.14.4: "You'd think we'd be at 1.0 by now, wouldn't you?"

  • fixes parsing of "mysql comments" (/*! .. */)
  • More performance improvements, another 10% in a tight loop.

v0.14.3: "Peanuts. My girlfriend thinks about peanuts."

  • fixes a regression in 0.14.2 that creates duplicate copies of the "mysql" database in the schema.

v0.14.2: "Maxwell Sandvik 88"

  • capture the mysql database along with the rest of the schema. Eliding it was a bad premature optimization that led to crashes when tables in the mysql database changed.

v0.14.1: "be liberal in what you accept. Even if nonsensical."

  • fixes a parser bug around named PRIMARY KEYs.

v0.14.0: "the slow but inevitable slide"

This release introduces row filters, allowing you to include or exclude tables from maxwell's output based on names or regular expressions.

v0.13.1: "well that was somewhat expected"

v0.13.1 is a bug fix of v0.13.0 -- fixes a bug where long rows were truncated.

v0.13.0 contains: - Big performance boost for maxwell: 75% faster in some benchmarks - @davidsheldon contributed some nice bug fixes around CREATE TABLE ... IF NOT EXISTS, which were previously generating new, bogus copies of the schema. - we now include a "scavenger thread" that will lazily clean out old, deleted schemas.

v0.13.0: "Malkovich Malkovich Malkovich Sheldon?"

Lucky release number 13 brings some reasonably big changes: - Big performance boost for maxwell: 75% faster in some benchmarks - @davidsheldon contributed some nice bug fixes around CREATE TABLE ... IF NOT EXISTS, which were previously generating new, bogus copies of the schema. - we now include a "scavenger thread" that will lazily clean out old, deleted schemas.

This release has a pretty bad bug. do not use.

v0.12.0: "what do I call them? Slippers? Why, are you jealous?"

  • add support for BIT columns.

v0.11.4: "13 steps"

this is another bugfix release that fixes a problem where the replication thread can die in the middle of processing a transaction event. I really need to fix this at a lower level, ie the open-replicator level.

v0.11.3: ".. and the other half is to take the bugs out"

this is a bugfix release: - fix problems with table creation options inside alter statements ( ALTER TABLE foo auto_increment=10 ) - fix a host of shutdown-procedure bugs

the test suite should also be way more reliable, not like you care.

v0.11.2: "savage acts of unprovoked violence are bad"

This is a bugfix release. It includes: - soft deletions of maxwell.schemas to fix A->B->A master swapping without creating intense replication delay - detect and fail early if we see binlog_row_image=minimal - kill off maxwell if the position thread dies - fix a bug where maxwell could pick up a copy of schema from a different server_id (curse you operator precedence!)

v0.11.1: "dog snoring loudly"

  • maxwell gets a very minimal pass at detecting when a master has changed, in which it will kill off schemas and positions from a server_id that no longer is valid. this should prevent the worst of cases.

v0.11.0: "cat waving gently"

This release of Maxwell preserves transaction information in the kafka stream by adding a xid key in the JSON object, as well as a commit key for the final row inside the transaction.

It also contains a bugfix around server_id handling.

v0.10.1: "all 64 of your bases belong to... shut up, internet parrot."

  • proper support for BLOB, BINARY, VARBINARY columns (base 64 encoded)
  • fix a problem with the SQL parser where specifying encoding or collation in a string column in the wrong order would crash
  • make table option parsing more lenient

v0.11.0-RC1: "goin' faster than a rollercoaster"

  • merge master fixes

v0.10.0: "The first word is French"

  • Mysql 5.6 checksum support!
  • some more bugfixes with the SQL parser

v0.11.0-PRE4: "except for that other thing"

  • bugfix on v0.11.0-PRE3

v0.11.0-PRE3: "nothing like a good night's sleep"

  • handle SAVEPOINT within transactions
  • downgrade unhandled SQL to a warning

v0.11.0-PRE2: "you really need to name a PRE release something cutesy?"

  • fixes for myISAM "transactions"

v0.11.0-PRE1: "A slow traffic jam towards the void"

  • fix a server_id bug (was always 1 in maxwell.schemas)
  • JSON output now includes transaction IDs

v0.10.0-RC4: "Inspiring confidence"

  • deal with BINARY flag in string column creation.

v0.9.5: "Long story short, that's why I'm late"

  • handle the BINARY flag in column creation

v0.10.0-RC3: "Except for that one thing"

  • handle "TRUNCATE [TABLE_NAME]" statements

v0.10.0-RC2: "RC2 is always a good sign."

  • fixes a bug with checksum processing.

v0.10.0-RC1: "verify all the things"

  • upgrade to open-replicator 1.3.0-RC1, which brings binlog checksum (and thus easy 5.6.1) support to maxwell.

v0.9.4: "we've been here before"

  • allow a configurable number (including unlimited) of schemas to be stored

v0.9.3: "some days it's just better to stay in bed"

  • bump open-replicator to 1.2.3, which allows processing of single rows greater than 2^24 bytes

v0.9.2: "Cat's tongue"

  • bump open-replicator buffer to 50mb by default
  • log to STDERR, not STDOUT
  • --output_file option for file producer

v0.9.1: "bugs, bugs, bugs, lies, statistics"

  • Maxwell is now aware that column names are case-insenstive
  • fix a nasty bug in which maxwell would store the wrong position after it lost its connection to the master.

v0.9.0: Vanchi says "eat"

Also, vanchi is so paranoid he's worried immediately about this.

  • mysql 5.6 support (without checksum support, yet)
  • fix a bunch of miscellaneous bugs @akshayi1 found (REAL, BOOL, BOOLEAN types, TRUNCATE TABLE)

v0.8.1: "Pascal says Bonjour"

  • minor bugfix release around mysql connections going away.

v0.8.0: the cat never shuts up

  • add "ts" field to row output
  • add --config option for passing a different config file
  • support int1, int2, int4, int8 columns

v0.7.2: "all the sql ladies"

  • handle inline sql comments
  • ignore more user management SQL

v0.7.1: "not hoarders"

  • only keep 5 most recent schemas

v0.7.0: 0.7.0, "alameda"

  • handle CURRENT_TIMESTAMP parsing properly
  • better binlog position sync behavior

v0.6.3: 0.6.3

  • better blacklist for CREATE TRIGGER

v0.6.2: v0.6.2

  • maxwell now ignores SAVEPOINT statements.

v0.6.1: v0.6.1

  • fixes a bug with parsing length-limited indexes.

v0.6.0: kafkakafkakafa

Version 0.6.0 has Maxwell outputting a JSON kafka key, so that one can use Kafka's neat "store the last copy of a key" retention policy. It also fixes a couple of bugs in the query parsing path.

v0.5.0: 0.5.0 -- "People who put commas in column names deserve undefined behavior"

  • maxwell now captures primary keys on tables. We'll use this to form kafka key names later.
  • maxwell now outputs to a single topic, hashing the data by database name to keep a database's updates in order.

v0.4.0: 0.4.0, "unboxed cat"

v0.4.0 fixes some bugs with long-lived mysql connections by adding connection pooling support.

v0.3.0: 0.3.0

This version fixes a fairly nasty bug in which the binlog-position flush thread was sharing a connection with the rest of the system, leading to crashes.

It also enables kafka gzip compression by default.

v0.2.2: 0.2.2

Version 0.2.2 sets up the LANG environment variable, which fixes a bug in utf-8 handling.

v0.2.1: v0.2.1

version 0.2.1 makes Maxwell ignore CREATE INDEX ddl statements and others.

v0.2.0: 0.2.0

This release gets Maxwell storing the last-written binlog position inside the mysql master itself.

v0.1.4: 0.1.4

support --position_file param

v0.1.3: 0.1.3

Adds kafka command line options.

v0.1.1: 0.1.1

v0.1.1, a small bugfix release.

v0.1: 0.1

This is the first possible release of Maxwell that might work. It includes some exceedingly basic kafka support, and JSON output of binlog deltas.