0% found this document useful (0 votes)
150 views48 pages

CLT 2018 Mariadb 10 2

The document discusses new features in MariaDB 10.2 including window functions, storage engine updates, and history. Window functions allow calculations across query rows like ranking and aggregation. Storage engines were updated including InnoDB adopting features from MySQL 5.7. MariaDB 10.2 continues to evolve with new releases providing fixes and improvements.

Uploaded by

Oli Sennhauser
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
150 views48 pages

CLT 2018 Mariadb 10 2

The document discusses new features in MariaDB 10.2 including window functions, storage engine updates, and history. Window functions allow calculations across query rows like ranking and aggregation. Storage engines were updated including InnoDB adopting features from MySQL 5.7. MariaDB 10.2 continues to evolve with new releases providing fixes and improvements.

Uploaded by

Oli Sennhauser
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

www.fromdual.

com

MariaDB 10.2
New Features

Chemnitzer Linux-Tage 2018

Oli Sennhauser
Senior MySQL Consultant at FromDual GmbH

https://www.fromdual.com/presentations

1 / 48
About FromDual GmbH www.fromdual.com

Training

on-site
Consulting

remote-DBA

Enterprise
Support
2 / 48
Contents www.fromdual.com

MariaDB 10.2 – New Features



History

New Features for Devs

New Features for Ops

Outlook to MariaDB 10.3

3 / 48
Now we are in the mess... www.fromdual.com

4 / 48
Branches and Forks www.fromdual.com

● MariaDB and MySQL are Open Source (GPL v2)


● This means everybody is allowed to DiY
● → Branches and Forks
5.1 2008

Branch (“Drop-in-Replacement”)

MariaDB 5.5 MySQL


10.0, 2014 2010 5.6, 2013
10.1, 2015
5.7, 2015
10.2, 2017
10.3, 2018 Fork (“Compatible”) 8.0, 2018

● Who uses a MariaDB/MySQL in here?


● Chaos will happen! :-(
● See Sybase ASE vs. MicroSoft SQL Server (1995(v6.0)-2005)
● Examples: Replication, Protocol X, SE: MariaDB CS, etc.,
Window Functions, Virtual Columns, JSON, CTE, ...
5 / 48
MariaDB and Linux Distros www.fromdual.com

● Redhat/CentOS:
● 6 → MySQL 5.1,
● 7 → MariaDB 5.5
● Ubuntu:
● 14.04 → MySQL 5.5,
● 16.04 → MySQL 5.7,
● 18.04 → MySQL 5.7 (MariaDB 10.1)
● Debian:
● 8 → MySQL 5.5,
● 9 → MariaDB 10.1
● SuSE SLE / OpenSuSE:
● 11 SP2/3 → MySQL 5.1,
● 12 → MariaDB 10.0
● Leap 42.3 → MariaDB 10.0, Leap 15.0, → MariaDB 10.2 Tumbleweed →
MariaDB 10.2
6 / 48
MariaDB History www.fromdual.com

● 5.1 … 5.5
● New Storage Engines: Aria, XtraDB, PBXT, Federated-X, OQGRAPH
● Plug-ins (Authentication, Thread Pool)

Optimizer improvements
● Virtual Columns
● 10.0
● Parallel Replication, GTID, Multi Source Replication
● Storage Engines: Cassandra, CONNECT, Spider, TokuDB, Sequence

Mroonga (CJK) FTS
● Roles, Audit Plug-in
● 10.1

Galera ready by default
● Table, Tablespace, Redo Log, Binary Log encryption
● MariaDB Column Store

7 / 48
MariaDB 10.2 History www.fromdual.com

● MariaDB 10.2.14 Stable: Mar/Apr 2018


● MariaDB 10.2.13 Stable: 13 Feb 2018
● MariaDB 10.2.12 Stable: 4 Jan 2018
● MariaDB 10.2.11 Stable: 28 Nov 2017
MariaDB 10.2.10 Stable: 31 Oct 2017
Rule of thumb:

MariaDB 10.2.9 Stable: 27 Sep 2017


Wait for about

MariaDB 10.2.8 Stable: 18 Aug 2017


½ year...

● MariaDB 10.2.7 Stable: 12 Jul 2017


● MariaDB 10.2.6 Stable: 23 May 2017
● MariaDB 10.2.5 RC : 5 Apr 2017
● MariaDB 10.2.4 RC : 17 Feb 2017
● MariaDB 10.2.3 Beta : 24 Dec 2016
● MariaDB 10.2.2 Beta : 27 Sep 2016
● MariaDB 10.2.1 Alpha : 4 Jul 2016
● MariaDB 10.2.0 Alpha : 18 Apr 2016

8 / 48
Recent MariaDB 10.2? www.fromdual.com

MariaDB apt-get install software-properties-common


Repository: apt-key adv --recv-keys --keyserver \
hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] \
http://mirrors.n-ix.net/mariadb/repo/10.2/ubuntu \
xenial main'

apt update
apt install mariadb-server

● MariaDB DEB/RPM Packages


● MariaDB binary tar-ball
● Supported architectures
● 32 and 64-bit Linux, 32- and 64-bit Windows, POWER8: ppc64 and ppc64le,
(ARM not by MariaDB!)
● MariaDB 10.2 is the current major stable version. It will be supported
until May 2022. ᄃ
9 / 48
InnoDB Storage Engine www.fromdual.com

● InnoDB from MySQL 5.7 ported


● Before XtraDB 5.6 from Percona
● On disk format is identical to XtraDB, so no upgrade problem is
expected? → test carefully! (possibly dump/restore)
● Most InnoDB 5.7 features should be available
● Variables changes
● new, deprecated, removed, ignored, changed defaults
● XtraDB specific variables are ignored
● Check before upgrade, test upgrade!
● InnoDB Spatial Index support (GIS)
● Persistent AUTO_INCREMENT fix
● Crash recovery reporting, startup/shutdown more robust.

10 / 48
Other Storage Engines I www.fromdual.com

● Aria
● aria_recover → aria_recover_options = 
BACKUP,QUICK
● TokuDB
● Percona TokuDB, ACID, Fractal Trees, heavy write load
● Own package, updated to newer release
● CONNECT
● Updated to newer release
● Zip Files Tables support added
● JDBC Table Type support added
● MongoDB support added MONGO table type

11 / 48
Other Storage Engines II www.fromdual.com

● MongoDB
● Beta support added
● Bases on CONNECT SE
● 4 Drivers: MongoDB C, MongoDB Java, MongoDB JDBC, JSON table
● MyRocks / RocksDB / MariaRocks
● From Facebook, LSM-tree database, for Flash, I/O and space efficient
● Alpha SE added
● Galera
● Updated to (25.)3.23
● SST method mariabackup
● Mroonga CJK FTS
● Updated to newer release
● Split into separate package

12 / 48
Window Functions www.fromdual.com

● What is it?
● Buzzwords: Reporting, DWH, OLAP, Cube, Business
Intelligence, Analytics, Big Data
● SQL:2003 – SQL:2011
● MariaDB 10.2 does not support full standard yet
● Seems to be compatible with MySQL
● window_function(expression) OVER
( PARTITION BY ... ORDER BY ...) 
● Window Functions are computed after all WHERE,
GROUP BY and HAVING clauses, right before
ORDER BY
13 / 48
Available Window Functions www.fromdual.com

● Ranking, Bucketing
● DENSE_RANK, NTILE, NTH_VALUE, PERCENTILE_CONT, 
PERCENTILE_DISC, PERCENT_RANK, RANK, ROW_NUMBER
● References other rows/data
● LAG, LAST_VALUE, LEAD
● Statistics
● CUME_DIST, MEDIAN
● Aggregate Functions to be used as Window Functions:
● AVG, BIT_AND, BIT_OR, BIT_XOR, COUNT, SUM
● MariaDB 10.2 also supports Window Frames
● { RANGE | ROWS } BETWEEN frame_start AND frame_end
frame = {value PRECEDING | CURRENT ROW | value FOLLOWING}
● MariaDB Column Store seems to support more functions!

14 / 48
Window Functions Example www.fromdual.com

● Top 3 earners of each department and


compare salaries with the average salary
SELECT *
FROM (
SELECT RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS ranking
, dept, name, salary
, ROUND(AVG(salary) OVER (PARTITION BY dept), 2) AS avg_salary
FROM employee_salaries
) AS salary_ranks
WHERE ranking <= 3;
+---------+-------------+--------------+--------+------------+
| ranking | dept | name | salary | avg_salary |
+---------+-------------+--------------+--------+------------+
| 1 | Engineering | Dharma | 3500 | 2633.33 |
| 2 | Engineering | Bình | 3000 | 2633.33 |
| 3 | Engineering | Adalynn | 2800 | 2633.33 | mysql
| 1 | Sales | Carbry | 500 | 325.00 | client
| 2 | Sales | Clytemnestra | 400 | 325.00 |
| 3 | Sales | Juraj | 300 | 325.00 |
| 3 | Sales | Kalpana | 300 | 325.00 |
+---------+-------------+--------------+--------+------------+

15 / 48
Window Functions Example www.fromdual.com

SELECT SUBSTR(event_name, 11) AS event


, ROUND(timer_wait/1000/1000, 3) AS time_us
FROM performance_schema.events_stages_history_long
WHERE nesting_event_id = 212
ORDER BY event_id ASC
;
+----------------------+---------+
| event | time_us |
+----------------------+---------+
| init | 37.567 |
| checking permissions | 3.614 |
| Opening tables | 36.098 |
| After opening tables | 0.446 |
| System lock | 0.181 |
| Table lock | 0.747 |
...
| Sending data | 15.270 |
| end | 2.125 |
| query end | 1.458 |
| closing tables | 0.431 |
| removing tmp table | 15.401 |
| Unlocking tables | 0.968 |
| freeing items | 3.087 |
| cleaning up | 1.228 |
+----------------------+---------+

16 / 48
Window Functions Example www.fromdual.com

SELECT RANK() OVER (ORDER BY event_id) AS rank


, SUBSTR(event_name, 11) AS event
, CAST(ROUND(timer_wait/1000/1000, 3) AS DOUBLE) AS time_us
, CAST(ROUND((timer_wait / SUM(timer_wait) OVER ()) * 100, 1) AS DOUBLE) AS time_pct
, CAST(ROUND((SUM(timer_wait)
OVER (ORDER BY event_id))/1000/1000, 3) AS DOUBLE) AS time_cum
, CAST(ROUND((SUM(timer_wait) OVER (ORDER BY event_id)
/ SUM(timer_wait) OVER ()) * 100, 1) AS DOUBLE) AS cum_pct
FROM performance_schema.events_stages_history_long
WHERE nesting_event_id = 212
ORDER BY event_id ASC;
+------+----------------------+---------+----------+----------+---------+
| rank | event | time_us | time_pct | time_cum | cum_pct |
+------+----------------------+---------+----------+----------+---------+
| 1 | init | 37.567 | 16.1 | 37.567 | 16.1 |
| 2 | checking permissions | 3.614 | 1.5 | 41.181 | 17.6 |
| 3 | Opening tables | 36.098 | 15.5 | 77.279 | 33.1 |
| 4 | After opening tables | 0.446 | 0.2 | 77.725 | 33.3 |
| 5 | System lock | 0.181 | 0.1 | 77.906 | 33.4 |
| 6 | Table lock | 0.747 | 0.3 | 78.653 | 33.7 |
...
| 15 | Sending data | 15.27 | 6.5 | 208.794 | 89.4 |
| 16 | end | 2.125 | 0.9 | 210.919 | 90.3 |
| 17 | query end | 1.458 | 0.6 | 212.377 | 91.0 |
| 18 | closing tables | 0.431 | 0.2 | 212.808 | 91.1 |
| 19 | removing tmp table | 15.401 | 6.6 | 228.209 | 97.7 |
| 20 | Unlocking tables | 0.968 | 0.4 | 229.177 | 98.2 |
| 21 | freeing items | 3.087 | 1.3 | 232.264 | 99.5 |
| 22 | cleaning up | 1.228 | 0.5 | 233.492 | 100.0 |
+------+----------------------+---------+----------+----------+---------+

17 / 48
Common Table Expressions www.fromdual.com

● WITH → Common Table Expression (CTE)


● Refer to a subquery expression many times
● Like a temporary table per query
● Temporary named result set / View
● Seems to be compatible with MySQL (not with MS SQL Server)
● Makes SQL more readable
● Since SQL:1999
● Non-recursive CTE
● Recursive CTE
WITH [ RECURSIVE ] cte AS
( SELECT * FROM test WHERE id = 42 )
SELECT * FROM cte;

18 / 48
Non-recursive CTE Example www.fromdual.com

WITH SalesCTE (SalesPersonID, SalesOrderID, SalesYear)


AS
(
SELECT SalesPersonID, SalesOrderID
, YEAR(OrderDate) AS SalesYear
FROM SalesOrderHeader
WHERE SalesPersonID IS NOT NULL
)
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales
, SalesYear
FROM SalesCTE
GROUP BY SalesYear, SalesPersonID
ORDER BY SalesPersonID, SalesYear;
+---------------+------------+-----------+
| SalesPersonID | TotalSales | SalesYear |
+---------------+------------+-----------+
| 1 | 2 | 2018 |
| 2 | 8 | 2018 |
| 3 | 1 | 2018 |
+---------------+------------+-----------+

19 / 48
Recursive CTE Example www.fromdual.com

WITH RECURSIVE DirectReports(Name, Title, EmployeeID, EmployeeLevel, Sort) AS


(
SELECT CONCAT(e.FirstName, ' ', e.LastName),
e.Title, e.EmployeeID, 1,
CONCAT(e.FirstName, ' ', e.LastName)
FROM MyEmployees AS e
WHERE e.ManagerID IS NULL
UNION ALL
SELECT CONCAT(REPEAT('| ', EmployeeLevel), e.FirstName, ' ', e.LastName),
e.Title, e.EmployeeID, EmployeeLevel + 1,
CONCAT(RTRIM(Sort), '| ', FirstName, ' ', LastName)
FROM MyEmployees AS e
JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID
)
SELECT EmployeeID, Name, Title, EmployeeLevel
FROM DirectReports
ORDER BY Sort;
+------------+-------------------------------+------------------------------+---------------+
| EmployeeID | Name | Title | EmployeeLevel |
+------------+-------------------------------+------------------------------+---------------+
| 1 | Ken Sánchez | Chief Executive Officer | 1 |
| 273 | | Brian Welcker | Vice President of Sales | 2 |
| 16 | | | David Bradley | Marketing Manager | 3 |
| 23 | | | | Mary Gibson | Marketing Specialist | 4 |
| 274 | | | Stephen Jiang | North American Sales Manager | 3 |
| 276 | | | | Linda Mitchell | Sales Representative | 4 |
| 275 | | | | Michael Blythe | Sales Representative | 4 |
| 285 | | | Syed Abbas | Pacific Sales Manager | 3 |
| 286 | | | | Lynn Tsoflias | Sales Representative | 4 |
+------------+-------------------------------+------------------------------+---------------+

20 / 48
Check Constraints www.fromdual.com

● Restricts data to add to a table → Error


● Before Columns defaults/constraints:
● CURRENT_TIMESTAMP
AUTO_INCREMENT
PRIMARY KEY
DEFAULT something
UNIQUE MDEV 15461
binlog
FOREIGN KEY
● Most deterministic functions and UDF
● I did not say this makes sense or is IMHO the
correct way doing it...

21 / 48
Check Constraint Example www.fromdual.com

CREATE TABLE Employees (


EmployeeID SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
, FirstName VARCHAR(30) NOT NULL CHECK (CHAR_LENGTH(FirstName) > 2)
, LastName VARCHAR(40) NOT NULL
, Title VARCHAR(50) NOT NULL CHECK (Title != 'God')
, DeptID SMALLINT UNSIGNED NOT NULL
, ManagerID INT UNSIGNED NULL
, Salary DECIMAL(7,2) DEFAULT 0.0 CHECK (Salary < 10000.0)
, CONSTRAINT c_deptid CHECK (DeptID > 0)
);

ALTER TABLE Employees


ADD CONSTRAINT c_mgr CHECK (ManagerId > 0);

ALTER TABLE Employees Docu


ADD CONSTRAINT c_dpt CHECK (DeptID BETWEEN 1 AND 100); Bug
ALTER TABLE Employees
ADD CONSTRAINT c_last CHECK (LastName = UPPER(LastName));

22 / 48
DEFAULTs with expressions www.fromdual.com

● Support for DEFAULT for columns with


expressions
● Most MariaDB functions are possible
● Referring to earlier columns in the DEFAULT
expression is possible.
● The DEFAULT clause CANNOT contain any
stored functions or subqueries.
● BLOB and TEXT fields can now have a
DEFAULT value
23 / 48
DEFAULT Example www.fromdual.com

CREATE TABLE employee (


id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
, short_uuid BIGINT UNSIGNED DEFAULT UUID_SHORT()
, first_name VARCHAR(30) NOT NULL
, last_name VARCHAR(40) NOT NULL
, salary DECIMAL(7,2) DEFAULT 1000.0
, bonus DECIMAL(7, 2) DEFAULT (salary * 0.1)
);

INSERT INTO employee


VALUES (DEFAULT, DEFAULT, 'Oli', 'Sennhauser', 900.0, DEFAULT);

SELECT * FROM employee;


+----+--------------------+------------+------------+--------+-------+
| id | short_uuid | first_name | last_name | salary | bonus |
+----+--------------------+------------+------------+--------+-------+
| 1 | 601964996657676299 | Oli | Sennhauser | 900.00 | 90.00 |
+----+--------------------+------------+------------+--------+-------+

ALTER TABLE employee


MODIFY bonus DECIMAL(7, 2) DEFAULT (salary * 0.12);

24 / 48
GeoJSON / JSON / GIS www.fromdual.com

● The JSON data type was introduced (alias for LONGTEXT)


● JSON functions added
● JSON_ARRAY, JSON_ARRAY_APPEND, JSON_ARRAY_INSERT, 
JSON_COMPACT, JSON_CONTAINS, JSON_CONTAINS_PATH, 
JSON_DEPTH, JSON_DETAILED, JSON_EXISTS, JSON_EXTRACT, 
JSON_INSERT, JSON_KEYS, JSON_LENGTH, JSON_LOOSE, 
JSON_MERGE, JSON_OBJECT, JSON_QUERY, JSON_QUOTE, 
JSON_REMOVE, JSON_REPLACE, JSON_SEARCH, JSON_SET, 
JSON_TYPE, JSON_UNQUOTE, JSON_VALID, JSON_VALUE
● InnoDB support for spatial indices (GIS)
● GeoJSON support
● http://geojson.org/
● ST_AsGeoJSON and ST_GeomFromGeoJSON functions
● For imported/exported using GeoJSON format

25 / 48
JSON Example www.fromdual.com

CREATE TABLE geojson (


id INT UNSIGNED NOT NULL AUTO_INCREMENT
, j JSON
, g GEOMETRY NOT NULL
, PRIMARY KEY (id)
, SPATIAL INDEX(g)
, CONSTRAINT c_json CHECK (JSON_VALID(j))
) ENGINE = InnoDB;

INSERT INTO geojson VALUES


(NULL, ST_AsGeoJSON(ST_GeomFromText('POINT(5.3 7.2)'))
, PointFromText('POINT(5.3 7.2)'));

SET @poly1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');


SET @poly2 = ST_GeomFromText('Polygon((5 5,5 8,8 8,5 8,5 5))');
SELECT id, j, ST_AsText(g)
, MBRContains(@poly1, g) AS 1
, MBRContains(@poly2, g) AS 2
FROM geojson;

+----+----------------------------------------------+----------------+---+---+
| id | j | ST_AsText(g) | 1 | 2 |
+----+----------------------------------------------+----------------+---+---+
| 1 | {"type": "Point", "coordinates": [5.3, 7.2]} | POINT(5.3 7.2) | 0 | 1 |
+----+----------------------------------------------+----------------+---+---+

26 / 48
Virtual Columns / VIEWs www.fromdual.com

● VC exists since MariaDB 5.2


● Generated and Persistent Columns
● Lots of restrictions lifted for Virtual computed
columns
● Expression > 252 Characters long
● VC can base on other VC
● Client depending functions, UDF
● Deterministic functions for VC
● Indexing VC
● VIEWs support subquery in FROM clause
● Optimizer Condition push down to VIEWs
27 / 48
Other features added www.fromdual.com

● PREPARE Statement/Dynamic SQL now understand


most expressions
● Catchall for LIST partitions: DEFAULT
● Multiple TRIGGERs per table allowed
● EXPLAIN FORMAT=JSON various new information
● Optimizer fixes (Push down condition to non-
mergeable VIEWs/derived tables
● ANALYZE TABLE re-implemented lock free
● New reserved keywords:
● RECURSIVE, ROWS, WINDOW (table alias only), JSON

28 / 48
Oracle compatibility www.fromdual.com

● Oracle-style EXECUTE IMMEDIATE
● SET @debug = 1;
EXECUTE IMMEDIATE CONCAT(IF(@debug, 
'EXPLAIN ', ''), 'SELECT * FROM dual');
● Number of supported decimals in DECIMAL from
30 to 38 (Oracle style)
● DECIMAL(65, 38)
● Adding NOPAD collations ('a' != 'a   ')
● See also MariaDB 10.3
● sql_mode = ORACLE

29 / 48
MariaDB Connectors www.fromdual.com

● C and C++ Connector


● Old libmysqlclient was GPL
● Connector/C 3.0.3 (LGPL)
● Java Connector
● Connector/J 2.2.2 (LGPL), supports Java 8 and higher
● Type 4 JDBC driver, JDBC 1.4.2 compliant
● ODBC Connector
● Connector/ODBC 3.0.3 (LGPL)
● Supports ODBC Standard 3.5
● Perl DBI
● DBD::MariaDB
● Other Connectors
● User MySQL Connectors
30 / 48
Binary Logging www.fromdual.com

● server_id default changed from 0 to 1


● binlog_format default changed to MIXED
(before STATEMENT) why not ROW??? :-(
● binlog_annotate_row_events (Master)
default changed to ON
● → Original Statement in Binary Log (increases size)
● Example next page
● binlog_checksum = CRC32
● before was NONE (0)

31 / 48
binlog_annotate_row_events www.fromdual.com

# at 830
#180306 12:32:07 server id 1 end_log_pos 872 CRC32 0xb900f6c2
# GTID 0-1-22 trans
/*!100001 SET @@session.gtid_seq_no=22*//*!*/;
BEGIN /*!*/;
# at 872
# at 944
#180306 12:32:07 server id 1 end_log_pos 944 CRC32 0xe03cbb03
# Annotate_rows:
#Q> insert into test values (NULL, 'Some data', NULL)
#180306 12:32:07 server id 1 end_log_pos 996 CRC32 0xa93c6f0b
# Table_map: `test`.`test` mapped to number 24
# at 996
#180306 12:32:07 server id 1 end_log_pos 1048 CRC32 0x3e58a57d
# Write_rows: table id 24 flags: STMT_END_F
BINLOG '
N3yeWhMBAAAANAAAAOQDAAAAABgAAAAAAAEABHRlc3QABHRlc3QAAwMPEQOAAAACC288qQ==
N3yeWhcBAAAANAAAABgEAAAAABgAAAAAAAEAA//4AQAAAAlTb21lIGRhdGFannw3faVYPg==
'/*!*/;
### INSERT INTO `test`.`test`
### SET
### @1=1
### @2='Some data'
### @3=1520335927
# at 1048
#180306 12:32:07 server id 1 end_log_pos 1079 CRC32 0xbf8ef8cd Xid = 28
COMMIT/*!*/;

32 / 48
Replication I www.fromdual.com

● slave_parallel_workers alias for


slave_parallel_threads
● Default of slave_net_timeout reduced to 60 seconds
from 3600
● read_binlog_speed_limit restricts speed the Slave reads the
binary log from master
● replicate_annotate_row_events (Slave) default changed to
ON
● log_slave_updates = 1
● Compression of events in the binary log is supported
● log_bin_compress and log_bin_compress_min_len 10 ... 1024 (256)
● Replicate MariaDB GTIDs to other nodes in the Galera Cluster

33 / 48
Replication II www.fromdual.com

● Delayed replication
● CHANGE MASTER TO master_delay = 3600;
● Slave must be stopped
● START SLAVE UNTIL master_gtid_pos = …;
● SHOW PROCESSLIST for Slave Threads
● Time is now counted from start of wait
● New Slave thread Commands:
● Slave_IO for Slave thread reading relay log
● Slave_SQL for slave executing SQL commands or distribution
queries to Slave workers
● Slave_worker for slave threads executing SQL commands in
parallel replication
34 / 48
I_S, P_S and Status www.fromdual.com

● INFORMATION_SCHEMA / I_S
● Generated Columns information added to I_S.columns
● I_S.user_variables added
● PERFORMANCE_SCHEMA / P_S
● Updated to 5.6.31, but still off :-(
● Status
● Com_show_create_user, Com_alter_user, Com_multi, 
Com_reset_connection, Executed_triggers
● Innodb_have_punch_hole, Innodb_pages0_read, 
Innodb_scrub_log, 
Innodb_encryption_num_key_requests

35 / 48
Variables www.fromdual.com

● Changed defaults
● binlog_checksum, server_id, binlog_format, replicate_annotate_row_events,
binlog_annotate_row_events, slave_net_timeout
● innodb_strict_mode, innodb_compression_algorithm, innodb_log_compressed_pages,
innodb_use_atomic_writes, innodb_use_trim
● group_concat_max_len, aria_recover, myisam_recover_options
● New
● max_recursive_iterations, standards_compliant_cte
● thread_pool_prio_kickup_timer, thread_pool_priority,
● read_binlog_speed_limit, slave_parallel_workers, log_bin_compress,
log_bin_compress_min_len
● innodb_deadlock_detect, innodb_stats_include_delete_marked, innodb_tmpdir
● tmp_disk_table_size, tmp_memory_table_size, aria_recover_options, compression_default
● Deprecated
● innodb_mtflush_threads, innodb_use_mtflush
● XtraDB specific variables are ignored
● Removed
● innodb_api_*, innodb_purge_stop_now, innodb_purge_run_now
36 / 48
MariaDB Server version www.fromdual.com

SQL> SELECT @@version_comment, @@version;


+-------------------+---------------+
| @@version_comment | @@version |
+-------------------+---------------+
| MariaDB Server | 8.0.4-rc-blog |
+-------------------+---------------+

SQL> status;
--------------
mysql Ver 15.1 Distrib 10.2.13-MariaDB,
for Linux (x86_64) using readline 5.1

● Possibly you get MySQL Workbench working again with it...? ;-)
● Caution:
ERROR: Could not find server version: Master reported unrecognized
MySQL version '8.0.4-rc-blog'.

37 / 48
Security / Encryption www.fromdual.com

● Amazon AWS Key Management plug-in for Windows/Linux


● AWS Key Management Service (KMS) for encryption at rest (on disk)
● Customer Master Key (CMK) kept in AWS KMS
● Added support for OpenSSL 1.1 and LibreSSL
● Support CRC32 SSE2 implementation (hardware) under
Windows
● Temporary InnoDB files are always encrypted if
innodb_encrypt_log is set to 1
● 25 Security Vulnerability fixes:
● CVE-2017-3257, CVE-2017-3302, CVE-2017-3308, CVE-2017-3309, CVE-
2017-3313, CVE-2017-3453, CVE-2017-3456, CVE-2017-3464, CVE-2017-
3636, CVE-2017-3641, CVE-2017-3653, CVE-2017-10268, CVE-2017-
10286, CVE-2017-10320, CVE-2017-10365, CVE-2017-10378, CVE-2017-
10379, CVE-2017-10384, CVE-2017-15365, CVE-2018-2562, CVE-2018-
2612, CVE-2018-2622, CVE-2018-2640, CVE-2018-2665, CVE-2018-2668
38 / 48
User and Connection www.fromdual.com

● New SHOW CREATE USER
● Similar to SHOW GRANTS but without Privileges
● New ALTER USER / extended CREATE USER
● ALTER USER 'fromdual'@'%' IDENTIFIED BY 'secret'
REQUIRE SSL;
● MAX_{QUERIES|UPDATE|CONNECTIONS}_PER_HOUR, 
MAX_USER_CONNECTIONS, TLS/SSL options
● Thread pool
● Higher priority to connections that have an active transaction
● Controlled with thread_pool_prio_kickup_timer and
thread_pool_priority
● COM_RESET_CONNECTION command added for pooled connections
● More "secure" ed25519 Authentication Plug-in
● Replacement of old sha1, probably NOT compatible with MySQL sha256

39 / 48
Optimizations / Performance www.fromdual.com

● Optimizations for faster connection creation time.


● Connection set-up faster by moving creation of THD to
new thread.
● Allow online table rebuild when encryption or
compression parameters change (InnoDB)
● Table open cache can automatically partition itself
● Better throughput in some cases?
● Debugging:
● Core dumps can now be enabled dynamically

● Not so much Marketing BS on Performance for 10.2!


40 / 48
Backup / Binlog / Flashback www.fromdual.com

● mysqldump ­­add­drop­trigger
● mysqlbinlog
● Add continuous binary log backup to mysqlbinlog
● mysqlbinlog ­­user=replication ­­host=127.0.0.1 
­­raw \
­­read­from­remote­server ­­stop­never ­­to­last­log 
binlog.000001
● Flashback with mysqlbinlog
● DML only (no DDL yet!) → mysqldump ­­no­data from time to time
● binlog_format = ROW Fixed in
● binlog_row_image = FULL 10.2.7
● mysqlbinlog ­­flashback ­­start­position=1206 \
  ­­stop­position=2008 binlog.000013

41 / 48
Flashback Example www.fromdual.com

#Q> insert into test values (null, 'Data where ups happens', null)
#Q> update test set data = 'Ups happens' where id = 5635999
#Q> delete from test where id = 5635999

#180308 19:23:51 server id 3336 end_log_pos 2008 CRC32 0xcb7ae7d2 Xid = 83


### INSERT INTO `test`.`test`
### SET
### @1=5635999
### @2='Ups happens'
### @3=1520533412

#180308 19:23:32 server id 3336 end_log_pos 1771 CRC32 0x6e9eded3 Xid = 81


### UPDATE `test`.`test`
### WHERE
### @1=5635999
### @2='Ups happens'
### @3=1520533412
### SET
### @1=5635999
### @2='Data where ups happens'
### @3=1520533340

#180308 19:22:20 server id 3336 end_log_pos 1481 CRC32 0x8ae5fd7a Xid = 79


### DELETE FROM `test`.`test`
### WHERE
### @1=5635999
### @2='Data where ups happens'
### @3=1520533340

42 / 48
MariaBackup www.fromdual.com

● Alternative to XtraBackup and MySQL Enterprise Backup!


● Bases on XtraBackup 2.3.8
● Stable in 10.2.10 also for MariaDB 10.1, supported
platforms: Linux and also on Windows!
● For InnoDB, Aria, MyISAM
● Hot online physical backup
● full backup (all databases)
● incremental backup (delta: complicated!)
● partial backup (schema or table: complicated!)
● Supports Compressed and Encrypted Files
● Galera sst_method = mariabackup

43 / 48
MariaBackup Example www.fromdual.com

mariabackup --user=root --backup --target-dir=/backup/tape

mariabackup --user=root --prepare --target-dir=/backup/tape

mariabackup --user=root --copy-back --target-dir=/backup/tape \


--datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql/

44 / 48
Other MariaDB tools www.fromdual.com

● MariaDB Column Store


● Nov 2017: v1.1.2 GA, bases on MariaDB 10.2
● Columnar Storage, designed for analytic queries on big data
● Windows Functions!
● MaxScale
● Used for: "in front of a database" (Proxy, Firewall, Router, ...)
● Features: SQL Firewall, DoS protection, Read/write-splitting,
Data masking, Query Caching, Schema-based sharding
● 1.x is GPL (last release 2017-02, not supported any more)
● 2.x is BSL, 2.2 is GA
● Opponents: MySQL Router, ProxySQL (NOT a proxy!)
● MySQL Router and MaxScale are note easy any more (but clever!
and not so fast?), HAproxy is easy (but fast! and not so clever)
45 / 48
MariaDB Outlook 10.3 www.fromdual.com

● System-Versioned Tables (SQL:2011)


● Storage Engine independent Column Compression
● Window functions improvements
● Invisible Columns
● Instant ADD COLUMN
● Optimizer and Performance improvements
● Spider SE and OQGRAPH SE upgrades
● Partition engine improvements
AND:
● sql_mode = ORACLE supports PL/SQL language subset
● PL/SQL CREATE PACKAGE support
● INTERSECT and EXCEPT (vs. UNION)
● Oracle style Sequences

46 / 48
MariaDB vs. Oracle www.fromdual.com

47 / 48
Q&A www.fromdual.com

Questions ?

Discussion?

We have time for some face-to-face talks...

● FromDual provides neutral and independent:


● Consulting
● Remote-DBA
● Support for MySQL, Galera, Percona Server and MariaDB
● Training

48 / 48

You might also like