Zkoušel jsem zálohovat databázi pomocí příkazu MySQL dump, ale příkaz selhal s chybovou zprávou ‘Chyba:Přístup odepřen; pro tuto operaci potřebujete (alespoň jedno) oprávnění PROCESS’ . Zde je úplná chybová zpráva.
$ 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
Databázi jsem takto vyhazoval mnoho let a příkaz najednou selhal. Jak jsem vyřešil tuto chybu? Tady to je.
Opravit chybu:Přístup odepřen; pro tuto operaci potřebujete (alespoň jedno) oprávnění PROCESS
Vše, co jsem udělal, bylo přidat „--no-tablespaces
‘ možnost k příkazu, jak je uvedeno níže:
$mysqldump -u dbuser -p tg_db --no-tablespaces > tg_db.sql
A to fungovalo. Co je tedy --no-tablespaces
možnost a proč bych ji měl přidat?
Tato změna nastala od verze MySQL 5.7.31+ a verze nainstalovaná na mém serveru byla 8.0.23. Podle dokumentace
mysqldump vyžaduje alespoň oprávnění SELECT pro dumpingové tabulky, SHOW VIEW pro dumpingové pohledy, TRIGGER pro dumpingové spouštěče, LOCK TABLES, pokud není použita volba –single-transaction, a (od MySQL 8.0.21) PROCESS, pokud –no-tablespaces možnost se nepoužívá. Některé možnosti mohou vyžadovat jiná oprávnění, jak je uvedeno v popisech možností.
Podívejte se také na možnost –no-tablespaces. Tato možnost odebere CREATE LOGFILE GROUP
a CREATE TABLESPACE
výpisy z výstupu.
Ale proč PROCESS
pro mysqldump
je vyžadováno oprávnění příkaz? Protože mysqldump
pokusí o přístup k INFORMATION_SCHEMA.FILES
tabulka, která vyžaduje oprávnění PROCESS. Oprávnění lze přidat pomocí GRANT
na globální úrovni, nebo jednu databázi či tabulku. Ale PROCESS
oprávnění je třeba přidat na globální úrovni, jak je uvedeno níže.
GRANT PROCESS ON *.* TO user@localhost;
Proč se tato chyba nezobrazuje všem uživatelům? Uživatel root MySQL samozřejmě není ovlivněn. Chování ostatních uživatelů se může lišit podle úrovně jejich oprávnění.