For those that might not know: MariaDB is a binary-safe, drop-in MySQL replacement. In my opinion, apart from some extra functionalities (that I’m interested in – like using indexes on subqueries) it has one major advantage when compared to MySQL: it’s not ORACLE. Unfortunately there are rumours that MySQL eventually might become a closed source product – and that of course would be bad for millions of websites (but good for Larry).

At sysCore we are migrating all our MySQL servers to MariaDB – and whenever possible for new projects we go with PostgreSQL.

Today’s HOWTO is quick and simple – migrating from MySQL to MariaDB on a Ubuntu 12.04 LTS machine (precise pangolin).

Before we add MariaDB repository there’s a bit of cryptowork ahead – i.e. you have to import the key that is used to sign MariaDB deb packages. Full information can be obtained here:

At the time of writing the key ID was ”0xcbcb082a1bb943db” and the fingerprint:

1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB

To import the key you should use the ”apt-key” application:

sudo apt-key adv --recv-keys --keyserver 0xcbcb082a1bb943db

Output should be similar to this:

gpg: requesting key 1BB943DB from hkp server
gpg: key 1BB943DB: public key "Daniel Bartholomew (Monty Program signing key) " imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1

Now it’s time to configure your MariaDB repository. Maintainers of the project have created a very nice repository configuration page: Just go there and select your repository configuration. At the time of writing I am selecting ubuntu -> precise -> 5.5 -> 

# MariaDB 5.5 repository list - created 2012-09-16 14:28 UTC
deb precise main
deb-src precise main

To keep things in order I suggest creating a separate apt source file called: /etc/apt/ It’s a bit easier to have extra repositories configured separately from the management point of view. Now it’s time update our package list:

sudo apt-get update

Right now we’re ready to install MariaDB. The installation that I was performing was on a live server. You should definitely backup all your databases before you continue.

sudo apt-get install mariadb-server mariadb-client

MySQL and MariaDB cannot in this case coexist – you have to be aware of the fact that your current MySQL installation will be removed.

The following packages will be REMOVED:
  mysql-client-5.5 mysql-client-core-5.5 mysql-server mysql-server-5.5 mysql-server-core-5.5
The following NEW packages will be installed:
  libaio1 libmariadbclient18 mariadb-client mariadb-client-5.5 mariadb-client-core-5.5 mariadb-common mariadb-server mariadb-server-5.5 mariadb-server-core-5.5
The following packages will be upgraded:
  libmysqlclient18 mysql-common

Database directory will be of course preserved – MariaDB is a drop-in, binary compatible replacement for MySQL, so it should be able to start working with your old DB files without any problems (nevertheless, it’s always better to have a backup). The upgrade/change process consists of the following steps:

  • MySQL will be stopped and removed (but db files will be preserved).
  • MariaDB will be installed. You will be asked for new root password for your MariaDB SQL server.
  • MariaDB will check if there are any files/tables requiring fixing.
  • MariaDB will be started. You should verify if everything works as it should.

That’s it! You are now running MariaDB on your Ubuntu 12.04 LTS.

A few important comments:

  • if you plan to perform this change on a very busy server – I suggest you announce to your customers that there will be a maintenance downtime; love your data and make sure it stays in its logical consistency also after the upgrade
  • you have been informed to take a backup;mysqldump is a very good option for that
  • just copying the /var/lib/mysql/ directory as the mysql server is running IS NOT considered a backup; it’s ok to copy when mysql is not running (if you copy it while the server is running you might end up with corrupted data – in other words your db files might be missing all the data that was not flushed from the memory)
  • mysqlhotcopy cannot be used for databases with tables other than MyISAM and ARCHIVE
  • if your MySQL database is enormous – or you run replication services or other enterprise features – this HOWTO might not be a solution to your problem