Learn about the newest features available in MariaDB Community Server 11.2 (GA) and 11.3 (RC).
We are pleased to announce the general availability (GA) of MariaDB Community Server 11.2 and the first release candidate (RC) of MariaDB Community Server 11.3.
MariaDB Community Server 11.2 now GA
MariaDB Community Server 11.2 adds the new built-in Online Schema Change, non blocking ALTER TABLE commands for all storage engines. Our software engineer Nikita Malyavin explains more details in his blog post. This new release series also includes other changes like new JSON functions JSON_KEY_VALUE, JSON_ARRAY_INTERSECT, JSON_ARRAY_INTERSECT, enhancements to the encryption function, simplified imports of InnoDB table spaces and more.
Read this blog for a full list of all new features in the 11.2 release series. The MariaDB Community Server 11.2 release series started with Preview Releases, then an RC release in September 2023. MariaDB Community Server 11.1.2 marks the first GA release in this series.
MariaDB Community Server 11.3 now RC
Our next release series, MariaDB Community Server 11.3 provides a new security privilege, enhancements to SQL functions, InnoDB and replication. It also removes some features which have been deprecated in the now EOLed release series.
NEW FOR THE PRIVILEGE SYSTEM
New Privilege “SHOW CREATE ROUTINE”
Before MariaDB Community Server 11.3 a user only could see the definition of a routine, a stored feature or function, when:
- SELECT privilege exists for the mysql.procs table
- The user is the definer of the Stored Procedure
Otherwise, a user only sees NULL for the definition of the routine.
With some use cases, a user should be provided access to the definition even if the user was not the one who has defined the routine. It is certainly not good practice to give the user read access to the mysql.procs table, which otherwise would give the user the possibility of accessing all the stored routine’s definitions.
We’ve solved this use case with MariaDB Community Server 11.3 and the new privilege SHOW CREATE ROUTINE
. It has been introduced to enable any user with this privilege to view the definition of a stored routine.
Example without privilege SHOW CREATE ROUTINE
:
MariaDB [test]> show grants; +--------------------------------------------------+ | Grants for user1@% | +--------------------------------------------------+ | GRANT USAGE ON *.* TO `user1`@`%` | | GRANT SELECT, EXECUTE ON `test`.* TO `user1`@`%` | +--------------------------------------------------+ MariaDB [test]> show create procedure myProc \G *************************** 1. row *************************** Procedure: myProc sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Create Procedure: NULL character_set_client: utf8mb3 collation_connection: utf8mb3_general_ci Database Collation: utf8mb4_general_ci
Example with the new privilege SHOW CREATE ROUTINE
:
MariaDB [test]> show grants; +-----------------------------------------------------------------------+ | Grants for user1@% | +-----------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `user1`@`%` | | GRANT SELECT, EXECUTE, SHOW CREATE ROUTINE ON `test`.* TO `user1`@`%` | +-----------------------------------------------------------------------+ MariaDB [test]> show create procedure myProc \G *************************** 1. row *************************** Procedure: myProc sql_mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `myProc`() BEGIN SELECT "My Definiton of a Stored Procedure"; END character_set_client: utf8mb3 collation_connection: utf8mb3_general_ci Database Collation: utf8mb4_general_ci
SHOW CREATE ROUTINE
privilege can be granted globally, per schema, or on individual routines.
SQL FUNCTIONS
Time zone option for DATE_FORMAT
The new options %Z and %z can be used for the format string of the function
DATE_FORMAT(date, format)
for adding time zone information to the date string.
- %Z Time zone abbreviation
- %z Numeric time zone +hhmm or -hhmm presenting the hour and minute offset from UTC
Example:
SELECT DATE_FORMAT(NOW(), '%W %d %M %Y %H:%i:%s %Z %z'); +--------------------------------------------------+ | DATE_FORMAT(NOW(), '%W %d %M %Y %H:%i:%s %Z %z') | +--------------------------------------------------+ | Tuesday 21 November 2023 13:28:34 EST -0500 | +--------------------------------------------------+
SQL function for key derivation
The SQL function KDF () is a key derivation function, useful for generating encryption keys from a user provided password or a passphrase. It can be used to generate encryption keys for encryption functions such as AES_ENCRYPT.
KDF(key_str, salt [, {info | iterations} [, kdf_name [, width ]]])
- kdf_name is “hkdf” or “pbkdf2_hmac”
- width (in bits) can be any number divisible by 8
- info is a non-secret parameter of the hkdf method, it allows to generate different encryption keys for different purposes from the same secret password
- iterations is a positive numeric parameter of the pbkdf2_hmac method, larger values make the password more difficult to brute-force.
Example:
select hex(kdf('foo', 'bar', 'info', 'hkdf')); +----------------------------------------+ | hex(kdf('foo', 'bar', 'info', 'hkdf')) | +----------------------------------------+ | 710583081D40A55F0B573A76E02D8975 | +----------------------------------------+ insert into tbl values (aes_encrypt(@secret_data, kdf("Passw0rd", "NaCl", "info", 'hkdf'), "iv"));
STORAGE ENGINE INNODB
Shrink temporary InnoDB tablespaces without restart
After MariaDB Community Server 11.2 added InnoDB System Tablespace Reclaiming, MariaDB Community Server 11.3 added a new option to shrink temporary InnoDB tablespaces.
Before MariaDB Community Server 11.3 the only way to reclaim disk space used by temporary InnoDB tablespaces was to restart the server, as temporary tablespaces are deleted when you stop the server and are recreated with their configured size.
Restarting the server is not always possible, while you still need to reclaim disk space. MariaDB Community Server 11.3 can solve this problem by executing
SET GLOBAL innodb_truncate_temporary_tablespace_now=1;
This triggers to reclaim the disk space, but existing tables will not be removed.
Example:
CREATE TEMPORARY TABLE t1(f1 INT NOT NULL, f2 INT NOT NULL)ENGINE=InnoDB; INSERT INTO t1 SELECT seq, seq FROM seq_1_to_65536; DROP TABLE t1; SELECT NAME, FILE_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME="innodb_temp orary"; +------------------+-----------+ | NAME | FILE_SIZE | +------------------+-----------+ | innodb_temporary | 79691776 | +------------------+-----------+ SET GLOBAL INNODB_TRUNCATE_TEMPORARY_TABLESPACE_NOW= 1; SELECT NAME, FILE_SIZE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE NAME="innodb_temp orary"; +------------------+-----------+ | NAME | FILE_SIZE | +------------------+-----------+ | innodb_temporary | 12582912 | +------------------+-----------+
REPLICATION
New “SQL_BEFORE_GTIDS” and “SQL_AFTER_GTIDS” for START REPLICA UNTIL
The new options SQL_BEFORE_GTIDS
and SQL_AFTER_GTIDS
for START REPLICA UNTIL
allow user control of whether the replica stops before or after a provided GTID state. Its syntax is:
START SLAVE UNTIL (SQL_BEFORE_GTIDS|SQL_AFTER_GTIDS)=”<gtid_list>”
When providing SQL_BEFORE_GTIDS=”<gtid_list>”
, for each domain specified in the gtid_list, the replica will execute transactions up to the GTID found, and immediately stop processing events in that domain without executing the transaction of the specified GTID.
Once all domains have stopped, the replica will stop. Events originating from domains that are not specified in the list are not replicated.
START SLAVE UNTIL SQL_AFTER_GTIDS=”<gtid_list>”
is an alias to the default behavior of START SLAVE UNTIL master_gtid_pos=”<gtid_list>”
, the known behavior before MariaDB Community Server 11.3.
The replica will execute transactions originating from domain ids provided in the list, and will stop once all transactions provided in the UNTIL list have all been executed.
Example:
=========
If a primary server has a binary log consisting of the following GTIDs:
0-1-1
1-1-1
0-1-2
1-1-2
0-1-3
1-1-3
Given a fresh replica (i.e. one with an empty GTID position, @@gtid_slave_pos=”) is started with SQL_BEFORE_GTIDS, i.e.
START SLAVE UNTIL SQL_BEFORE_GTIDS=”1-1-2”
the resulting gtid_slave_pos of the replica will be “1-1-1” because the replica will execute only events from domain 1. When it sees the transaction with sequence number 2 it immediately stops without executing it.
If the replica is started with SQL_AFTER_GTIDS
, i.e.
START SLAVE UNTIL SQL_AFTER_GTIDS=”1-1-2”
the resulting gtid_slave_pos of the replica will be “1-1-2” because the replica will execute only events from domain 1. But in this case it stops after executing the provided GTID.
MORE FOR DEVOPS AND DBAS
Process list now includes number of rows sent by the statement
The new value SENT_ROWS
in the information schema table PROCESSLIST
includes the number of rows sent by the current statement, shown in the processlist.
- Selects with functions show the total number of rows sent by the main statement and all functions
- Stored procedures show the total number of rows sent per stored procedure statement
INSERT RETURNING
andDELETE RETURNING
show the total number of rows sent for the returning data set
Example:
select * from processlist\G *************************** 1. row *************************** ... *************************** 2. row *************************** ID: 6 USER: root HOST: localhost DB: test COMMAND: Query TIME: 1 STATE: Sending data INFO: select * from t1 TIME_MS: 1340.406 STAGE: 0 MAX_STAGE: 0 PROGRESS: 0.000 MEMORY_USED: 89856 MAX_MEMORY_USED: 392544 EXAMINED_ROWS: 0 SENT_ROWS: 3895737 QUERY_ID: 436 INFO_BINARY: select * from t1 TID: 100
REMOVED AND DEPRECATED OPTIONS
Removed Features
System Variables date_format, datetime_format, time_format, wsrep_causal_reads have been removed.
Deprecated Options
- Innobackupex mode for mariabackup is now deprecated and will be removed in a further release
- Non-default values of old_mode are now deprecated and will be removed in a further release
- LOCK_ALTER_TABLE_COPY
- ZERO_DATE_TIME_CAST
- NO_DUP_KEY_WARNINGS_WITH_IGNORE
- NO_PROGRESS_INFO
- IGNORE_INDEX_ONLY_FOR_JOIN
- COMPAT_5_1_CHECKSUM
Resources
MariaDB Community Server 11.2 RC (blog)
ALTER TABLE is now universally online
Download MariaDB Community Server 11.2 GA or 11.3 RC at mariadb.com/downloads