Passa al contenuto

Architettura di un database MySQL

Componenti, installazione e configurazione del RDBMS MySQL

MySQL è uno dei sistemi di gestione di database relazionali (RDBMS) più utilizzati al mondo. La sua architettura modulare consente di adattarlo a diverse esigenze, dall'uso personale a implementazioni su larga scala. In questo articolo esploreremo la sua struttura interna, le tipologie di licenze disponibili, i file di configurazione essenziali e le sue funzionalità principali. 


Le componenti architetturali

L’immagine sotto ben rappresenta le diverse componenti  architetturali. 

 

 

Tipologie di Licenze 

MySQL è distribuito tramite due modelli di licenza: 

  • GPL (General Public License): disponibile gratuitamente con restrizioni sulla distribuzione del codice sorgente modificato. 
  • Licenza Commerciale: offerta da Oracle, consente l'uso di MySQL senza le limitazioni della GPL, con supporto tecnico dedicato e funzionalità avanzate. 

 

Installazione dei Binari 

MySQL può essere installato tramite pacchetti precompilati o compilato dai sorgenti. I metodi di installazione più comuni includono: 

  • Pacchetti ufficiali: disponibili per sistemi Linux (RPM, DEB), Windows (MSI), e macOS (DMG). I pacchetti ufficiali possono essere scaricati dal sito ufficiale di MySQL: https://dev.mysql.com/downloads/
  • Compilazione dai sorgenti: permette ottimizzazioni specifiche per l'hardware e il sistema operativo utilizzato. 
  • Container e Cloud: disponibili immagini Docker e servizi gestiti come Amazon RDS e Google Cloud SQL. 

Per installare MySQL su un server Linux, i comandi principali sono: 

Ubuntu 

 

CentOS / RHEL 

 

 

File di Configurazione (my.cnf) 

Il principale file di configurazione di MySQL è my.cnf; esso contiene le 4

impostazioni globali e per singoli componenti. Si compone di diverse sezioni, ciascuna con uno scopo specifico: 

  • [mysqld]: Configurazioni principali per il server MySQL. 
  • [client]: Opzioni per il client MySQL, come host e porta predefiniti. 
  • [mysql]: Configurazioni per il client a riga di comando mysql. 
  • [mysqld_safe]: Opzioni per l'avvio sicuro del server MySQL. 
  • [mysqldump]: Opzioni per mysqldump, il comando di backup. 
  • [mysqladmin]: Configurazioni per l'utility mysqladmin, utile per la gestione del database. 
  • [mysqlhotcopy]: Opzioni per lo strumento mysqlhotcopy, usato per il backup di MyISAM. 

Sotto un piccolo esempio di file my.cnf: 

 

 Il file my.cnf si trova solitamente in /etc/my.cnf su Linux o C:\ProgramData\MySQL\my.ini su Windows. 

  

Default Database in MySQL 

Quando MySQL viene installato, include alcuni database di sistema fondamentali: 

  • mysql: Contiene le informazioni relative a utenti, privilegi, stored procedure e configurazioni interne. È essenziale per la gestione degli accessi e delle autorizzazioni. 
  • information_schema: Memorizza informazioni sulle strutture del database, come tabelle, colonne e vincoli. Utile per interrogare metadati senza accedere direttamente ai datafile. 
  • performance_schema: Raccoglie dati sulle prestazioni e sul carico del server, consentendo di analizzare query lente, blocchi e altre metriche utili per l'ottimizzazione. 
  • sys: Fornisce viste e funzioni preconfigurate per semplificare il monitoraggio delle prestazioni e la diagnostica del database. 

 

Struttura dei Datafile 

MySQL utilizza diversi file per la memorizzazione dei dati e della configurazione: 

  • Tabelle e indici: archiviati nei tablespace di InnoDB (.ibd) o nei file MyISAM (.MYD e .MYI). 
  • File di log: include i binari di log, error log e slow query log. 
  • File di configurazione: parametri e impostazioni di runtime. 


Relazione tra Database e Datafile 

In MySQL, un database è un contenitore logico per le tabelle e altri oggetti, mentre i datafile sono i file fisici che memorizzano i dati. La relazione tra database e datafile dipende dal motore di archiviazione utilizzato: 

  • MyISAM: Ogni tabella ha un file .MYD (dati) e un file .MYI (indici). 
  • InnoDB: Utilizza tablespace per archiviare i dati. I tablespace possono essere condivisi (ibdata1) o per tabella (.ibd).


Dimensione massima e crescita automatica 

  • InnoDB utilizza tablespace dinamici che possono crescere automaticamente. 
  • Il file ibdata1 può espandersi, ma non si restringe automaticamente. 
  • I file .ibd possono essere creati con una dimensione iniziale e crescere con il riempimento delle tabelle. 
  • MyISAM ha un limite teorico di 256TB per tabella, ma dipende dal file system. 

  

Tipi di Database: MyISAM, InnoDB , MEMORY Storage Engine e NDB Cluster Storage Engine 

 MyISAM 

  • Non supporta transazioni. 
  • Utilizza la tabella dei blocchi per gestire la concorrenza. 
  • Offre alte prestazioni nelle operazioni di lettura. 
  • I dati vengono memorizzati nei file .MYD e gli indici nei file .MYI. 

 

Caratteristiche di MyISAM in questo esempio: 

  • Velocità nelle query SELECT: adatto per siti con molti accessi in lettura, come blog e archivi di notizie. 
  • Table-level locking (blocco a livello di tabella), quindi meno adatto per scritture concorrenti. 
  • Manca il supporto per Foreign Key e transazioni, quindi non è consigliato per applicazioni OLTP (Online Transaction Processing). 

 

InnoDB 

  • Supporta transazioni con rollback e commit. 
  • Utilizza il locking a livello di riga per una maggiore concorrenza. 
  • Mantiene l'integrità referenziale con chiavi esterne. 
  • I dati e gli indici sono archiviati nel tablespace di InnoDB. 

 

Caratteristiche di InnoDB in questo esempio: 
  • Supporto per Foreign Key: se un cliente viene eliminato, i suoi ordini vengono cancellati automaticamente (ON DELETE CASCADE). 
  • Supporto per transazioni e commit/rollback. 
  • Row-level locking (blocco a livello di riga), utile per operazioni concorrenti su grandi database. 

 

MEMORY Storage Engine 

Il motore MEMORY (precedentemente noto come HEAP) memorizza i dati direttamente nella RAM, garantendo elevate prestazioni per operazioni di lettura e scrittura, ma con lo svantaggio che i dati vengono persi al riavvio del server. 

Caratteristiche principali: 

  • Velocissimo per le query: Poiché i dati risiedono in RAM, l’accesso è molto più rapido rispetto ai dischi. 
  • Perdita dei dati al riavvio: Essendo basato sulla RAM, non è adatto per dati persistenti. 
  • Indici solo HASH o BTREE: Gli indici possono essere di tipo HASH (più veloci per ricerche di uguaglianza) o BTREE. 
  • Utile per tabelle temporanee o cache: È comunemente usato per memorizzare dati temporanei o per caching delle query. 

 

 

NDB Cluster Storage Engine 

Il motore NDB Cluster è progettato per ambienti distribuiti e fornisce alta disponibilità, scalabilità orizzontale e tolleranza ai guasti. È il motore utilizzato in MySQL Cluster. 

Caratteristiche principali: 

  • Distribuzione dei dati su più nodi: I dati vengono replicati automaticamente tra i nodi per garantire alta disponibilità. 
  • Scalabilità orizzontale: Aggiungendo più nodi, il sistema può gestire carichi di lavoro più elevati. 
  • Transazioni supportate: Fornisce supporto per transazioni ACID, rendendolo adatto per applicazioni critiche. 
  • Failover automatico: Se un nodo fallisce, il cluster continua a funzionare con i dati disponibili negli altri nodi. 
  • Memorizzazione dei dati in RAM e su disco: I dati possono essere mantenuti in RAM per alte prestazioni, ma anche scritti su disco per la persistenza. 

 

Quando usare NDB Cluster? 

  • In applicazioni mission-critical che richiedono alta disponibilità (ad esempio, sistemi di telecomunicazione, e-commerce, banking). 
  • Per gestire grandi volumi di dati distribuiti su più server. 
  • Quando la scalabilità orizzontale è un requisito fondamentale. 

 

Sintesi delle differenze: 

  • MEMORY: Ottimo per dati temporanei e cache ultra-veloce, ma i dati si perdono al riavvio. 
  • NDB Cluster: Perfetto per ambienti critici distribuiti, alta disponibilità e failover automatico. 
  • InnoDB: Lo storage engine più usato, con supporto per transazioni, chiavi esterne e ottime prestazioni per OLTP. 
  • MyISAM: Veloce nelle operazioni di lettura, ma senza transazioni e con blocco a livello di tabella. 

 

Binary Logging in MySQL 

Il Binary Log (binlog) è un file in cui MySQL registra tutte le operazioni di modifica ai dati. È fondamentale per: 

  • Replica: Viene utilizzato per sincronizzare i database tra un master e uno o più replica. 
  • Recupero dati: Può essere usato per ripristinare le modifiche fino a un certo point in time in caso di guasto. 

Abilitazione del Binary Log 

Nel file my.cnf, bisogna aggiungere: 

[mysqld] 

log_bin = /var/log/mysql/mysql-bin.log 

binlog_format = ROW 

expire_logs_days = n 

  • log_bin: Abilita il binlog e specifica il percorso del file. 
  • binlog_format: Il formato ROW è consigliato perché registra le modifiche ai dati invece delle query eseguite. 
  • expire_logs_days: Definisce il numero di giorni prima che i binlog vengano automaticamente eliminati. 

 

Backup in MySQL 

I backup in MySQL sono essenziali per garantire la sicurezza dei dati. Alcuni dei metodi più comuni includono: 

  • mysqldump: Strumento per eseguire backup logici delle tabelle e dei database. 
  • mysqlhotcopy: Utile per il backup di tabelle MyISAM, eseguendo copie rapide dei file fisici. 
  • Replica binlog: Utilizza i binary log per creare una replica in tempo reale del database. 
  • Backup fisico con Percona XtraBackup: Strumento avanzato per il backup senza downtime di database InnoDB. 

Un'adeguata strategia di backup prevede la combinazione di più metodi e la pianificazione regolare tramite cronjob o strumenti di automazione. 

di Anna Bruno, pubblicato il 4 giugno 2026

Cosa deve comprendere un Health Check di un'istanza SQL Server - Terza parte
Analisi sulla memoria a livello del sistema operativo e di SQL Server, controlli a livello di database e sugli indici.