The MariaDB project is pleased to announce the immediate availability of MariaDB 10.0.6. This is a Beta release. See the Release Notes and Changelog for detailed information on this release and the What is MariaDB 10.0? page in the AskMonty Knowledgebase for general information about the MariaDB 10.0 series.

Download MariaDB 10.0.6

Release Notes Changelog What is MariaDB 10.0?

Also see MariaDB 10.0 Beta launched – an important milestone.

Upcoming MariaDB Webinar

SkySQL will be hosting a webinar with Colin Charles, the chief evangelist of MariaDB. He will go through the features of MariaDB 10.0. It will be held on Thursday November 21 at 11:00 CET:

More info at: http://www.skysql.com/why-skysql/webinars/mariadb-100-overview

Ivan Zoratti, CTO of SkySQL also recently recorded a couple of additional webinars that you may find interesting:

Thanks, and enjoy MariaDB!

There has been a lot of discussion about MariaDB 10.0 throughout the whole year. When will it be released, what will it include, what is the focus on MariaDB going forward, etc? My feeling is that people have in the past few months started to understand the value of MariaDB 10.0. There is a good group of people and companies that have been trying out and using the MariaDB 10.0 alpha releases and providing us with excellent feedback.

MariaDB 10.0 is a massive release with loads of new features which ease several pain points that MariaDB and MySQL users have run into over the years.

The highlights of MariaDB 10.0 can be divided into the following areas:

  • Replication enhancements
  • Storage engines
  • Optimizer enhancements
  • Administration improvements
  • Other important new features
  • Merged features and functionality from MySQL 5.6

I’ll go through each of these areas briefly to give an overview on what they include.

REPLICATION

Global Transaction Id – In replication, MariaDB 10.0 introduces a new building block, Global Transaction Id(GTID). The implementation is different from the corresponding functionality in MySQL 5.6 and the main goals of the implementation have been 1) make it easy to set up replication with GTID and easily provision new slaves and 2) support other replication features such as Multi-Source Replication (see below). The introduction of GTID also makes the slaves crash safe, which they haven’t been before.

Multi-Source Replication – With Multi-source replication, contributed by Lixun Peng and Taobao you can replicate data from many masters to one slave. This is very useful when you have sharded your data and want a complete copy of it on one server. For this very reason Tumblr, the microblogging site, nowadays part of Yahoo! is already using this feature. Check out the story.

Parallel Slave (sponsored by Google) - Finally, MariaDB 10.0 solves a long lasting replication challenge that even exists in MySQL 5.6. Until now, with enough writes (INSERT/UPDATE) happening on a master the slaves would not be able to keep up at the same pace and they would lag behind. With the parallel slave feature in 10.0 this challenge is now gone. The slaves will adapt to the speed of the master and apply binlog events in parallel. Transactions will be applied in parallel if they were executed in parallel on the master. Unlike MySQL 5.6, the transactions can concern the same database or even the same table.

STORAGE ENGINES

Many storage engine developers have been actively engaging with the developers of MariaDB lately and as a result there are several new storage engines in MariaDB 10.0 (in alphabetical order):

  • Cassandra Storage Engine: Combine data from Cassandra with your data in MariaDB, read and write Cassandra data, and connect many MariaDB servers to one Cassandra ring, creating a high-availability cluster.
  • Connect Storage Engine: Use Connect to handle data in files or behind ODBC as if that data was part of the data stored in MariaDB. Developed and contributed by Olivier Bertrand.
  • Sequence Storage Engine: Create numerical sequences that are stored in memory and can be used in your queries. For some use case examples check this article.
  • Spider Storage Engine: A storage engine with built in sharding capabilities. Developed and contributed by Kentoku Shiba.
  • TokuDB: A storage engine designed for high performance write-intensive workloads. Developed and contributed by Tokutek.

OPTIMIZER

Engine Independent Persistent Statistics – Statistics are now provided separately from storage engines. Before, statistics were supplied by the storage engines themselves and the quality of the statistics were usually quite poor. Also the storage engine interface puts a lot of restrictions on them. Statistics are used by the query optimizer to choose the best execution plan for each SQL statement. Better statistics results in better execution plans and end users will experience faster results in general.

Histograms – To improve query optimization, MariaDB 10.0 introduces histograms. Histograms can be collected for both indexed and non indexed columns. Histogram data allows the query optimizer to make better query plan choices for complex multi-table queries.

Optimizations for EXISTS subqueries – the optimizer will convert EXISTS subqueries to IN, when possible. This conversion allows the usage of semi-join optimizations or Materialization optimization for certain classes of EXISTS subqueries.

ADMIN IMPROVEMENTS

10.0 includes a set of features that make the life of DBAs easier:

  • Roles – This is a big thing! Long awaited roles are introduced in MariaDB. DBAs can now create roles with certain permissions and assign users to the roles. Thanks to Google Summer of Code and developer Vicențiu Ciorbaru!
  • SHOW EXPLAIN – get the query plan of a running statement.
  • EXPLAIN in the Slow Query Log – write EXPLAIN output into the slow query log.
  • EXPLAIN INSERT/UPDATE/DELETE – EXPLAIN for INSERT/UPDATE/DELETE has been added in the same way as in MySQL 5.6, but the implementation is different.
  • SHOW PLUGIN SONAME – list all plugins despite them being installed or not.
  • SHUTDOWN – Finally use SQL to SHUTDOWN the server
  • KILL QUERY ID – Kill a specific query with its id, not the thread id (solves a nasty race condition).
  • Per-connection memory usage – List each connection with amount of memory used

OTHER IMPORTANT NEW FEATURES

There are also a bunch of new interesting features that don’t fall into the above categories:

New REGEXP – The switch to the modern regexp library PCRE together with the new SQL
functions REGEXP_REPLACE, REGEXP_SUBSTR, REGEXP_INSTR improve MariaDB text processing capabilities drastically. Developed during Google Summer of Code by Sudheera Palihakkara.

DELETE … RETURNING – Many users asked for the possibility for the DELETE statement to return the deleted rows in a resultset. It’s now possible by adding RETURNING at the end of the statement.

ALTER … IF [NOT] EXISTS – In your ALTER statements you can now add the IF or IF NOT keywords to e.g. add a column or create an index if it does or does not exist from before.

Named Dynamic Columns – In earlier versions of MariaDB Dynamic Columns, which allows for a different number of columns in each row, columns could only be referred to by number. Now the columns can be referred to by name.

Multiple GET_LOCK() – The use of many user level locks is now supported. Developed and contributed by Konstantin Osipov.

MERGED FROM MYSQL 5.6

Selected pieces of MySQL 5.6 have been merged into MariaDB 10.0. The main ones are:

  • InnoDB – Most InnoDB enhancements are now in MariaDB 10.0.
  • Performance Schema – The full new performance schema with all the new event filtering, instrumentation, and other goodies.
  • Online ALTER – Do many of your schema changes without interrupting the system
  • Filesort optimization for queries using the ORDER BY … LIMIT optimization – A useful optimization for showing only a few rows of a bigger result set.
  • Privileges for CREATE TEMPORARY TABLES
  • Character set extensions
  • GET DIAGNOSTICS
  • TO_BASE64(), FROM_BASE64

Obviously there exist many smaller enhancements in MariaDB 10.0 and other things merged from 5.6, but the above overview of new features and merges includes the biggest ones.

As you can see, the community has been very active in contributing to 10.0 and it’s absolutely fantastic to be able to have all these new features pulled together into MariaDB and having them available to all MariaDB 10.0 users by default. A big thank you to all contributors!

Go give it a try and download the MariaDB 10.0.5 Beta!

Download MariaDB 10.0.5

Release Notes Changelog What is MariaDB 10.0?

If you’re excited about MariaDB 10.0 and its features or MariaDB in general and have a great MariaDB story to share, about some interesting use of MariaDB or some specific feature you love, please let us know.

PS. If you are attending Percona Live in London make sure you come and celebrate the launch of the MariaDB 10.0 beta with us over a drink or two on Mon 11th Nov. More info here.

 

Reposted from Monty Says.

I recently read some comments that we at the MariaDB Foundation have not been very open about what we are doing.

We are very sorry about this. The problem is not that we are secret about what we are doing, the problem is that not many of us working at the MariaDB Foundation are very active bloggers.

I will try to address this concern by starting a monthly blog about the MariaDB development that MariaDB Foundation employees are doing. This together with Simon Phipps’ state of the sea lion blog, which is published here, should hopefully give everyone a better idea of what we are doing.

At the MariaDB Foundation we are now 4 people working full time on code, documentation, and spreading MariaDB. Here are the things we have done since the Foundation was formed in December 2012:

Major development efforts based on code from the community:

  • MDEV-4568 Port Percona response time distribution as audit plugin
  • MDEV-4911 Add KILL query id, and add query id information to process list
  • MDEV-4684 Enhancement request: –init-command support for mysqlslap

Major new development efforts:

  • MDEV-4702 Reduce usage of LOCK_open
  • MDEV-4011 Per thread memory usage
  • MDEV-4902 sql_yacc.yy incompatible with bison 3
  • MDEV-4950 mysql_upgrade fails with disabled InnoDB (a bug that is not fixed in MySQL)
  • MDEV-21 LGPL C client library
  • LGPL Java client library.
  • Some work on a new LGPL ODBC driver for MySQL and MariaDB.
  • Better error messages (the error code in an error message now has descriptive text)
  • Faster connect (lots of small fixes).
  • MDEV-3941 CREATE TABLE xxx IF NOT EXISTS should not block if table exists.

The MariaDB Foundation has also done a lot of work on the merge of MySQL 5.6 to MariaDB 10.0. The most notable features done by the Foundation are:

  • All InnoDB changes
  • All performance schema changes
  • Cleaned up the HANDLER interfaces (to make life easier for storage engine writers).
  • TRANSACTION READ ONLY | READ WRITE
  • MySQL-5.6 TIME/TIMESTAMP/DATETIME data types with fractional seconds
  • MySQL-5.6 temporal literals
  • utf16le character set
  • TO_BASE64 and FROM_BASE64 SQL functions
  • MySQL-5.6 collation customization improvements (in progress)

Note that the above is not a complete list of what is in MariaDB 10.0!

We are working with external entities and contributors to get features into MariaDB. Some of these have required a lot of work on the MariaDB Foundation side:

  • CONNECT storage engine
    • Porting to various operating systems (*BSD, Linux flavors, Solaris)
    • Porting to unixODBC
    • Fixing compiler warnings
    • Testing and writing mtr tests
    • Checking, reporting and fixing valgrind warnings
    • Reviewing the author’s code
    • Adding MySQL/MariaDB security support (FILE privilege and secure_file_priv)
    • Adding ConnectSE support in embedded server
    • Globalization: making ConnectSE support multiple MariaDB character sets
    • Discussing many aspects of better integration of ConnectSE into MariaDB with the author.
    • Packaging (RPMs, DEBs, MSI)
  • TokuDB storage engine
    • Review of code
    • Some small integration changes.
  • Parallel slave
  • Multi source replication
    • Worked closely with the original author to extend the code from a working proof of concept to production level code.
  • MDEV-4438 Spider storage engine
    • Continuously working with Kentoku
  • MDEV-4425 REGEXP enhancements (a Google Summer of Code project, in progress)
    • Mentoring Sudheera Palihakkara (the student)
    • Student’s code reviews (for RLIKE and RLIKE_REPLACE)
    • Code enhancements proposals
    • CMake related enhancements
    • Wrote RLIKE_SUBSTR and RLIKE_INSTR functions
  • Added support for –crash-script in mysqld_safe.

A lot of basic system maintenance:

  • Reported a lot of bugs (this is not a full list):
    • MDEV-4489 Replication of big5, cp932, gbk, sjis strings makes wrong values on slave
    • MDEV-4634 Crash in CONVERT_TZ
    • MDEV-4635 Crash in UNIX_TIMESTAMP(STR_TO_DATE(’2020′,’%Y’))
    • MDEV-4651 Crash in my_decimal2decimal in a ORDER BY query
    • MDEV-4652 Wrong result for CONCAT(GREATEST(TIME(’00:00:01′),TIME(’00:00:00′))
    • MDEV-4653 Wrong result for CONVERT_TZ(TIME(’00:00:00′),’+00:00′,’+7:5′)
    • MDEV-4654 Wrong warning for CAST(TIME(’10:20:30′) AS DATE) + INTERVAL 1 DAY
    • MDEV-4655 Difference in how GREATEST and COALESCE process arguments
    • MDEV-4714 Wrong TIME value from a long string
    • MDEV-4724 MAKETIME does not preserve microseconds
    • MDEV-4838 Wrong metadata for DATE_ADD(‘string’, INVERVAL)
    • MDEV-4841 “Wrong character set of ADDTIME() and DATE_ADD()”
    • MDEV-4842 STR_TO_DATE does not work with UCS2/UTF16/UTF32
    • MDEV-4843 Wrong data type for TIMESTAMP(’2001-01-01′,’10:10:10′)
    • MDEV-4844 Redundant warning in SELECT TIME(’00:00:00.’)
    • MDEV-4848 Wrong metadata or column type for LEAST(1.0,’10′)
    • MDEV-4850 MATCH uses a wrong fulltext index with mismatching collation
    • MDEV-4857 Wrong result of HOUR(’1 00:00:00′)
    • MDEV-4858 Wrong error message for a huge unsigned value inserted into a TIME column
    • MDEV-4859 Wrong value and data type of “SELECT MAX(time_column) + 1 FROM t1″
    • MDEV-4861 TIME/DATETIME arithmetics does not preserve INTERVAL precision
    • MDEV-4862 Wrong result of MAKETIME(0, 0, 59.9)
    • MDEV-4863 COALESCE(time) returns wrong results in numeric context
    • MDEV-4868 Length of CURRENT_TIME is too long
    • MDEV-4869 Wrong result of MAKETIME(0, 0, -0.1)
    • MDEV-4870 Wrong values of CASE, COALESCE, IFNULL on a combination of different temporal types
    • MDEV-4871 Temporal literals do not accept nanoseconds
    • MDEV-4872 Inserting a huge number into a TIME column produces a wrong result
    • MDEV-4898 Too many warnings when inserting a bad value into a TIMESTAMP column
    • MDEV-4900 Bad value inserted into a TIME field on truncation
  • Fixed a LOT of bugs (the following is not a full list):
    • MDEV-4489 Replication of big5, cp932, gbk, sjis strings makes wrong values on slave
    • MDEV-4512 Valgrind warnings in my_long10_to_str_8bit on INTERVAL and DATE_ADD with incorrect types
    • MDEV-4518 Server crashes in is_white_space when it’s run with query cache…
    • MDEV-4634 Crash in CONVERT_TZ
    • MDEV-4635 Crash in UNIX_TIMESTAMP(STR_TO_DATE(’2020′,’%Y’))
    • MDEV-4639 my_datetime_to_str: Conditional jump or move depends on uninitialized value
    • MDEV-4651 Crash in my_decimal2decimal in a ORDER BY query
    • MDEV-4652 Wrong result for CONCAT(GREATEST(TIME(’00:00:01′),TIME(’00:00:00′))
    • MDEV-4653 Wrong result for CONVERT_TZ(TIME(’00:00:00′),’+00:00′,’+7:5′)
    • MDEV-4724 MAKETIME does not preserve microseconds
    • MDEV-4804 Date comparing false result
    • MDEV-4819 Upgrade from MySQL 5.6 does not work
    • MDEV-4841 “Wrong character set of ADDTIME() and DATE_ADD()”
    • MDEV-4843 Wrong data type for TIMESTAMP(’2001-01-01′,’10:10:10′)
    • MDEV-4863 COALESCE(time) returns wrong results in numeric context
    • MDEV-4871 Temporal literals do not accept nanoseconds
    • Fixed MySQL bug #69861 LAST_INSERT_ID is replicated incorrectly if replication filters are used.
    • Fixed issues with partitions and create temporary table SELECT
    • If one declared several continue handler for the same condition on different level of stored procedures, all of them where executed. Now we only execute the innermost of them (the most relevant).
    • Don’t abort InnoDB if one can’t allocate resources for AIO
    • Added some fixes that should make MyISAM & Aria REPAIR work with more than 4G records.
    • MDEV-4352 LOAD DATA was not multi-source safe
    • MDEV-4394 Sporadic failures in multi_source tests
    • MDEV-4033 Unable to use slave’s temporary directory /tmp – Can’t create/write to file ‘/tmp/SQL_LOAD-’ (Errcode: 17 “File exists”)
    • Increase default value of max_binlog_cache_size and max_binlog_stmt_cache_size to ulonglong_max.
    • MDEV-4319 mysqlbinlog output ambiguous escaping (patch by Ian Good)
    • OPTION is now a valid identifier (not a reserved word)
    • Fixed issue with LOCK TABLE + ALTER TABLE ENABLE KEYS + SHOW commands.
    • MDEV-628 Querying myisam table metadata may corrupt the table.
    • Replace with an auto_increment primary key and another unique key didn’t replicate correctly with REPLACE.
    • BUG#51763 Can’t delete rows from MEMORY table with HASH key.
    • MDEV-389 Server crash inserting record on a temporary table after truncating it.
    • Fixed crashing bug in GROUP_CONCAT with ROLLUP
    • MDEV-4013 Password length in replication setup
    • MDEV-4009 main.delayed sporadically fails with “query ‘REPLACE DELAYED t1 VALUES (5)’ failed: 1317: Query execution was interrupted”
    • Fixed CREATE TABLE IF EXIST generates warnings instead of errors
    • Removed lock wait timeout warning when using CREATE TABLE IF EXISTS
  • Code cleanups and code rewrites.
  • Continued work to ensure that MariaDB works on many operating systems.
    • Did lots of small fixes for Solaris.
  • Review of code from the community.
  • Removed valgrind and compiler warnings.
  • Added new test cases.
  • QA & benchmarking.

Talked about MariaDB and Open Source/Free Software at a lot of conferences:

  • Percona Live London 2012
  • SkySQL Roadshow, Stuttgart
  • Vista developer Conference, Riga
  • PHP Conference, Pasila, Finland
  • SkySQL Roadshow, Amsterdam
  • Percona Live, Santa Clara
  • SkySQL Roadshow, London
  • MySQL Meetup, NYC
  • Suomen Arkistointi Seminaari, Mikkeli, Finland
  • SkySQL Roadshow, Berlin
  • Ali Baba Conference, Hangzhou, China
  • OSCON, Portland
  • Debconf, Switzerland
  • Froscon, St Augustin, Germany
  • Haaga-Helia Talks, Finland
  • IDCEE Conference, Ukraina
  • Latinux, Brazil & Peru
  • Highload Conference, Moscow
  • Foscon, Gotenburg, Sweden
  • Percona Live 2013, London

Other things people from the MariaDB foundation have done:

  • Created +200 and updated +3000 articles in the MariaDB Knowledge Base.
  • Visited a lot of companies to talk about the MariaDB Foundation.
  • Worked closely with OS distributions to get MariaDB accepted as a standard part of their distributions. Partly thanks to the MariaDB Foundation, the following distributions now have MariaDB packages:
    • GNU/Linux KDu
    • Mageia
    • Gentoo
    • openSUSE
    • Slackware
    • Arch Linux
    • ALTLinux
    • MariaDB Debian Live Images
    • Parabola GNU/Linux
    • TurboLinux
    • The Chakra Project
    • Fedora
    • Red Hat Enterprise Linux
    • FreeBSD
    • OpenBSD
    • Debian now has MariaDB packages in ‘unstable’.
    • For a full list and to see which distributions are replacing MySQL with MariaDB, see this page.
  • Updated SHOW AUTHORS and SHOW CONTRIBUTORS to give more merit to active contributors and sponsors.

We are very thankful to the MariaDB Foundation members and supporters that have made this work possible!

The current members are:

If you want the MariaDB foundation to do even more work like the above, you should ensure that your company becomes member in the MariaDB Foundation! You can also sponsor the foundation as a private person!