Stavo cercando di eseguire il backup del database utilizzando il comando MySQL dump, tuttavia, il comando non è riuscito con un messaggio di errore "Errore:accesso negato; è necessario (almeno uno dei) privilegi PROCESS per questa operazione' . Ecco il messaggio di errore completo.
$ mysqldump -u dbuser -p tg_db > tg_db.sql Enter password: mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
Ho scaricato il database in questo modo per molti anni e il comando è fallito all'improvviso. Come ho risolto questo errore? Eccoci.
Correzione errore:accesso negato; è necessario (almeno uno dei) privilegi PROCESS per questa operazione
Tutto quello che ho fatto è stato aggiungere "--no-tablespaces
' opzione al comando come mostrato di seguito:
$mysqldump -u dbuser -p tg_db --no-tablespaces > tg_db.sql
E ha funzionato. Allora cos'è --no-tablespaces
opzione e perché dovrei aggiungerla?
Bene, questo cambiamento è avvenuto dalla versione MySQL 5.7.31+ e la versione installata sul mio server era 8.0.23. Secondo la documentazione,
mysqldump richiede almeno il privilegio SELECT per le tabelle scaricate, SHOW VIEW per le viste scaricate, TRIGGER per i trigger scaricati, LOCK TABLES se l'opzione –single-transaction non viene utilizzata e (a partire da MySQL 8.0.21) PROCESS se –no-tablespaces l'opzione non è utilizzata. Alcune opzioni potrebbero richiedere altri privilegi, come indicato nelle descrizioni delle opzioni.
Dai un'occhiata anche all'opzione –no-tablespaces. Questa opzione rimuove il CREATE LOGFILE GROUP
e CREATE TABLESPACE
dichiarazioni dall'output.
Ma perché PROCESS
il privilegio è richiesto per mysqldump
comando? Perché mysqldump
tenta di accedere a INFORMATION_SCHEMA.FILES
tabella che richiede il privilegio PROCESS. Bene, i privilegi possono essere aggiunti tramite GRANT
a livello globale, o un singolo database o tabella. Ma il PROCESS
il privilegio deve essere aggiunto a livello globale come mostrato di seguito.
GRANT PROCESS ON *.* TO user@localhost;
Perché questo errore non viene visualizzato per tutti gli utenti? L'utente root MySQL non è interessato, ovviamente. Il comportamento potrebbe essere diverso per gli altri utenti in base ai loro livelli di privilegi.