MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
Find a file
Marko Mäkelä fee2e7b89f MDEV-36024: Redesign innodb_encrypt_log=ON
The innodb_encrypt_log=ON subformat of FORMAT_10_8 is inefficient,
because a new encryption or decryption context is being set up for
every log record payload snippet.

An in-place conversion between the old and new innodb_encrypt_log=ON
format is technically possible, because all mini-transactions will consume
exactly the same amount of storage. No such conversion has been
implemented, though. There is some overhead with respect to the
unencrypted format (innodb_encrypt_log=OFF): At the end of each
mini-transaction, right before the CRC-32C, additional 8 bytes will be
reserved for a nonce (really, log_sys.get_flushed_lsn()), which forms
a part of an initialization vector.

log_t::FORMAT_ENC_11: The new format identifier, a UTF-8 encoding of
🗝 U+1F5DD OLD KEY (encryption). In this format, everything except the
types and lengths of log records will be encrypted. Thus, unlike in
FORMAT_10_8, also page identifiers and FILE_ records will be encrypted.
The initialization vector (IV) consists of the 8-byte nonce as well as
the type and length byte(s) of the first record of the mini-transaction.
Page identifiers will no longer form any part of the IV.

The old log_t::FORMAT_ENC_10_8 (innodb_encrypt_log=ON) will be supported
both by mariadb-backup and by crash recovery. Downgrade from the new
format will only be possible if the new server has been running or
restarted with innodb_encrypt_log=OFF. If innodb_encrypt_log=ON,
only the new log_t::FORMAT_ENC_11 will be written.

log_t::is_recoverable(): A new predicate, which holds for all 3
formats.

recv_sys_t::tmp_buf: A heap-allocated buffer for decrypting a
mini-transaction, or for making the wrap-around of a memory-mapped
log file contiguous.

log_decrypt_mtr(): Decrypt a mini-transaction in recv_sys.tmp_buf.
Theoretically, when reading the log via pread() rather than a read-only
memory mapping, we could modify the contents of log_sys.buf in place.
If we did that, we would have to re-read the last log block into
log_sys.buf before resuming writes, because otherwise that block could be
re-written as a mix of old decrypted data and new encrypted data, which
would cause a subsequent recovery failure unless the log checkpoint had
been advanced beyond this point.

log_decrypt_legacy(): Decrypt a log_t::FORMAT_ENC_10_8 record snippet
on stack. Replaces recv_buf::copy_if_needed().

recv_sys_t::get_backup_parser(): Return a recv_sys_t::parser, that is,
a pointer to an instantiation of parse_mmap or parse_mtr for the current
log format.

recv_sys_t::parse_mtr(), recv_sys_t::parse_mmap(): Add a parameter
template<uint32_t> for the current log_sys.format.

recv_sys_t::parse(): Split into parse_tail(), rewind_prepare(), and
rewind_apply(). Add a parameter template<uint32_t format> to specialize
for log_sys.format at compilation time.

recv_sys_t::parse_tail(): Operate on pointers to a contiguous
mini-transaction data. Add a parameter template<bool ENC_10_8>
for special handling of the old innodb_encrypt_log=ON format.
The recv_buf::get_buf() is inlined here.

log_parse_length(): Parse the length of a log record, for in-place
encryption or decryption.

log_crypt: Encrypt or decrypt a mini-transaction in place in the
new innodb_encrypt_log=ON format.

log_t::append(): Invoke encryption_ctx_update() in MY_AES_BLOCK_SIZE
(16-byte) blocks and scatter/gather shorter data blocks as needed.

log_t::finish(), Handle the last (possibly incomplete) block as a
special case, with ENCRYPTION_FLAG_NOPAD.

mtr_t::encrypt(): Use log_crypt instead of the old log_encrypt_buf().

recv_buf::crc32c(): Add a parameter for the initial CRC-32C value.

recv_sys_t::rewind(): Operate on pointers to a contiguous buffer.
Add a parameter for rlen. Adjust recv_sys.offset here, instead of
the caller parse_tail(), which has template parameters.

log_parse_start(): Validate the CRC-32C of a mini-transaction.
This has been split from the recv_sys_t::parse() template to
reduce code duplication.
2025-08-15 16:04:32 +03:00
.github Merge 10.6 into 10.9 2023-05-19 15:11:06 +03:00
BUILD Merge branch '10.6' into 10.11 2024-04-26 08:02:49 +02:00
client MDEV-36701 command line client doesn't check session_track information (fix) 2025-08-07 11:34:17 +10:00
cmake MDEV-36542: apply clang -Werror=uninitialized to catch dubious initializations 2025-07-29 13:15:02 +10:00
dbug Merge 10.6 into 10.8 2023-02-10 13:43:53 +02:00
debian MDEV-21654 binary library file pam_mariadb_mtr.so installed among test data files 2025-07-17 09:18:18 +02:00
Docs Merge 10.4 into 10.5 2022-09-26 13:34:38 +03:00
extra MDEV-36024: Redesign innodb_encrypt_log=ON 2025-08-15 16:04:32 +03:00
include MDEV-36542: remove _lint macro which is unused 2025-07-29 13:15:02 +10:00
libmariadb@77bdf5a572 Connector/C 3.3.17 2025-07-25 12:28:30 +02:00
libmysqld MDEV-36234: Add innodb_linux_aio 2025-06-23 13:51:52 +03:00
libservices Merge 10.6 into 10.11 2024-02-08 15:04:46 +02:00
man Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
mysql-test MDEV-36024: Redesign innodb_encrypt_log=ON 2025-08-15 16:04:32 +03:00
mysys Merge branch '10.6' into 10.11 2025-07-28 18:06:31 +02:00
mysys_ssl MDEV-35838 libressl support differences in CRYPTO_set_mem_functions 2025-01-14 12:13:22 +11:00
plugin MDEV-21654 binary library file pam_mariadb_mtr.so installed among test data files 2025-07-17 09:18:18 +02:00
randgen/conf Group commit for maria engine. 2010-02-12 15:12:28 +02:00
scripts Merge branch '10.6' into '10.11' 2025-08-14 22:10:45 +02:00
sql MDEV-37136 : sql/wsrep_allowlist_service.cc:40:27: runtime error: member call on null pointer of type 'Wsrep_schema' 2025-08-14 22:12:32 +02:00
sql-bench Updated sql-bench to run with PostgreSQL 14.9 2023-09-09 15:14:45 +03:00
sql-common Merge branch '10.6' into 10.11 2025-01-30 11:55:13 +01:00
storage MDEV-36024: Redesign innodb_encrypt_log=ON 2025-08-15 16:04:32 +03:00
strings Merge branch '10.6' into 10.11 2025-07-28 18:06:31 +02:00
support-files MDEV-36738: mariadb@.service incorrectly changing pam ownership in mariadb-install-db 2025-06-25 20:54:22 +10:00
tests Merge branch '10.6' into 10.11 2025-04-26 10:47:03 +02:00
tpool Merge branch '10.6' into 10.11 2025-07-28 18:06:31 +02:00
unittest Merge 10.6 into 10.11 2025-08-08 14:15:04 +03:00
vio Merge branch '10.6' into 10.11 2025-05-26 16:59:32 +02:00
win Merge branch '10.6' into 10.11 2025-07-28 18:06:31 +02:00
wsrep-lib@14ce8cab76 galera: wsrep-lib submodule update 2025-08-13 17:53:56 +02:00
zlib Merge branch 'merge-zlib' (1.3.1) into 10.4 2024-04-26 13:50:03 +02:00
.clang-format Remove duplicate key "Language" from .clang-format 2024-04-17 16:52:37 +02:00
.gitattributes Merge branch '10.5' into 10.6 2022-02-03 17:01:31 +01:00
.gitignore Merge 10.6 into 10.11 2025-05-21 07:36:35 +03:00
.gitlab-ci.yml Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
.gitmodules Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
appveyor.yml Fix appveyor config 2025-04-18 19:53:55 +02:00
BUILD-CMAKE Minor spelling fixes in code comments, docs and output 2018-01-12 16:49:02 +02:00
CMakeLists.txt MDEV-37052: JSON_TABLE stack overflow handling errors 2025-07-05 10:44:07 +10:00
config.h.cmake MDEV-36839: Revert MDEV-7409 2025-07-22 10:05:24 -06:00
configure.cmake Merge branch '10.6' into 10.11 2024-10-29 15:24:38 +01:00
CONTRIBUTING.md Remove mention of Freenode 2021-09-22 07:15:08 +02:00
COPYING Update FSF Address 2019-05-11 21:29:06 +03:00
CREDITS Update sponsors 2024-08-12 09:32:30 +01:00
INSTALL-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
INSTALL-WIN-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
KNOWN_BUGS.txt Changed some MySQL names in messages to MariaDB 2018-12-09 20:49:05 +02:00
README.md Update README for branch choice 2024-05-29 13:49:32 +01:00
THIRDPARTY Merge branch '10.6' into 10.11 2024-02-01 18:36:14 +01:00
VERSION bump the VERSION 2025-08-06 17:22:00 -04:00

Code status:

  • Appveyor CI status ci.appveyor.com

MariaDB: The innovative open source database

MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.

MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.

MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.

MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.

A description of the MariaDB project and a manual can be found at:

https://mariadb.org

https://mariadb.com/kb/en/

https://mariadb.com/kb/en/mariadb-vs-mysql-features/

https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/

https://mariadb.com/kb/en/new-and-old-releases/

Getting the code, building it and testing it

Refer to the following guide: https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/ which outlines how to build the source code correctly and run the MariaDB testing framework, as well as which branch to target for your contributions.

Help

More help is available from the Maria Discuss mailing list https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ and MariaDB's Zulip instance, https://mariadb.zulipchat.com/

Licensing


MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.

License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.


Bug Reports

Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org

For reporting security vulnerabilities see: https://mariadb.org/about/security-policy/

The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server