Coloro che abbiano installato MySQL sul proprio PC o server Linux qualche tempo fa stanno incappando oggi in un fastidioso errore 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. In questa rapida guida vedremo come risolvere il problema.

Trattazione aggiornata a Gennaio 2024 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 su Ubuntu 22.04. La procedura è comunque analoga per qualsiasi altra distribuzione che usi apt come gestore dei pacchetti

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna

Il messaggio di errore completo è simile al seguente:

An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://repo.mysql.com/apt/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29)

Viene visualizzato su tutti i sistemi sui quali sia stato installato MySQL utilizzando il repository ufficiale di 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é la copia installata di MySQL non viene aggiornata e rimane ferma ad una versione ormai obsoleta

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna - mysql logo spotlight

errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): 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 dunque che la nuova firma crittografica è sconosciuta, e rifiuta l'installazione del nuovo pacchetto emettendo il messaggio in questione.

errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): Visualizzare la chiave scaduta

Per prima cosa, impartiamo il seguente comando:

sudo apt-key list

Questo elenca le chiavi installate, fra le quali dovrebbe figurare anche quella di MySQL Release Engineering

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna

Probabilmente verrà mostrato anche un errore simile a Warning: apt-key is deprecated, che possiamo tranquillamente ignorare.

La cosa importante da notare è il prefisso [ expired] mostrato accanto ad una delle voci. Questo ci conferma che la chiave è, appunto, scaduta.

errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): Rimuovere la vecchia chiave

Procediamo eliminando la chiave scaduta impartendo il comando appropriato all'errore che stiamo ricevendo:

  • errore NO_PUBKEY B7B3B788A8D3785C => impartire sudo apt-key del "859B E8D7 C586 F538 430B 19C2 467B 942D 3A79 BD29"
  • errore NO_PUBKEY 467B942D3A79BD29 => impartire sudo apt-key del "A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5"

In caso di dubbio, possiamo tranquillamente lanciarli entrambi! In ogni caso, però, 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... ma, purtroppo, risponde OK sia in caso il comando abbia avuto effettivamente successo, sia in caso la chiave sia già stata rimossa o non esista!

Per assicurasi 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

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna

errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): Aggiungere la nuova chiave

Siamo ora nelle condizioni ideali per aggiungere la nuova chiave utilizzata da MySQL. Allo scopo, basta impartire:

curl https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/webstackup-mysql.gpg > /dev/null

Lanciando poi ancora una volta sudo apt-key list, dovremmo poter vedere la nuova chiave appena aggiunta alla lista

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna - nuova chiave pgp mysql

Aggiornare la lista dei pacchetti disponibili

Possiamo ora aggiornare la cache dei pacchetti disponibili impartendo

sudo apt update

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna

Da notare che, ora, il messaggio di errore non si presenta più.

Aggiornare MySQL

Se, fino ad oggi, visualizzavamo il messaggio di errore errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29), è 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

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna

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)

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna - zzmysqldump spotlight

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:

» Leggi: Aggiornare Ubuntu: quali differenze fra apt-get update, apt-get upgrade e apt-get dist-upgrade? Il modo migliore è... zzupdate!

Linux (Ubuntu): come risolvere errore NO_PUBKEY B7B3B788A8D3785C oppure 467B942D3A79BD29 MySQL non si aggiorna - zzupdate spotlight

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!