Currently we have one database cluster with 15 different schemas – these schemas could be either schemas which contain “real” data, or just schemas with metadata.

I guess the next evolutionary step of our database stack would be to split up the database cluster vertically along these schemas. All the data schemas should be moved to standalone mysql instances, and put the metadata schemas next to them. This also could be a good project for prepare to move a certain part of database for example to a cloud provider while other parts are still kept on bare metal.

I started wondering what could be the best way to split MySQL instances in a single hardware. I have the following ideas:

  • Hack init scripts to start different instances on different ports (and log directories, data directories, config files too)
  • Use mysqld_multi
  • Use MySQL Sandbox
  • Use docker

The first one doesn’t look good for me, because that could make hell any of the upgrades, the rpm package will probably rewrite my init script every time, so I have to fix this manually from time to time. It’s simply a NO GO.

It just looks like mysqld_multi is designed for this purpose. It has good documentation, there are blogposts about them. It is worth to check out.

MySQL Sandbox also a project aimed for running multiple instances on the same hardware, but as reading it’s documentation, it is more designed for testing, checking out features than put to production.

Docker seems the most sexy and neat from all of the above, but I don’t know how many overhead it will generate either in network usage or in any other resource usage. It has a great advantage that docker allows to map resources for containers – like CPUs -, which could be useful, however I don’t know how I could map the data directories for containers – they must be included inside, or they could be left on host? (EDIT: Volume plugin)

I’ll start my experiments and tests, and I will blog about them here.