Linee guida generali di MySQL
Vedere Requisiti di sistema per le versioni supportate di MySQL.
L'Adobe fortemente consiglia di osservare il seguente standard durante la configurazione del database:
- Adobe Commerce utilizza i trigger del database MySQL per migliorare l'accesso al database durante la reindicizzazione. Vengono creati quando la modalità indicizzatore è impostata su pianificazione. L’applicazione non supporta i trigger personalizzati nel database, poiché tali trigger possono introdurre incompatibilità con le versioni future di Adobe Commerce.
- Acquisisci familiarità con le potenziali limitazioni del trigger MySQL prima di continuare.
- Per migliorare la postura di sicurezza del database, attivare la modalità SQL
STRICT_ALL_TABLES
per impedire l'archiviazione di valori di dati non validi, che potrebbero causare interazioni di database indesiderate. - Adobe Commerce non supporta la replica basata su istruzioni MySQL. Utilizzare only replica basata su righe.
CREATE TEMPORARY TABLE
istruzioni nelle transazioni, che sono incompatibili con le implementazioni del database, utilizzando la replica basata su GTID, ad esempio istanze di seconda generazione di Google Cloud SQL. Considera MySQL per Cloud SQL 8.0 come alternativa.Installazione di MySQL su Ubuntu
Adobe Commerce 2.4 richiede un'installazione pulita di MySQL 8.0. Per istruzioni sull'installazione di MySQL nel computer, seguire i collegamenti riportati di seguito.
Se si prevede di importare un numero elevato di prodotti, è possibile aumentare il valore di max_allowed_packet
che è maggiore del valore predefinito, ovvero 16 MB.
max_allowed_packet
. I clienti di Adobe Commerce su infrastruttura cloud Starter possono aumentare il valore aggiornando la configurazione nel file /etc/mysql/mysql.cnf
.Per aumentare il valore, aprire il file /etc/mysql/mysql.cnf
in un editor di testo e individuare il valore per max_allowed_packet
. Salvare le modifiche apportate al file mysql.cnf
, chiudere l'editor di testo e riavviare MySQL (service mysql restart
).
Per verificare facoltativamente il valore impostato, immettere il comando seguente al prompt mysql>
:
SHOW VARIABLES LIKE 'max_allowed_packet';
Quindi Configurare l'istanza del database.
Modifiche a MySQL 8
Per Adobe Commerce 2.4 è stato aggiunto il supporto per MySQL 8.
In questa sezione vengono descritte le modifiche principali apportate a MySQL 8 di cui gli sviluppatori devono essere a conoscenza.
Larghezza rimossa per i tipi interi (spaziatura interna)
La specifica della larghezza di visualizzazione per i tipi di dati integer (TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT) è stata rimossa in MySQL 8.0.17. Le istruzioni che includono definizioni dei tipi di dati nell'output non mostrano più la larghezza di visualizzazione per i tipi interi, ad eccezione di TINYINT(1). I connettori MySQL presuppongono che le colonne TINYINT(1) abbiano avuto origine come colonne BOOLEANE. Questa eccezione consente loro di continuare a fare tale presupposto.
Esempio
Descrizione di admin_user in mysql 8.19
int unsigned
NULL
auto_increment
firstname
varchar(32)
NULL
lastname
varchar(32
)NULL
email
varchar(128)
NULL
username
varchar(40)
NULL
password
varchar(255)
NULL
created
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
modified
timestamp
CURRENT_TIMESTAMP
DEFAULT_GENERATED
sull'aggiornamento CURRENT_TIMESTAMP
logdate
timestamp
NULL
lognum
smallint unsigned
0
Ad eccezione di TINYINT(1), tutte le spaziature intere (TINYINT > 1, SMALLINT, MEDIUMINT, INT, BIGINT) devono essere rimosse dal file db_schema.xml
.
Per ulteriori informazioni, vedere https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-feature.
Comportamento predefinito di ORDER BY
Prima della versione 8.0, le voci venivano ordinate in base alla chiave esterna. L’ordinamento predefinito dipende dal motore utilizzato.
Specificare sempre un ordinamento se il codice dipende da un ordinamento specifico.
Qualificatori ASC e DESC obsoleti per GROUP BY
A partire da MySQL 8.0.13, i qualificatori ASC
o DESC
obsoleti per le clausole GROUP BY
sono stati rimossi. Le query che in precedenza utilizzavano l'ordinamento GROUP BY
possono produrre risultati diversi dalle versioni precedenti di MySQL. Per generare un determinato ordinamento, specificare una clausola ORDER BY
.
Commerce e MySQL 8
Sono state apportate alcune modifiche ad Adobe Commerce per supportare correttamente MySQL 8.
Comportamento query e inserimento
Adobe Commerce ha disabilitato il comportamento di convalida regolare impostando SET SQL_MODE='' in /lib/internal/Magento/Framework/DB/Adapter/Pdo/Mysql.php:424.
. Se la convalida è disattivata, è possibile che MySQL tronchi i dati. In MySQL il comportamento della query è cambiato: Select * on my_table where IP='127.0.0.1'
non restituisce più risultati perché l'indirizzo IP viene ora visualizzato correttamente come stringa, anziché come numero intero.
Aggiornamento da MySQL 5.7 a MySQL 8
Per aggiornare correttamente MySQL dalla versione 5.7 alla versione 8, è necessario seguire i passaggi seguenti nell'ordine indicato:
-
Aggiornare Adobe Commerce alla versione 2.4.0.
Esegui il test completo e assicurati che il sistema funzioni come previsto. -
Abilita modalità di manutenzione:
code language-bash bin/magento maintenance:enable
-
Eseguire un backup del database:
code language-bash bin/magento setup:backup --db
-
Aggiornare MySQL alla versione 8.
-
Importare i dati di backup in MySQL.
-
Pulisci la cache:
code language-bash bin/magento cache:clean
-
Disattiva modalità di manutenzione:
code language-bash bin/magento maintenance:disable
Configurazione dell’istanza del database
Questa sezione illustra come creare un’istanza di database per Adobe Commerce. Sebbene sia consigliata una nuova istanza di database, è possibile installare Adobe Commerce con un'istanza di database esistente.
Per configurare un'istanza di database MySQL:
-
Accedere al server del database come qualsiasi utente.
-
Passare al prompt dei comandi MySQL:
code language-bash mysql -u root -p
-
Immettere la password dell'utente MySQL
root
quando richiesto. -
Immettere i comandi seguenti nell'ordine indicato per creare un'istanza di database denominata
magento
con nome utentemagento
:code language-sql create database magento;
code language-sql create user 'magento'@'localhost' IDENTIFIED BY 'magento';
code language-sql GRANT ALL ON magento.* TO 'magento'@'localhost';
code language-sql flush privileges;
-
Immettere
exit
per uscire dal prompt dei comandi. -
Verificare il database:
code language-bash mysql -u magento -p
Se viene visualizzato il monitoraggio MySQL, il database è stato creato correttamente. Se viene visualizzato un errore, ripetere i comandi precedenti.
-
Se il server Web e il server di database si trovano su host diversi, eseguire le attività descritte in questo argomento sull'host del server di database, quindi vedere Configurare una connessione remota al database MySQL.
È consigliabile configurare l'istanza di database in base alle esigenze aziendali. Durante la configurazione del database, tenere presente quanto segue:
-
Gli indicizzatori richiedono valori
tmp_table_size
emax_heap_table_size
superiori (ad esempio, 64 M). Se si configura il parametrobatch_size
, è possibile regolare tale valore insieme alle impostazioni delle dimensioni della tabella per migliorare le prestazioni dell'indicizzatore. Per ulteriori informazioni, consultare la Guida all'ottimizzazione. -
Per prestazioni ottimali, assicurarsi che tutte le tabelle indice MySQL e Adobe Commerce possano essere mantenute in memoria, ad esempio configurare
innodb_buffer_pool_size
. -
La reindicizzazione su MariaDB 10.4 richiede più tempo rispetto ad altre versioni di MariaDB o MySQL. Consulta Best practice per la configurazione.
-
-
Affinché i campi MySQL
TIMESTAMP
seguano le preferenze e la composizione previste dall'architettura dello schema dichiarativo dell'applicazione, la variabile di sistemaexplicit_defaults_for_timestamp
deve essere impostata suon
.Riferimenti:
Se questa impostazione non è abilitata,
bin/magento setup:db:status
segnala sempre cheDeclarative Schema is not up to date
.
explicit_defaults_for_timestamp
è obsoleta. Questa impostazione consente di controllare i comportamenti di MARCA TEMPORALE obsoleti che verranno rimossi in una futura versione di MySQL. Quando questi comportamenti vengono rimossi, viene rimossa anche l'impostazione explicit_defaults_for_timestamp
.explicit_defaults_for_timestamp
per MySQL (MariaDB) è OFF.La reindicizzazione su MariaDB 10.4 e 10.6 richiede più tempo rispetto alle versioni precedenti di MariaDB o MySQL. Per accelerare la reindicizzazione, si consiglia di impostare i seguenti parametri di configurazione MariaDB:
Se si verifica un peggioramento delle prestazioni non correlato all'indicizzazione dopo l'aggiornamento a MariaDB 10.6, provare ad abilitare l'impostazione --query-cache-type
. Ad esempio, --query-cache-type=ON
.
Prima di aggiornare Adobe Commerce ai progetti di infrastruttura cloud, potrebbe essere necessario aggiornare anche MariaDB (consulta le best practice per l'aggiornamento di MariaDB).
Ad esempio:
- Adobe Commerce 2.4.6 con MariaDB versione 10.5.1 o successiva
- Adobe Commerce 2.3.5 con MariaDB versione 10.3 o precedente
Oltre a questi consigli, è necessario consultare l'amministratore del database per configurare i seguenti parametri: