Coloro i quali abbiano installato MySQL sul proprio PC o server Linux qualche tempo fa stanno incappando oggi in un fastidioso errore simile al seguente: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. The following signatures were invalid: EXPKEYSIG B7B3B788A8D3785C MySQL Release Engineering. In altri casi, lo stesso problema può esprimersi con un messaggio simile al seguente: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29). Il messaggio appare ogni volta che usiamo apt per ricercare gli aggiornamenti oppure tentiamo di aggiornare MySQL stesso. Ebbene: in questa rapida guida vedremo come risolvere il problema.
Trattazione aggiornata a Dicembre 2025 per rispecchiare la scadenza della chiave B7B3B788A8D3785C e la necessità di aggiungere quella nuova
La presente guida è stata testata sul server di TurboLab.it con MySQL 8 e Ubuntu 22.04. La procedura è comunque analoga per qualsiasi altra distribuzione che usi apt come gestore dei pacchetti

Il messaggio viene visualizzato solo in caso MySQL sia stato installato utilizzando il repository ufficiale del produttore (Oracle/MySQL) invece che tramite il pacchetto fornito dalla propria distribuzione. Si tratta della modalità che io consiglio, e che ho indicato anche nella guida dedicata:
» Leggi: Guida: come installare MySQL 8 su Ubuntu (Linux Server e PC Desktop)
Oltre al fastidio di visualizzare questo avviso, la situazione dovrebbe essere corretta al più presto perché, in questa situazione, la copia installata di MySQL non viene aggiornata e rimane ferma a una versione obsoleta

Errore NO_PUBKEY/EXPKEYSIG B7B3B788A8D3785C: la causa
L'errore dipende dal fatto che il team di sviluppo di MySQL ha sostituito la chiave crittografica GPG con la quale firma le nuove versioni dei pacchetti (fonte). Di conseguenza, la corrispondente chiave pubblica che avevamo aggiunto precedentemente alla lista di quelle "autorizzate" non combacia più con quella oggi in uso.
Il sistema di aggiornamento integrato nel sistema operativo rileva che la nuova firma crittografica è sconosciuta, e rifiuta l'installazione del nuovo pacchetto emettendo il messaggio in questione.
Errore NO_PUBKEY/EXPKEYSIG B7B3B788A8D3785C: visualizzare la chiave scaduta
Per prima cosa, impartiamo il seguente comando:
sudo apt-key list
[ probabilmente verrà mostrato anche un errore simile a Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead, che possiamo tranquillamente ignorare ]

Il comando appena impartito elenca le chiavi presenti sul sistema locale, fra le quali dovrebbe figurare anche quella di MySQL Release Engineering.
La cosa importante da notare è il prefisso [ expired] mostrato accanto ad alcune voci... e, in particolare, proprio accanto alla chiave MySQL Release Engineering. Questo ci conferma che la chiave è scaduta.
Errore NO_PUBKEY/EXPKEYSIG B7B3B788A8D3785C: rimuovere la vecchia chiave
Procediamo eliminando la chiave scaduta. Allo scopo, dobbiamo utilizzare un comando simile al seguente:
sudo apt-key del "identificativo-chiave"
Al posto di identificativo-chiave dobbiamo utilizzare la stringa mostrata accanto alla chiave che desideriamo effettivamente eliminare. Osservando il seguente screenshot, ad esempio, notiamo che l'identificativo della chiave di MySQL Release Engineering è BCA4 3417 C3B4 85DD 128E C6D4 B7B3 B788 A8D3 785C

Per quanto detto in precedenza, impartiremo dunque:
sudo apt-key del "BCA4 3417 C3B4 85DD 128E C6D4 B7B3 B788 A8D3 785C"

Attenzione a conservare le virgolette!
Il comando mostra dapprima l'avviso Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)), che possiamo ignorare, poi solo il messaggio OK. Purtroppo, però, detto comando risponde OK sia in caso il comando abbia avuto effettivamente successo, sia in caso la chiave fosse già stata rimossa o non esista!
Per assicurarsi che l'operazione sia veramente andata a buon fine è dunque opportuno impartire di nuovo il precedente sudo apt-key list e constatare che la sezione relativa a MySQL Release Engineering sia sparita

Errore NO_PUBKEY/EXPKEYSIG B7B3B788A8D3785C: aggiungere la nuova chiave
Siamo ora nelle condizioni ideali per aggiungere la nuova chiave utilizzata da MySQL. Allo scopo, basta impartire:
curl https://raw.githubusercontent.com/TurboLabIt/webstackup/refs/heads/master/config/mysql/key.pgp | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/webstackup-mysql.gpg > /dev/null
Lanciando poi ancora una volta sudo apt-key list, dovremmo trovare la nuova chiave, senza la dicitura [ expired], e con una data di scadenza nel futuro ([expires: 2027-10-23])

Aggiornare la lista dei pacchetti disponibili
Possiamo ora aggiornare la cache dei pacchetti disponibili impartendo
sudo apt update

Da notare che, ora, il messaggio di errore non si presenta più.
Aggiornare MySQL
Se, fino ad oggi, visualizzavamo il messaggio di errore errore Errore NO_PUBKEY/EXPKEYSIG B7B3B788A8D3785C, è altamente probabile che la copia di MySQL installata sia divenuta obsoleta. È dunque importante valutare di svolgere subito l'aggiornamento, che ora funzionerà correttamente e scaricherà una build aggiornata

Ma, prima di proseguire all'upgrade, è imperativo effettuare un backup del database, di modo da poterlo ripristinare in caso di problemi. Abbiamo visto come farlo in modo ottimale e con un singolo comando in quest'altra guida:
» Leggi: MySQL/mysqldump: creare un file distinto/singolo per ogni database con zzmysqldump (script)

Una volta che il backup è pronto, procediamo con l'upgrade. Personalmente, preferisco cogliere l'occasione e aggiornare tutto il sistema, invece dei singoli pacchetti. Ho mostrato come farlo qui:

Chi lavori con MySQL da diversi anni ricorderà sicuramente che, in passato, era necessario lanciare manualmente mysql_upgrade dopo ogni installazione di un nuovo pacchetto. Oggi, invece, questa operazione non è più necessaria: il servizio principale di MySQL svolge infatti automaticamente questa operazione in caso fosse necessario. Evviva!