Congratulations to all of the 2012 Community Contributor Award Winners!

I just wanted to take a moment and say congratulations to all of the 2012 Community Contributor Award Winners!

The usual suspects, Baron, Sarah, Gerardo, and Sheeri, each won, and deservedly so. All 4 contribute a great deal to the MySQL Community and ecosystem, and it is very much appreciated. 🙂

However, I was especially happy to hear that James Day was also a winner (a name everyone might not be so familiar with). But, having worked with James for 5 years, I really couldn’t say it better than Henrik Ingo already did (in his initial post of this year’s winners), so let me quote him:

“James was nominated for ‘MySQL advocacy and swimming upstream to keep people informed about bugs and other issues.’ When looking into James’ activities in the community, the panel first didn’t find much evidence to support an award. For instance, unlike most winners, he is not a frequent blogger on Planet MySQL. But when digging deeper it became clear that James’ instead is a very active commenter on everyone else’s blogs, contributing in depth additional information to the community dialogue. James therefore is an excellent example of the kind of helpful support person that tirelessly helps everyone he meets in their use of MySQL.”

There is not a single bug comment from James that I don’t appreciate, and he gladly shares his in-depth knowledge, and always has.

So this was definitely great to see, and that award, as were all, were well deserved!

Congratulations, James, Baron, Sarah, Gerardo, and Sheeri!


SkySQL Raises $4 Million in Series A Round Funding

I am very pleased to say that earlier today, SkySQL announced it has raised $4 Million in Series A Round Funding.

Let me post the main part of the press release here:

SAN JOSE – April 18, 2012SkySQL, the first choice in affordable database solutions for the MySQL® and MariaDB® databases in the enterprise and the cloud, today announces that the company has raised $4 million in Series A funding from a number of investors, including OnCorps, an elite peer-based community of veteran technology investors and advisors committed to bringing better, cost-disruptive technologies into the mainstream. Also funding the round are European investors including Finnish Industry Investment Ltd., Spintop Ventures and Open Ocean Capital.

SkySQL will primarily use the investment to fund growth in its new product development, including adding critical positions. This is the company’s most recent move in expanding beyond a MySQL and MariaDB services-only company into a fully-fledged database products and services provider. SkySQL made its debut in October 2010 and has been funded to date with seed money from OnCorps, as well as Open Ocean Capital. Today, SkySQL is currently operating in 13 countries.

“The SkySQL strategy aligns well with OnCorps’s technology leadership vision,” said Bob Suh of OnCorps. “SkySQL will capitalize on the growing database and cloud services market. We are delighted and look forward to working with the SkySQL team to contribute to their continued success.”

“This investment will let us focus on ramping up development and efforts behind both enterprise and cloud database products that address a very real need in the marketplace,” said Ulf Sandberg, chief executive officer of SkySQL. “We also plan to build on our existing MySQL and MariaDB services offering, which offers customers unrivaled support, consulting and training.”

You can read the full press release here:

Very exciting times! 🙂


Welcome, hastexo and PalominoDB, as SkySQL Partners

Last week was full of exciting news for all things MySQL.

However, SkySQL also had some great individual news in that it announced 2 new partners:

I just wanted to take a moment and officially welcome both to the SkySQL fold!

PalominoDB and hastexo, it’s great to be partnered with you!

And we’re looking forward to all the exciting things the future has to hold! 🙂

For those interested, you can read more about each partnership here:

SkySQL & hastexo Partnership Press Release
SkySQL & PalominoDB Partnership Press Release


MariaDB 5.5 is now GA

Well, as you or may not have heard, MariaDB 5.5 (5.5.23) was declared GA last week!

It was only about 6-ish weeks ago that MariaDB 5.5 had been released as alpha, so the fact it’s already GA is excellent news for all MariaDB users (and MySQL 5.5 users looking to migrate).

Some of the 5.5 enhancements include:

  • Significantly more efficient thread pool, comparable in functionality to the closed source feature in MySQL Enterprise.
  • Non-blocking client API Library (MWL#192)
  • @@skip_replication option (MWL#234)
  • SphinxSE updated to version 2.0.4.
  • “extended keys” support for XtraDB and InnoDB
  • New INSTALL SONAME statement
  • New LIMIT ROWS EXAMINED optimization.
  • mysql_real_connect() Changes
    In MySQL, and in MariaDB versions before 5.5.21, mysql_real_connect() removes from the MYSQL object any options set with mysql_option() when it fails. Beginning with MariaDB 5.5.21, options are preserved by a failing mysql_real_connect(); use mysql_close(), as normal, to clear them.
    This only has effect if the MYSQL object is reused after a mysql_real_connect() failure (which is unusual). No real-life incompatibilities are expected from this change (it is unlikely that an application would rely on options being automatically removed between connection attempts).

  • The variables replicate_do_*, replicate_ignore_*, and replicate_wild_* have been made dynamic, so they can be changed without requiring a server restart. See Dynamic Replication Variables for more information.
  • Updates to performance schema tables are not stored in binary log and thus not replicated to slaves. This is to ensure that monitoring of the master will not cause a slower performance on all slaves. This also fixes a crash on the slaves.

Here is the official “What is MariaDB 5.5” page:

Also of interest:

Release Notes
General Info

And as always, if you’d like full support for MariaDB, just contact us at SkySQL.

Hope this helps.


SkySQL’s Updated Training Schedule

This is just an update to let you know that the new SkySQL Training Schedule is now available online.

The schedule extends as far as September 2012.

There are courses in the Belgium, Germany, France, the United Kingdom, Ireland, the Netherlands, Sweden, and and the United States.

And some of the course titles include:

  • Administering a MySQL® Database
  • Developing Applications with the MySQL® Database
  • Performance Tuning for the MySQL® Database
  • High Availability for the MySQL® Database
  • Administering MySQL® Cluster

You can read the full schedule here:|page_3


MariaDB 5.3 is now GA

This is another, in-case-you-missed-it, but it is definitely worth mentioning again:

MariaDB 5.3 is now GA

So, if you’re using MariaDB 5.1 or 5.2, I’d definitely recommend upgrading to the new MariaDB 5.3.

Also, if you’re a Windows user using MySQL 5.1, I’d highly consider making the switch to MariaDB 5.3 due to all of the Windows-specific improvements in it.

MariaDB 5.3 Enhancements:

  • Subquery optimizations
  • Semi-join subquery optimizations
  • Non-semi-join optimizations
  • Subquery Cache
  • Subquery Optimizations Map
  • Optimizations for derived tables and views
  • Disk access optimization
  • Join optimizations
  • Index Merge improvements
  • Optimizer control
  • NoSQL-style interfaces
  • Group commit for the binary log
  • Replication and binary logging enhancements
  • Microsecond support for NOW() and timestamp, time, and datetime columns
  • Windows performance improvements
  • And a number of other general improvements

MariaDB 5.3 Windows-Specific Performance improvements include:

  • Backported Windows performance patches from MySQL 5.5
  • Asynchronous IO in XtraDB is redesigned and is now faster, due to the use of IO completion ports
  • Additional durability option for XtraDB : innodb_flush_method can now be O_DSYNC, like on Unixes. (The effect of using this option is that the log file is opened with FILE_FLAG_WRITETHROUGH, and FlushFileBuffers() is not done. This may improve speed in write-heavy scenarios.)
  • A new Windows MSI installer
  • Includes a GUI-tool, HeidiSQL

All of the above, and more are documented in further detail here:

You can download it here:

(And just for reference, if running MariaDB you should probably keep your eye on the new MariaDB 5.5 too (5.5.20 was alpha, 5.5.21 is now beta), benchmarks here).

Hope this helps.

Building MariaDB 5.1 on Windows

Recently, I found myself needing MariaDB 5.1.60 for Windows for some testing purposes. Therefore, I needed to build it from source. I ended up using what I’d call a “blend” of the commands listed in this “how-to” and the readme file INSTALL-WIN-SOURCE, so I thought I’d post those steps.

  1. Download 5.1.60 MariaDB source from here.
  2. cd C:\mariadb-5.1
  3. win\configure.js
  4. cmake .
  5. VS: File -> Open -> Solution -> MySql.sln
  6. VS: Build -> Build Solution
  7. VS: Right-click “PACKAGE” -> Build (in “Solution Explorer” View)

That’s it.

Let’s fire it up:

MariaDB> select version();
| version()            |
| 5.1.60-MariaDB-debug |

MariaDB> show global variables like 'innodb_version';
| Variable_name  | Value       |
| innodb_version | 1.0.17-13.0 |

MariaDB> show engines;
| Engine     | Support | Comment		   ...
| CSV        | YES     | CSV storage engine	   ...
| InnoDB     | DEFAULT | Percona-XtraDB, Supports t...
| PBXT       | YES     | High performance, multi-ve...
| MARIA      | YES     | Crash-safe tables with MyI...
| MyISAM     | YES     | Default engine as of MySQL...
| FEDERATED  | YES     | FederatedX pluggable stora...
| MRG_MYISAM | YES     | Collection of identical My...
| MEMORY     | YES     | Hash based, stored in memo...


For reference, here are my full outputs:

C:\Users\Chris>cd ..\..\mariadb-5.1


C:\mariadb-5.1>cmake .
-- Check for working C compiler: cl
-- Check for working C compiler: cl -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: cl
-- Check for working CXX compiler: cl -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
build CSV as static library (libcsv.lib)
build FEDERATEDX as static library (libfederatedx.lib)
build HEAP as static library (libheap_s.lib)
build MARIA as static library (libmaria_s.lib)
build MYISAM as static library (libmyisam_s.lib)
build MYISAMMRG as static library (libmyisammrg_s.lib)
build PBXT as static library (libpbxt_s.lib)
build XTRADB as static library (libxtradb.lib)
build ARCHIVE as DLL (ha_archive.dll)
build BLACKHOLE as DLL (ha_blackhole.dll)
build EXAMPLE as DLL (ha_example.dll)
build FEDERATED as DLL (ha_federated.dll)
build INNODB_PLUGIN as DLL (ha_innodb_plugin.dll)
-- Configuring done
-- Generating done
-- Build files have been written to: C:/mariadb-5.1

Open Visual Studio -> File -> Open -> Project/Solution -> Select C:\mariadb-5.1.60\MySql.sln

Build Solution Output:

========== Build: 79 succeeded, 0 failed, 2 up-to-date, 2 skipped ==========

Package Build Output:

1>------ Build started: Project: PACKAGE, Configuration: Debug Win32 ------
1>Performing Post-Build Event...
1>CPack: Create package using NSIS
1>CPack: Install projects
1>CPack: - Install project: MySql
1>CPack: -   Install component: Unspecified
1>CPack: -   Install component: headers
1>CPack: -   Install component: mysqltest
1>CPack: -   Install component: runtime
1>CPack: -   Install component: scripts
1>CPack: -   Install component: sqlbench
1>CPack: Compress package
1>CPack: Finalize package
1>CPack: Package C:/mariadb-5.1/MariaDB-5.1.60-win32.exe generated.
1>Build log was saved at "file://c:\mariadb-5.1\PACKAGE.dir\Debug\BuildLog.htm"
1>PACKAGE - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 81 up-to-date, 0 skipped ==========


Related Build Links:


Upgrading from MySQL to MariaDB is Easy as 1,2,3

This post is just to show how easy it is to upgrade or migrate from MySQL to MariaDB.

I should begin by stating this article is geared more towards MySQL 5.1 and prior, as MySQL 5.5 users will likely want to wait until MariaDB 5.5 is available (which I believe will be in the near future).

As you may or may not know, there are actually 3 flavors of MariaDB currently: 5.1, 5.2, and 5.3.

All three are based off of the 5.1 MySQL code base, just 5.2 and 5.3 have further improvements over 5.1. So, that’s why I say this upgrade is “easy” and there’s no need to be afraid, especially for 5.1 users. But even if you were a 5.0 user, the upgrade to MySQL 5.1 compared to MariaDB 5.1 would not be any different. So, why not give it a go?

You’ll have all of the benefits from using MySQL, but also all of the added improvements from MariaDB and XtraDB+.

I like the fact you can “ease” into it. For instance, if running MySQL 5.1.60 (the most current 5.1) on Linux with the InnoDB Plugin, you can simply move to MariaDB 5.1.60 using the InnoDB Plugin1.

Then basically everything is the same, but now you have access to the new features. For instance, you’d now have the Aria, XtraDB, PBXT, and FederatedX storage engines. You could easily upgrade your InnoDB Plugin to use the XtraDB+ Plugin instead once you have MariaDB installed (basically it’s the same InnoDB but with a number of extra performance-related improvements). It’s all up to you once you make the switch.

I should note that if you are running Windows, then I suggest you migrate straight to MariaDB 5.2, as there are numerous Windows-specific improvements starting with MariaDB 5.2 (and even more Windows performance enhancements in 5.3). (I would imagine that once upgrading, one would want to benefit from the 5.2 improvements anyways, and perhaps benchmark 5.3 in the meantime.)

As for all of the specific details, let me first quote the MariaDB Compatibility page from their manual, just for reference:

“For all practical purposes, MariaDB is a binary drop in replacement of the same MySQL version (for example MySQL 5.1 -> MariaDB 5.1, MariaDB 5.2 & MariaDB 5.3 are compatible. MySQL 5.5 will be compatible with MariaDB 5.5).”

The above page goes on in-depth about the compatibility, drop-in binary replacement upgrade, how to replace an rpm, and even the couple incompatibilities (from MySQL 5.1 to MariaDB 5.1, 5.2, and 5.3). Everything is well-documented, and the above is a great reference for anyone planning (or even considering) to upgrade.

As I mentioned, there are currently 3 series of MariaDB: 5.1, 5.2, and 5.3. The latest 5.1 is 5.1.60 (and it is GA), the latest 5.2 is 5.2.10 (also GA), and the latest 5.3 is 5.3.3 (which is “Release Candidate” status – so close to GA).

You can download MariaDB from here (there are links to all 3 series):

And the improvements are too many to list, but let me post some:


o New storage engines: Aria, XtraDB, PBXT, FederatedX 2
o Speed Improvements
o New Extensions & New Features
o Upgrade and Testing improvements


o New storage engines: OQGRAPH and SphinxSE
o Virtual columns
o Extended User Statistics
o Segmented MyISAM key cache
o Pluggable Authentication
o Group commit for the Aria engine


o Subquery optimizations
o Semi-join subquery optimizations
o Non-semi-join optimizations
o Subquery Cache
o Optimizations for derived tables and views
o Disk access optimization
o Join optimizations
o Index Merge improvements
o Optimizer control
o Microsecond support
o Windows performance improvements

And for the full list of improvements in each series, please refer to the following links for 5.1, 5.2, and 5.3, respectively:

Thus far, everything sounds like an improvement. But as far as I can tell, if you take a great product and add even more enhancements on top of it, it’s hard to go wrong.

If I were pressed to come up with a “con”, I would say there might be a slight delay (up to a month) from the latest MySQL available version compared to the latest MariaDB version. However, this may not be a “con” anyway. After all, merging monthly gives the MySQL code a couple weeks to mature, basically letting others run into any new bugs before it’s merged into MariaDB. In fact, it reminds me of the old “Quarterly Service Packs” versus the “Monthly Rapid Updates” MySQL used to provide. Therefore, if one were to apply that reasoning, it could be said that you might be less likely to encounter a regression bug in MariaDB (therefore overall stability could be improved).

And if you need support for MariaDB, just contact SkySQL, as we fully support it:


1: In MariaDB, if you use the built-in InnoDB, then you are using XtraDB+. Otherwise, if you enable the InnoDB Plugin, then you are enabling the standard InnoDB plugin. Note that XtraDB+ is an improvement over XtraDB as it contains even further enhancements.

2: FederatedX is a huge improvement over Federated – a “must have” if you use Federated.

Tracking Server Variables, Documentation, Manuals, Changelogs for MySQL, InnoDB, MariaDB, and XtraDB

I find myself constantly looking up server variables (and manuals and changelogs) for MySQL, MariaDB, and XtraDB, which versions they are in, and so forth. So I finally created a couple pages which contain the links to all of these various bits of information across the various flavors of MySQL.

I’ve been using them every day, so I thought some others might want to bookmark these as well.

I’ve created the following:

o Changelogs
o Documentation
o Server Variables
o InnoDB Plugin Versions

The Changelogs page contains links for MySQL 3.23 up through 5.6, MariaDB 5.1 – 5.3, XtraDB 5.1 – 5.5, Xtrabackup 1.3 – 1.6, Connector/ODBC, Connector/.NET, Connector/J, Connector/C++, Connector/MXJ, and MySQL Proxy.

The Documentation page contains links for the MySQL manuals 3.23-5.6, InnoDB Plugin 1.0 – 1.1, MariaDB 5.1 – 5.3, XtraDB 5.1 – 5.3, and Xtrabackup 1.6.

The Server Variables page contains the links for the MySQL Server variables for all versions, the server variable cross-reference chart, all InnoDB startup variables, and new MariaDB options.

And lastly, the InnoDB Plugin Versions (which I did mention a couple weeks ago) contains all InnoDB Plugin version information, such as which InnoDB plugin is included with which MySQL release, as well as links to changelogs, and other relevant information.

If you find yourself wishing there were some other links added, just post me a comment and I’ll try to get it added asap.


Dealing with Assertion failure in file fut0lst.ic : == FIL_NULL || addr.boffset >= FIL_PAGE_DATA

I recently wrote an article on dealing with an assertion failure in log/log0recv.c, specifically !page || (ibool)!!page_is_comp(page) == dict_table_is_comp(index->table).

I mention it because this occurred after a system outage, and I just encountered another system outage (either HDD power outage or some other serious HDD event), with a completely different assertion failure and error message. Similar to the one above, it’s also kind of obscure, so I wanted to post this so people searching for it will find this.

For reference, the first outage assertion failure was this:

InnoDB: Assertion failure in thread 139838283589376 in file 
log/log0recv.c line 1094
InnoDB: Failing assertion: !page || (ibool)!!page_is_comp(page) == 

Here is the new assertion failure:

111201 16:45:00 InnoDB: Assertion failure in thread 4500 in 
file fut0lst.ic line 83
InnoDB: Failing assertion: == FIL_NULL || addr.boffset >= 

As you can see, they are completely different, yet both due to similar, catastrophic events:

In fact, there are a number of relevant/useful snippets from this error log (in case you see one or more of these):

InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Warning: a page in the doublewrite buffer is not within space
InnoDB: bounds; space id 0 page number 2248, page 22 in doublewrite buf.
InnoDB: Warning: a page in the doublewrite buffer is not within space
InnoDB: bounds; space id 0 page number 1775, page 31 in doublewrite buf.
111201 16:45:00 InnoDB: ERROR: We were only able to scan the log up to
InnoDB: 670800896, but a checkpoint was at 670801309.
InnoDB: It is possible that the database is now corrupt!
111201 16:45:00 InnoDB: Error: page 7 log sequence number 924466223
InnoDB: is in the future! Current system log sequence number 670801309.
111201 16:45:00 InnoDB: Assertion failure in thread 4500 in file 
fut0lst.ic line 83
InnoDB: Failing assertion: == FIL_NULL || addr.boffset
111201 16:45:00 - mysqld got exception 0xc0000005 ;
000000013F6A4C6F mysqld.exe!my_osmaperr()
000000013F69B9A0 mysqld.exe!my_osmaperr()
000000013F4727D6 mysqld.exe!?ha_initialize_handlerton@@
000000013F46C172 mysqld.exe!?plugin_lock_by_name@@
000000013F4713E9 mysqld.exe!?plugin_init@@YAHPEAHPEAPEADH@Z()
000000013F45BDA7 mysqld.exe!handle_shutdown()
000000013F45C91A mysqld.exe!?win_main@@YAHHPEAPEAD@Z()
000000013F45CD90 mysqld.exe!?mysql_service@@YAHPEAX@Z()
000000013F45D0A3 mysqld.exe!?mysqld_main@@YAHHPEAPEAD@Z()
000000013F7FBB27 mysqld.exe!my_mb_ctype_mb()
00000000777F652D kernel32.dll!BaseThreadInitThunk()
0000000077A2C521 ntdll.dll!RtlUserThreadStart()

As you can see, the corruption was severe … so severe that InnoDB wouldn’t even start with innodb_force_recovery set to 6!

As discussed in the previous post, setting innodb_doublewrite=1, innodb_flush_log_at_trx_commit=1, sync_binlog=1, and having a battery backed cache can be the best bets against such issues.

However, I will say that in this case, innodb_flush_log_at_trx_commit=1 and innodb_doublewrite=1 were both set, and binary logging had been disabled, leaving only the battery backed cache to be desired.

Luckily, this was a test environment (and recovery from a backup was possible). Otherwise, using the InnoDB Recovery Tool would be necessary, which can be an undertaking.

Morals of the story: take regular backups (as always) and invest in a battery backed cache. 🙂