MySQL 8.4 - Nuove funzionalita'

La nuova versione MySQL 8.4 (LTS) [NdE 30 Aprile 2024], e' un'evoluzione della precedente release 8.0 e raccoglie le nuove funzionalita' introdotte con le Innovation Release 8.1, 8.2 ed 8.3.

In questo documento sono riportati in dettaglio i principali nuovi elementi introdotti dalla versione 8.4 riportando consigli ed esempi pratici:

Ma le novita' non sono solo queste... continuate a leggere!

LTS (Long Term Support)

In realta' non si tratta di una novita' perche' era stata dichiarata come LTS la versione 8.0 con l'uscita della release 8.0.34. Il passaggio alla 8.0 allora era praticamente obbligatorio perche' la 5.7 e' stata desupportata dal 2023-10 e le 8.1+ erano gia' indicate come Innovation Release e quindi in generale non consigliate per installazioni di produzione.

Pero' con l'uscita della versione 8.4 diventa importante conoscere quali sono e saranno le versioni LTS per pianificare l'aggiornamento dei database e delle applicazioni. La versione 8.4 e' la nuova LTS: verra' supportata a lungo e le sue funzionalita' non verranno rimosse.
Il passaggio tra una LTS e la sucessiva sara' sempre garantito e facilitato. Mentre sara' necessario effettuare l'upgrade da un Innovation Release alla LTS immediatamente sucessiva. L'upgrade di MySQL puo' essere effettuato con tecniche diverse:

La prossima Innovation Release sara' le 9.0 mentre e' previsto che la prossima LTS sia la versione MySQL 9.7 indicativamente tra due anni per poi passare alla 10.

E' quindi fortemente consigliato aggiornare la versione di MySQL alla 8.0 se si utilizzano versioni precedenti [NdA tutte le versioni precedenti non sono piu' supportate] e poi preparare il passaggio alla 8.4.

Clone Plugin

Anche questa non e' una novita' perche' il Clone Plugin e' stato introdotto inizialmente nella versione 8.0.17 [NdA migliorandolo nei rilasci successivi].

Il Clone Plugin effettua una copia online consistente ed efficiente di una base dati tra due server MySQL. Il Clone Plugin trasporta solo le tabelle InnoDB, eventuali tabelle di altri Engine vengono ribaltate ma saranno vuote.

Ma c'e' un'importante novita' introdotta con la 8.4: e' possibile clonare database tra point version differenti anche se la versione di destinazione e' meno recente. Ad esempio sara' possibile clonare un database 8.4.3 su un database 8.4.2.
Si tratta di un vantaggio importante per gli ambienti da automatizzare come gli ambienti in Cloud, su Kubernetes e le piu' complesse architetture in replica.

L'utilizzo del plugin e' semplice:
 CLONE INSTANCE FROM clone_user@'donor_ip:3306 IDENTIFIED BY 'xxx';

Per verificare l'avanzamento del processo:
 SELECT * FROM performance_schema.clone_progress;

Ottimizzatore e tuning

Non sono molte le novita' specifiche dell'ottimizzatore [NdE tra queste riportiamo: automatic histogram updates] ma sono variati i default di molte variabili che hanno un impatto sulle prestazioni. Alcune impostazioni consentono un miglior adattamento a configurazioni limitate come si trovano di frequente negli ambienti su Container.

In particolare sono cambiati i default di: innodb_adaptive_hash_index, innodb_doublewrite_pages, innodb_flush_method, innodb_io_capacity, innodb_log_buffer_size, innodb_numa_interleave, temptable_max_ram, temptable_use_mmap, ...

Dalle prime prove non abbiamo evidenziato differenze significative rispetto a MySQL 8.0. innodb_flush_method con ODIRECT dovrebbe essere un vantaggio rispetto all'fsync, innodb_log_buffer_size a 64 MB puo' essere utile in qualche caso, ... ma si tratta di parametri di tuning gia' utilizzati anche nelle precedenti versioni.
Aspettiamo comunque i prossimi benchmark ufficiali e/o indipendenti della 8.4!

Replica

Anche se vi sono alcune nuove funzionalita' (eg. GTID tagging) la novita' piu' importante e' che molte sintassi gia' deprecate vengono definitivamente desupportate. In pratica sono stati rimossi tutti i riferimenti a MASTER ed a SLAVE che ora diventano SOURCE e REPLICA nei comandi SQL.

Sono cambiati alcuni default relativi alla Group Replication rendendola piu' sicura. group_replication_consistency e' passato da EVENTUAL a BEFORE_PRIMARY_FAILOVER e group_replication_exit_state_action e' passato da READ_ONLY a OFFLINE_MODE; in questo modo non si rischiano letture di dati vecchi nei casi di elezioni di un nuovo primary o di split brain.

Importante e' l'introduzione della possibilita' di separare automaticamente il traffico da parte di MySQL Router distinguendo tra letture e scritture sul database. Si tratta di una funzionalita' a lungo richiesta, introdotta nella 8.3 e confermata nella 8.4 di MySQL Router [NdA l'impostazione e' access_mode='auto'].

Sicurezza

Da ultimo ma non come ultimo... la sicurezza. E finalmente abbiamo un po' di novita'!

Vi sono nuovi privilegi di sistema: OPTIMIZE_LOCAL_TABLE, FLUSH_PRIVILEGES, SET_ANY_DEFINER, ALLOW_NONEXISTENT_DEFINER, TRANSACTION_GTID_TAG.

E' stato introdotto un plugin per SASL-Based LDAP Authentication che consente di creare utenti che effettuano l'accesso con le password Windows:

CREATE USER 'scott'@'localhost' IDENTIFIED WITH authentication_ldap_sasl AS 'uid=scott_ldap,ou=People,dc=acme,dc=com';

Maggiori dettagli sono riportati nella documentazione ufficiale.

E' stato rimosso il supporto del TLS v1.1 considerato non piu' sufficientemente sicuro.

Ricordiamo nuovamente, perche' come impatto puo' essere significativo, mysql_native_password e' deprecato, per default non e' piu' attivo e non si abilita piu' impostando una variabile. Per riabilitare la vecchia modalita' di autenticazione con la 8.4 va utilizzato mysql_native_password=ON nella sezione [mysqld] del file di configurazione di MySQL.

Varie ed eventuali

Altre novita' interessanti sono:

Un breve riassunto delle funzionalita' introdotte nel tempo si trova su Introduzione a MySQL. MySQL e' in costante evoluzione; ecco le funzionalita' introdotte nelle versioni precedenti: MySQL 8.0, MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0. Per i piu' curiosi e' anche utile il confronto con un importante fork: MariaDB 10.2.
Un documento completo con le versioni dei principali software, tra cui MySQL, e' Il tuo server puzza!


Titolo: MySQL 8.4 - Nuove funzionalita'
Livello: Avanzato (3/5)
Data: 1 Aprile 2024
Versione: 1.0.1 - 1 Maggio 2024
Autore: mail [AT] meo.bogliolo.name