← Back to team overview

mysql-proxy-discuss team mailing list archive

Replication and Storage Engines ... or "MySQL Proxy is a toolbox"

 

At our sessions at the MySQL User Conference this year, Kay and me tried
to emphasis that the name "MySQL Proxy" isn't fully describing what
"MySQL Proxy" is.

The way MySQL Proxy is structured (libs, plugins, scripting) is all
focused on making customization and creativity as straight forward as
possible:

* scripting: Users don't have to recompile to change the behaviour
* libs: Devs can use the components in different ways
* plugins: the chassis is a framework to handle different kinds of
server-like applications

== libs ==

There is

* libmysql-chassis containing the chassis
* libmysql-proxy containing the network interface, protocol
encoding/decoding, masterinfo parsing, binlog parsing, ...

I actually plan to split the libmysql-proxy into small pieces like:

* libmysql-proto-binlog
* libmysql-proto-myisam

and so on.

=== binlogs ===

In the replication tree
(https://code.launchpad.net/~jan-kneschke/mysql-proxy/replication) I
implemented now most of the replication features I was looking for. At
the UC I presented most of them:

  http://jan.kneschke.de/search?q=binlogs

I added Lua wrappers around them to get ...

== a binlog storage engine ==

Quite some time ago I wrote a scriptable storage engine called wormhole
that exposes the storage engine interface of MySQL 5.1 to Lua:

  http://jan.kneschke.de/search?q=wormhole

I revamped it and used the libmysql-proxy from that above replication
tree to expose binlogs back into MySQL:

  http://jan.kneschke.de/2009/5/4/binlog-storage-engine-mysql-proxy-edition

That engine takes a .lua file from the mysql-servers datadir, auto
discovers the table-structure you want and creates the .frm files for it
and exposes everything to read (and later) write to tables.

Right now, this works very efficiently for binlogs as I allow to easily
JOIN binlogs on the log-positions (I expose it as PRIMARY KEY), ranges
are optimized, ORDER BY too.

== ... to sum it up ==

"MySQL Proxy" is just one of the incarnations of what you can do with
the pieces that build the MySQL Proxy. Internally it is nicely separated
into components that you can use it for other, previous not expected
use-cases.

cheers,
  Jan
-- 
 jan: "Gee, Brain^WEric, what'd you wanna do tonight?"
eric: Same thing we do everynight: Take over the HelloWorld!