Compania Oracle a creat o nouă ramură a SGBD-ului MySQL 8.4 și a publicat o actualizare corectivă pentru MySQL 8.0.37. Versiunile MySQL Community Server 8.4.0 sunt pregătite pentru toate distribuțiile majore de Linux, FreeBSD, macOS și Windows. Lansarea 8.4.0 este inclusă în ramurile cu suport pe termen lung (LTS), care sunt lansate o dată la doi ani și sunt susținute timp de 5 ani (plus posibilitatea de a obține încă 3 ani de suport extins).
MySQL 8.4.0 este a patra lansare creată în cadrul noului model de generare a versiunilor, care prevede existența a două tipuri de ramuri MySQL - «Innovation» și «LTS». Ramurile Innovation, care includ MySQL 8.1, 8.2 și 8.3, sunt recomandate pentru cei care doresc să aibă acces timpuriu la noi funcționalități. Aceste ramuri sunt publicate la fiecare 3 luni și sunt susținute doar până la publicarea următoarei versiuni semnificative (de exemplu, după apariția ramurii 8.4, suportul pentru ramura 8.3 este oprit). Ramurile LTS sunt recomandate pentru implementări care necesită predictibilitate și menținerea comportamentului nemodificat pe termen lung. Următoarea ramură LTS va fi o nouă ramură Innovation - MySQL 9.0.
Principalele modificări în MySQL 8.4:
- Optimizerul a primit suport pentru actualizarea automată a histogramelor, independent de executarea operației «ANALYZE TABLE» pentru tabelul părinte. Actualizarea automată se activează prin specificarea expresiei «AUTO UPDATE» în timpul executării operației «ANALYZE TABLE», iar dezactivarea se face prin specificarea expresiei «MANUAL UPDATE», care este utilizată în mod implicit.
- Au fost adăugate opțiunile «—keyring-migration-from-component», «—keyring-migration-source» și «—keyring-migration-destination» pentru migrarea de la componenta keyring la pluginul keyring.
- A fost adăugată o nouă privilegie FLUSH_PRIVILEGES, care, spre deosebire de privilegia disponibilă anterior RELOAD, oferă utilizatorului drepturi doar pentru a efectua operația «FLUSH PRIVILEGES».
- A fost adăugată o nouă privilegiere OPTIMIZE_LOCAL_TABLE, care permite utilizatorului să efectueze operații «OPTIMIZE LOCAL TABLE» și «OPTIMIZE NO_WRITE_TO_BINLOG TABLE».
- Valorile implicite ale variabilelor sistemului group_replication_consistency și group_replication_exit_state_action au fost modificate. Variabila group_replication_consistency este acum setată la valorile BEFORE_ON_PRIMARY_FAILOVER în loc de EVENTUAL, iar variabila group_replication_exit_state_action este setată la OFFLINE_MODE în loc de READ_ONLY.
- În versiunile livrate cu biblioteca încorporată OpenSSL, este utilizată o nouă versiune OpenSSL 3.0.13.
- Actualizarea directă de la MySQL 5.7 la MySQL 8.4 a fost oprită. Pentru a trece de la MySQL 5.7, este acum necesar să treceți mai întâi la ramura 8.0, iar apoi să o actualizați la versiunea 8.4.
- Valorile implicite pentru următoarele setări InnoDB au fost modificate: innodb_adaptive_hash_index, innodb_buffer_pool_in_core_file, innodb_buffer_pool_instances, innodb_change_buffering, innodb_doublewrite_files, innodb_doublewrite_pages, innodb_flush_method, innodb_io_capacity, innodb_io_capacity_max, innodb_log_buffer_size, innodb_numa_interleave, innodb_page_cleaners, innodb_parallel_read_threads, innodb_purge_threads, innodb_read_io_threads, innodb_use_fdatasync, temptable_max_ram, temptable_max_mmap și temptable_use_mmap.
- A fost adăugat suport pentru construirea pachetelor pentru distribuțiile Fedora 40 și Ubuntu 24.04.
- Pluginul serverului mysql_native_password, care oferă autentificarea prin parole, a fost dezactivat implicit și declarat învechit. Este recomandat să treceți la utilizarea pluginului caching_sha2_password, care folosește algoritmul SHA2 pentru hashing în loc de SHA1. Pentru a restabili suportul pentru mysql_native_password, puteți utiliza opțiunea „—mysql-native-password=ON” sau setarea „mysql_native_password=ON”.
- Suportul pentru protocoale și algoritmi de criptare nesiguri a fost oprit. Au fost păstrate doar TLS v1.2 și TLSv1.3, algoritmi care asigură secretul avansat (forward secrecy), cifruri și certificate cu SHA2, precum și algoritmi AES în modul GCM sau AEAD.
- Exprimările SQL legate de replicare, care au fost anterior declarate învechite din cauza utilizării terminologiei inadecvate, au fost eliminate: START SLAVE (ar trebui folosit START REPLICA); STOP SLAVE (ar trebui folosit STOP REPLICA); SHOW SLAVE STATUS (ar trebui folosit SHOW REPLICA STATUS); SHOW SLAVE HOSTS (SHOW REPLICAS); RESET SLAVE (RESET REPLICA); CHANGE MASTER TO (CHANGE REPLICATION SOURCE TO); RESET MASTER (RESET BINARY LOGS AND GTIDS); SHOW MASTER STATUS (SHOW BINARY LOG STATUS); PURGE MASTER LOGS (PURGE BINARY LOGS); SHOW MASTER LOGS (SHOW BINARY LOGS).
- Opțiunile anterioare marcate ca depășite, utilizate în expresiile „CHANGE REPLICATION SOURCE TO” și „START REPLICA”, au fost eliminate, iar cuvântul „master” a fost înlocuit cu „source”: SOURCE_AUTO_POSITION (trebuie folosit în loc de MASTER_AUTO_POSITION), SOURCE_HOST (în loc de MASTER_HOST), SOURCE_BIND (în loc de MASTER_BIND), SOURCE_USER (în loc de MASTER_USER), SOURCE_PASSWORD (în loc de MASTER_PASSWORD), SOURCE_PORT (în loc de MASTER_PORT), SOURCE_CONNECT_RETRY (în loc de MASTER_CONNECT_RETRY), SOURCE_RETRY_COUNT (în loc de MASTER_RETRY_COUNT), SOURCE_DELAY (în loc de MASTER_DELAY), SOURCE_SSL (în loc de MASTER_SSL), SOURCE_SSL_CA (în loc de MASTER_SSL_CA), SOURCE_SSL_CAPATH (în loc de MASTER_SSL_CAPATH), SOURCE_SSL_CIPHER (în loc de MASTER_SSL_CIPHER), SOURCE_SSL_CRL (în loc de MASTER_SSL_CRL), SOURCE_SSL_CRLPATH (în loc de MASTER_SSL_CRLPATH), SOURCE_SSL_KEY (în loc de MASTER_SSL_KEY), SOURCE_SSL_VERIFY_SERVER_CERT (în loc de MASTER_SSL_VERIFY_SERVER_CERT), SOURCE_TLS_VERSION (în loc de MASTER_TLS_VERSION), SOURCE_TLS_CIPHERSUITES (în loc de MASTER_TLS_CIPHERSUITES), SOURCE_SSL_CERT (în loc de MASTER_SSL_CERT), SOURCE_PUBLIC_KEY_PATH (în loc de MASTER_PUBLIC_KEY_PATH), GET_SOURCE_PUBLIC_KEY (în loc de GET_MASTER_PUBLIC_KEY), SOURCE_HEARTBEAT_PERIOD (în loc de MASTER_HEARTBEAT_PERIOD), SOURCE_COMPRESSION_ALGORITHMS (în loc de MASTER_COMPRESSION_ALGORITHMS), SOURCE_ZSTD_COMPRESSION_LEVEL (în loc de MASTER_ZSTD_COMPRESSION_LEVEL), SOURCE_LOG_FILE (în loc de MASTER_LOG_FILE), SOURCE_LOG_POS (în loc de MASTER_LOG_POS).
- Variabilele de sistem în care au fost folosite cuvintele „master” și „slave” au fost eliminate: Com_replica_start (în loc de Com_slave_start); Com_replica_stop (în loc de Com_slave_stop); Com_show_replica_status (în loc de Com_show_slave_status); Com_show_replicas (în loc de Com_show_slave_hosts); Com_show_binary_log_status (în loc de Com_show_master_status); și Com_change_replication_source (în loc de Com_change_master).
- Variabila de sistem group_replication_allow_local_lower_version_join a fost marcată ca depășită. Opțiunile anterioare marcate ca depășite „—no-dd-upgrade”, „—old”, „—new”, „—language”, „—admin-ssl” și variabilele binlog_transaction_dependency_tracking, group_replication_recovery_complete_at, avoid_temporal_upgrade, show_old_temporals și default_authentication_plugin au fost eliminate.sslTablele INFORMATION_SCHEMA.TABLESPACES, care nu erau utilizate, au fost eliminate.
- Suportul pentru utilizarea valorii LOW_PRIORITY împreună cu expresia „LOCK TABLES … WRITE” a fost oprit.
- Suportul pentru utilizarea modificatorului AUTO_INCREMENT împreună cu tipurile FLOAT și DOUBLE a fost oprit.
- Utilitarul mysql_ssl_rsa_setup a fost eliminat — în timpul compilării cu OpenSSL.
- MySQL poate genera automat fișierele SSL și RSA lipsă la pornire. serverul Utilitarul mysql_upgrade, care nu este utilizat cu versiunea MySQL 8.0.16, a fost eliminat.
- Utilitarele mysqlpump, lz4_decompress și zlib_decompress, care ar trebui să fie înlocuite cu utilitarul mysqldump sau comenzile dump din shell-ul interactiv, au fost eliminate.
- Au fost eliminate pluginurile: authentication_fido, authentication_fido_client (ar trebui folosit authentication_webauthn); keyring_file (ar trebui folosit component_keyring_file); keyring_encrypted_file (ar trebui folosit component_keyring_encrypted_file); keyring_oci (ar trebui folosit component_keyring_oci).
- Au fost eliminate modulele: authentication_fido, authentication_fido_client (ar trebui să folosești authentication_webauthn); keyring_file (ar trebui să folosești component_keyring_file); keyring_encrypted_file (ar trebui să folosești component_keyring_encrypted_file); keyring_oci (ar trebui să folosești component_keyring_oci).
- Suportul pentru expresia ENGINE a fost întrerupt, împreună cu diversele opțiuni pentru „DROP TABLESPACE” și „ALTER TABLESPACE”.
- Privilegiul „SET_USER_ID” a fost eliminat și nu mai poate fi specificat în expresiile GRANT.
- Funcțiile API au fost readuse: mysql_kill(), mysql_list_fields(), mysql_list_processes(), mysql_refresh(), mysql_reload(), mysql_shutdown() și mysql_ssl_set(), dintre care unele au fost refăcute folosind funcția mysql_real_query(). Aceste funcții au fost eliminate în ramura MySQL 8.3, dar au fost restaurate pentru suport în cadrul ramurii LTS MySQL 8.4.
- Au fost remediate 26 de vulnerabilități care pot fi exploatate de la distanță. Cea mai severă problemă are un nivel de pericol de 6.5 și este asociată cu o vulnerabilitate în openSSL. Vulnerabilitățile mai puțin periculoase afectează optimizatorul, InnoDB, Thread Pooling, Group Replication Plugin, Audit Plugin, DML, mysqldump.
Sursa: opennet.ro
