[Tuto] A real life Multi-Master use case with MariaDB

The goal of this tutorial is to show you how to use Multi-Master and aggregate databases with the same name but with different data from different masters.

Example:

  • master1 => a French subsidiary
  • master2 => a British subsidiary

Both have the same database (PRODUCTION) but the data are totally different:

ScreenShot038We will start with 3 servers (2 masters and 1 slave), you can add more master if needed.

Informations

  •  10.10.16.231: first master (aka ”’master1”’) => a French subsidiary
  • 10.10.16.232: second master (aka ”’master2”’) => a British subsidiary
  • 10.10.16.233: slave (multi-master) (aka ”’slave”’)

If you have already your 3 servers correctly installed go directly to: “Dump your databases”

Default installation on 3 servers

apt-get -y install python-software-properties
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

The main reason why I put the apt configuration in a different file is that we use a configuration manager and this one overwrite /etc/apt/sources.list.
Also, if any trouble occurs just remove this file and you restart with the default configuration.

echo "deb http://mirror.stshosting.co.uk/mariadb/repo/10.0/ubuntu precise main" > /etc/apt/sources.list.d/mariadb.list
apt-get update
apt-get install mariadb-server

The goal of this small script is to get the IP of the server and make a CRC32 from this IP to generate one unique server-id.
Generally the crc32 command isn’t installed, so, we will use the MySQL function instead.
Even if your server have more interface you should have no trouble because the IP should be unique.

user=`egrep user /etc/mysql/debian.cnf | tr -d ' ' | cut -d '=' -f 2 | head -n1 | tr -d '\n'`
passwd=`egrep password /etc/mysql/debian.cnf | tr -d ' ' | cut -d '=' -f 2 | head -n1 | tr -d '\n'`
ip=`ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}' | head -n1 | tr -d '\n'`
crc32=`mysql -u $user -p$passwd -e "SELECT CRC32('$ip')"`
id_server=`echo -n $crc32 | cut -d ' ' -f 2 | tr -d '\n'`

Find out a minimalist configuration file. Consider to use your own configuration.
If you are interested by my default MariaDB 10 configuration at Photobox, just click here

cat >> /etc/mysql/conf.d/mariadb10.cnf << EOF
[mysqld]
 character-set-client-handshake = FALSE
 character-set-server = utf8
 collation-server = utf8_general_ci
 bind-address = 0.0.0.0
 external-locking = off
 skip-name-resolve
 #make a crc32 of ip server
 server-id=$id_server
 #to prevent auto start of thread slave
 skip-slave-start
[mysql]
 default-character-set = utf8
EOF

Then, restart the server:

/etc/init.d/mysql restart
* Stopping MariaDB database server mysqld [ OK ]
* Starting MariaDB database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.

Repeat these actions on the 3 servers.

Create users on both master

Create replication’s user on both master

On master1:

mysql -u root -p -e "GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%' IDENTIFIED BY 'passwd'"

On master2:

mysql -u root -p -e "GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'%' IDENTIFIED BY 'passwd'"

Create an user for external backup

On master1 and on master2:

mysql -u root -p -e "GRANT SELECT, LOCK TABLES, RELOAD, REPLICATION CLIENT, SUPER ON *.* TO 'backup'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION"

Only for testing

Considering you didn’t have a such configuration and you want to test it

Create a database on master1:

 master1 [(none)]> CREATE DATABASE PRODUCTION;

Create a database on master2:

 master2 [(none)]> CREATE DATABASE PRODUCTION;

Load slave with master data

All the commands until the end have to be done on the slave server:

* –master-data=2: Get the binary log and the position, and put it at the beginning of the dump in comment
* –single-transaction: This option issues a BEGIN SQL statement before dumping data from the server (works only with InnoDB tables)

mysqldump -h 10.10.16.231 -u root -p --master-data=2 --single-transaction PRODUCTION > PRODUCTION_10.10.16.231.sql
mysqldump -h 10.10.16.232 -u root -p --master-data=2 --single-transaction PRODUCTION > PRODUCTION_10.10.16.232.sql

Create both new databases:

slave[(none)]> CREATE DATABASE PRODUCTION_FR;
slave[(none)]> CREATE DATABASE PRODUCTION_UK;

Then load the data:

mysql -h 10.10.16.233 -u root -p PRODUCTION_FR < PRODUCTION_10.10.16.231.sql
mysql -h 10.10.16.233 -u root -p PRODUCTION_UK < PRODUCTION_10.10.16.232.sql

Set up replication on slave

Edit both dump files and get the name and the position of the binlog and replace it as following:

French subsidiary:

less PRODUCTION_10.10.16.231.sql

Get the line: (file and position will be different)

-- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000010', MASTER_LOG_POS=771;

Replace name and position in this command:

CHANGE MASTER 'PRODUCTION_FR' TO MASTER_HOST = "10.10.16.231", MASTER_USER = "replication", MASTER_PASSWORD ="passwd", MASTER_LOG_FILE='mariadb-bin.000010', MASTER_LOG_POS=771;

English subsidiary

less PRODUCTION_10.10.16.232.sql

Get the line: (file and position will be different)

-- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000010', MASTER_LOG_POS=771;

Replace name and position in this command:

CHANGE MASTER 'PRODUCTION_UK' TO MASTER_HOST = "10.10.16.232", MASTER_USER = "replication", MASTER_PASSWORD ="passwd", MASTER_LOG_FILE='mariadb-bin.000010', MASTER_LOG_POS=771;

Rules of replication on config file

Unfortunatly the option replicate-rewrite-db doesn’t exist as a variable and we can’t set up this configuration without restarting the slave server.
Add the following lines to /etc/mysql/conf.d/mariadb10.cnf on the slave:

PRODUCTION_FR.replicate-rewrite-db="PRODUCTION->PRODUCTION_FR"
PRODUCTION_UK.replicate-rewrite-db="PRODUCTION->PRODUCTION_UK"
PRODUCTION_FR.replicate-do-db="PRODUCTION_FR"
PRODUCTION_UK.replicate-do-db="PRODUCTION_UK"

Then you can restart MySQL (Don’t forget to launch the slaves because we skipped it at start):

/etc/init.d/mysql restart

Start replication:

* one by one:

START SLAVE 'PRODUCTION_FR';
START SLAVE 'PRODUCTION_UK';

* all together:

START ALL SLAVES;

Check the replication:

slave[(none)]>SHOW SLAVE 'PRODUCTION_UK' STATUS;
slave[(none)]>SHOW SLAVE 'PRODUCTION_FR' STATUS;
slave[(none)]>SHOW ALL SLAVES STATUS;

Tests

On slave:

slave [(none)]> use PRODUCTION_FR;
Database changed
slave [PRODUCTION_FR]> show tables;
Empty set (0.00 sec)
slave [(none)]> use PRODUCTION_UK;
Database changed
slave [PRODUCTION_UK]> show tables;
Empty set (0.00 sec)

On master1:

master1 [(none)]> use PRODUCTION;
Database changed
master1 [PRODUCTION]>CREATE TABLE `france` (id int);
Query OK, 0 rows affected (0.13 sec)
master1 [PRODUCTION]> INSERT INTO `france` SET id=1;
Query OK, 1 row affected (0.00 sec)

On master2:

master2 [(none)]> use PRODUCTION;
Database changed
master2 [PRODUCTION]>CREATE TABLE `british` (id int);
Query OK, 0 rows affected (0.13 sec)
master2 [PRODUCTION]> INSERT INTO `british` SET id=2;
Query OK, 1 row affected (0.00 sec)

On slave:

-- for FRANCE
slave [(none)]> use PRODUCTION_FR;
Database changed
slave [PRODUCTION_FR]> show tables;
 +-------------------------+
 | Tables_in_PRODUCTION_FR |
 +-------------------------+
 | france |
 +-------------------------+
 1 row in set (0.00 sec)
slave [PRODUCTION_FR]> SELECT * FROM france;
 +------+
 | id |
 +------+
 | 1 |
 +------+
 1 row in set (0.00 sec)
 
-- for British
 slave [(none)]> use PRODUCTION_UK;
 Database changed
 slave [PRODUCTION_UK]> show tables;
 +-------------------------+
 | Tables_in_PRODUCTION_UK |
 +-------------------------+
 | british |
 +-------------------------+
 1 row in set (0.00 sec)
slave [PRODUCTION_UK]> SELECT * FROM british;
 +------+
 | id |
 +------+
 | 2 |
 +------+
 1 row in set (0.00 sec)

It works!

Limitations

WARNING: it doesn’t work with the database specified in query.
This work fine:

 USE PRODUCTION;
 UPDATE `ma_table` SET id=1 WHERE id =2;

This query will break the replication:

 USE PRODUCTION;
 UPDATE `PRODUCTION`.`ma_table` SET id=1 WHERE id =2;

=> database `PRODUCTION` does not exist on this server.

Real examples

Missing update

On master1:

master1 [(none)]>UPDATE `PRODUCTION`.`france` SET id=3 WHERE id =1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
master1 [(none)]> select * from `PRODUCTION`.`france`;
 +------+
 | id |
 +------+
 | 3 |
 +------+
 1 row in set (0.00 sec)

On slave:

slave [PRODUCTION_FR]> SELECT * FROM france;
 +------+
 | id |
 +------+
 | 1 |
 +------+
 1 row in set (0.00 sec)

In this case we missed the update.
it’s a real problem because the replication should crash, the slave is desynchronized with master1 and we didn’t know it.

Replication crash

On master1:

master1[(none)]> use PRODUCTION;
Database changed
master1 [PRODUCTION]> SELECT * FROM`PRODUCTION`.`france`;
 +------+
 | id |
 +------+
 | 3 |
 +------+
 1 row in set (0.00 sec)
master1 [PRODUCTION]>UPDATE `PRODUCTION`.`france` SET id=4 WHERE id =3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
master1 [PRODUCTION]> SELECT * FROM `PRODUCTION`.`france`;
 +------+
 | id |
 +------+
 | 4 |
 +------+
 1 row in set (0.01 sec)

On pmacli:

ScreenShot039

On slave:

slave [PRODUCTION_FR]> show slave 'PRODUCTION_FR' status\G
*************************** 1. row ***************************
...
Slave_IO_State: Waiting for master to send event
Last_SQL_Error: Error 'Table 'PRODUCTION.france' doesn't exist' on query. Default database: 'PRODUCTION_FR'. Query: 'UPDATE `PRODUCTION`.`france` SET id=4 WHERE id =3'
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2370966657
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
1 row in set (0.00 sec)

We got the error!

 


 

PhotoBox_NewLogo_jan07_1

Author: Aurélien LEQUOY
License: This article is under : ”’The GNU General Public License v3.0”’ http://opensource.org/licenses/GPL-3.0

MySQL Conference and Expo 2013 feelings (#perconalive)

I wasn’t at the MySQL Conference this year but it was very nice to follow this event from Paris.
Of course I didn’t feel the general atmosphere by visiting booths or met fabulous people.
But it was a great opportunity to offer you a live post about the conference with an external point of view.

Twitter, RSS feeds (yes Google, I still use RSS), Planet MySQL and infiltrators were my best friends during this crazy week.

I would like to summarize the major announcements and events occurs during this tenth edition.
 

Oracle at Percona Live!

 
Yes, Oracle was at Percona Live 2013 and it was for the best.
I invite you to watch this keynote from Tomas Ulin about Oracle’s Investment in MySQL, read this post from Sheeri and this one from Mikael Ronstrom.
Oracle promises a future for MySQL and I’m sure many of you were expecting this signal.

MySQL 5.7 and MySQL Applier for Hadoop were also announced during the conference.
MySQL Applier reveals a promising use case for the binary log API.
You can read this first look of MySQL 5.7 by Stewart Smith.
 

TokuDB and Tungsten Replicator become open source

 
TokuDB is now open source via a community edition! (An enterprise edition remains available)
The MySQL, MariaDB or Percona users can now freely use TokuDB.
And this engine deserves your attention, for more informations : http://www.tokutek.com/2013/04/announcing-tokudb-v7-open-source-and-more/

Tungsten Replicator is now 100% open source. You no longer have excuses to not use this tool.
Continuent was corporate contributor of the year through the MySQL community awards 2013.
 

SkySQL + MariaDB = Love (the community)

 
The next generation of open source database company was born, SkySQL merges with MariaDB Developers. This merge doesn’t affect the MariaDB Foundation, MariaDB will survive!
In the same time Wikipedia adopts MariaDB and shares his experience with the community.

Honestly, I’ve never really understand why SkySQL and MariaDB was two separate companies because the SkySQL’s message was confused.
From now, you can’t be surprised that SkySQL highlights MariaDB and it’s a good point because MariaDB is a great product.
This may affect the independence of SkySQL on MariaDB competitors but I’m convinced that people behind SkySQL could surprise you.

And the new SkySQL/MariaDB becomes a strong alternative to Oracle.
The ping pong between Oracle and MariaDB on their respective resources affected to MySQL/MariaDB development is also quite funny and interesting.

ishot-63BIjZ7CjCQAEt6pb.jpg-large

However, I think that MariaDB should stop criticizing Oracle and should focus and communicate more on its own features.
This kind of message is a perfect exemple of counterproductive communication :
(I know this comes from zdnet but reflects what MariaDB proclaims usually)

MariaDB deserves better, but this is only my opinion.
 

In the meantime…

 
.. you can pin on a map where you come from.
HP, Amazon, Continuent and Percona talks about the impact of MySQL and its future in the cloud.
- Brian Aker (HPCloud) asked Simone Brunozzi (AWS) : what is the engine of DynamoDB?
- Simone : we don’t disclose
- Brian : it’s MySQL!

Peter Zaitsev evokes the JaSON generation of developers.

LeapMotion announce a new shipping date, you will have to wait another 3 months.

Incredible small data stats from Facebook, again…

“the best answer of 99.9% database optimization questions is ‘it depends’”, really?

Some amazing pictures of a rather unusual booth appear on my twitter timeline.
And this post from Sheeri caught my attention, the comments too.
I believe that if someone is uncomfortable in a conference such as perconalive, there is a problem… (even if this affects only one person)
 

Slides and what’s next?

 
Slides from the conference are now available.
You can find these slides and much more on [Plus].
Next steps will be MySQL Connect 2013 and Percona Live London 2013 (hope to see you there)

Continue to follow me on Twitter or Facebook for the latest news about the MySQL Community.

And don’t forget to have fun…

Does MariaDB kill the magic query?!

I’m sure that many of you use the magic query from Shlomi.
This query retrieves the difference between two status values with a single query.
I’m really fan of this kind of query and about this query in particular. This query is very useful to retrieve an information without to have to store a middle result.

Now, I tried this query on a MariaDB 5.5 server and I had a surprise :

Magic_query

The result was a bit strange, with negative or null values.

I’ve just had these server for few hours in my hands and I had no more time to analyze the situation.
I assume that the subquery optimisations in MariaDB can be involve here but it’s just an assumption.

Does anyone encountered the same issue? (with MariaDB or other distro)

[Plus] readers choice 2012 : It’s time to vote!

Oh yes, 2012 was an incredible year for the MySQL Community!
That’s why I would like to change the rules this year and I would like to offer you a new survey for this [Plus] reader’s choice 2012.

Community users, bloggers and events made the whole community last year, tell us how you used this community?
It will only take 5 minutes of your precious time, votes will be closed Jan. 31.

Vote for what you used! (with your heart, again…)

What was your most useful blogs in 2012? (Two possible answers)

  • MySQL Performance Blog (Percona Team) (57%, 73 Votes)
  • The MariaDB Blog (MariaDB Team) (17%, 22 Votes)
  • SkySQL Blog (SkySQL Team) (13%, 17 Votes)
  • Xaprb Blog (Baron Schwartz) (9%, 12 Votes)
  • The Data Charmer (Giuseppe Maxia) (9%, 11 Votes)
  • Openark Blog (Shlomi Noach) (6%, 7 Votes)
  • The Scale Out Blog (Robert Hodges) (6%, 7 Votes)
  • Domas Mituzas's blog (5%, 6 Votes)
  • OpenLife.cc (Henrik Ingo) (4%, 5 Votes)
  • Pythian Blog (Pythian Team) (4%, 5 Votes)
  • Yoshinori Matsunobu's blog (4%, 5 Votes)
  • Dba Square (Maciej Dobrzanski & Piotr Biel) (4%, 5 Votes)
  • Johan Andersson's Cluster and HA Blog (3%, 4 Votes)
  • Chris on MySQL (Chris Calender) (3%, 4 Votes)
  • MySQL[Plus] (Cédric Peintre) (3%, 4 Votes)
  • Ulf Wendel's blog (2%, 3 Votes)
  • Hack MySQL (Daniel Nichter) (2%, 3 Votes)
  • MySQL Optimizer Team Blog (2%, 3 Votes)
  • Oracle's MySQL Blog (Oracle Team) (2%, 3 Votes)
  • MySQL Documents by Rick James (2%, 2 Votes)
  • Sergey Petrunia's blog (2%, 2 Votes)
  • LinuxJedi's /dev/null (Andrew Hutchings) (2%, 2 Votes)
  • Sheeri Dot Com (Sheeri K. Cabral) (2%, 2 Votes)
  • Karlsson on databases and stuff (Anders Karlsson) (2%, 2 Votes)
  • MySQL Fanboy (Mark Grennan) (1%, 1 Votes)
  • varokism (Stéphane Varoqui) (1%, 1 Votes)
  • MySQL Expert (Ronald Bradford) (1%, 1 Votes)
  • Roland Bouman's blog (1%, 1 Votes)
  • mySQL DBA (Dathan Pattishall) (1%, 1 Votes)
  • Mastering MySQL (Mark Leith) (1%, 1 Votes)
  • sqlhjalp (Keith Larson) (1%, 1 Votes)
  • mysqlboy (Andrew Moore) (0%, 0 Votes)
  • Andrew Morgan’s MySQL Cluster Database Blog (0%, 0 Votes)
  • Webyog blog (Webyog Team) (0%, 0 Votes)
  • Racker Hacker (Major Hayden) (0%, 0 Votes)
  • Todd's MySQL Blog (Todd Farmer) (0%, 0 Votes)

Total Voters: 127

Loading ... Loading ...

What was your most useful forum in 2012? (or exchange platform)

  • stackoverflow.com (41%, 38 Votes)
  • Twitter (18%, 17 Votes)
  • forums.mysql.com (13%, 12 Votes)
  • dba.stackexchange.com (10%, 9 Votes)
  • Facebook (10%, 9 Votes)
  • LinkedIn Groups (7%, 6 Votes)
  • Yahoo Answers (1%, 1 Votes)
  • dbforums.com/mysql (0%, 0 Votes)
  • Viadeo Groups (0%, 0 Votes)

Total Voters: 92

Loading ... Loading ...

What was the best MySQL event in 2012?

  • MySQL Conference & Expo (37%, 33 Votes)
  • Percona Live London (30%, 27 Votes)
  • FOSDEM (10%, 9 Votes)
  • Percona Live New York (8%, 7 Votes)
  • MySQL Connect (7%, 6 Votes)
  • Percona Live DC (3%, 3 Votes)
  • MySQL/NoSQL/Cloud Latin America conference (3%, 3 Votes)
  • OSCON (2%, 1 Votes)

Total Voters: 89

Loading ... Loading ...

What would you like to test in 2013? (Two possible answers)

  • Galera Replication (Percona Cluster or MaraDB Cluster) (49%, 60 Votes)
  • MySQL 5.6 (45%, 55 Votes)
  • MariaDB 10 (35%, 43 Votes)
  • Tungsten Replicator (13%, 16 Votes)
  • MySQL 5.5 (Oracle, Percona or MariaDB) (11%, 14 Votes)
  • NoSQL/NewSQL databases (8%, 10 Votes)
  • iPhone 6 (3%, 4 Votes)
  • NDB Cluster (2%, 2 Votes)
  • Other (Leave a comment) (2%, 2 Votes)

Total Voters: 123

Loading ... Loading ...

Have fun in 2013!

Vote for MySQL[plus] awards 2011 !

First of all, I wish you a happy new year.
Many things happened last year, it was really exciting to be involved in the MySQL ecosystem.
I hope this enthusiasm will be increased this year, up to you !

To start the year, I propose the MySQL[plus] Awards 2011
It will only take 5 minutes to fill out these polls.
Answer with your heart first and then with your experience with some of these tools or services.

Polls will be closed January 31, so, vote now !
For “other” answers, please,  let me a comment with details.

Don’t hesitate to submit proposal for tools or services in the comments.
And, please, share these polls !

 

Best MySQL GUI client Tool

  • SQLyog (47%, 85 Votes)
  • MySQL Workbench (20%, 36 Votes)
  • HeidiSQL (8%, 14 Votes)
  • Navicat for MySQL (7%, 12 Votes)
  • MySQL Administrator / Query browser (6%, 10 Votes)
  • Other (5%, 9 Votes)
  • phpMyAdmin (4%, 8 Votes)
  • SQLWave (1%, 1 Votes)
  • SIDU DB Web GUI (1%, 1 Votes)
  • EMS SQL Manager for MySQL (1%, 1 Votes)
  • Sequel Pro (1%, 1 Votes)
  • sqldeveloper (1%, 1 Votes)
  • dbForge Studio (1%, 1 Votes)
  • MyQuery (1%, 1 Votes)
  • DBTools Manager (0%, 0 Votes)
  • SQL Maestro MySQL Tools (0%, 0 Votes)
  • Toad for MySQL (0%, 0 Votes)

Total Voters: 181

Loading ... Loading ...

 

Best MySQL Monitoring Tool

  • MONyog (35%, 135 Votes)
  • MySQL Enterprise Monitor (29%, 113 Votes)
  • Nagios (13%, 52 Votes)
  • Cacti (10%, 38 Votes)
  • Other (6%, 25 Votes)
  • Zabbix (5%, 19 Votes)
  • Ganglia (2%, 4 Votes)

Total Voters: 386

Loading ... Loading ...

 

Best MySQL Backup Tool (two possible answers)

  • Xtrabackup (46%, 151 Votes)
  • mysqldump (29%, 94 Votes)
  • MySQL Enterprise Backup (28%, 91 Votes)
  • mydumper (9%, 30 Votes)
  • LVM Backup (FS snapshot) (6%, 19 Votes)
  • mylvmbackup (5%, 17 Votes)
  • ZRM Enterprise (5%, 15 Votes)
  • ZRM Community (5%, 15 Votes)
  • Other (5%, 15 Votes)
  • Cold backup (2%, 6 Votes)
  • r1soft CDP for MySQL (1%, 2 Votes)

Total Voters: 329

Loading ... Loading ...

 

Best MySQL Replication/Cluster Tools (two possible answers)

  • MySQL Replication (37%, 183 Votes)
  • Tungsten Replicator (21%, 105 Votes)
  • MySQL NDB Cluster (17%, 83 Votes)
  • ShoonerSQL (16%, 76 Votes)
  • Galera Replication (13%, 66 Votes)
  • DRBD (9%, 45 Votes)
  • Other (2%, 11 Votes)
  • ScaleDB (2%, 9 Votes)

Total Voters: 490

Loading ... Loading ...

 

Best MySQL community Tool

  • Percona toolkit (37%, 117 Votes)
  • MySQL Sandbox (28%, 89 Votes)
  • MHA for MySQL (mysql-master-ha) (14%, 45 Votes)
  • Other (6%, 18 Votes)
  • Xtrabackup Manager (5%, 15 Votes)
  • mysqltuner (3%, 11 Votes)
  • Innotop (3%, 10 Votes)
  • mycheckpoint (2%, 5 Votes)
  • openark kit (1%, 3 Votes)
  • MMM (1%, 3 Votes)
  • Common schema (0%, 2 Votes)

Total Voters: 318

Loading ... Loading ...

 

Best MySQL Support Service

  • SkySQL (38%, 130 Votes)
  • Percona (28%, 96 Votes)
  • Oracle (26%, 90 Votes)
  • Other (4%, 15 Votes)
  • FromDual (3%, 9 Votes)
  • Pythian (1%, 4 Votes)
  • Blue Gecko (0%, 1 Votes)
  • PalominoDB (0%, 0 Votes)

Total Voters: 345

Loading ... Loading ...

 

Best MySQL based distribution

  • Oracle MySQL (36%, 122 Votes)
  • MariaDB (33%, 114 Votes)
  • Percona server (27%, 91 Votes)
  • Drizzle (3%, 11 Votes)
  • Other (1%, 4 Votes)
  • TokuDB (0%, 0 Votes)
  • InfiniDB (0%, 0 Votes)

Total Voters: 342

Loading ... Loading ...

 

Best NoSQL solution (two possible answers)

  • Memcached (46%, 120 Votes)
  • Hadoop / HBase (28%, 72 Votes)
  • MongoDB (25%, 65 Votes)
  • Cassandra (10%, 27 Votes)
  • Other (10%, 27 Votes)
  • HandlerSocket (9%, 24 Votes)
  • CouchDB (6%, 16 Votes)
  • Redis (5%, 13 Votes)
  • Tarantool (4%, 11 Votes)
  • Riak (3%, 7 Votes)
  • Amazon SimpleDB (2%, 5 Votes)
  • Tokyo Cabinet / Tyrant (1%, 3 Votes)

Total Voters: 259

Loading ... Loading ...

 

Best MySQL 5.6 improvement

  • Performances (27%, 77 Votes)
  • Replication (26%, 74 Votes)
  • Fulltext (16%, 47 Votes)
  • memcached API (13%, 36 Votes)
  • Backup/Restore buffer pool (8%, 22 Votes)
  • Partitioning (6%, 16 Votes)
  • Other (4%, 11 Votes)

Total Voters: 285

Loading ... Loading ...

 

Happy 2012 !
Cédric

This article is obviously not sponsored !
(MySQL is a trademark of Oracle Corporation and/or its affiliates)