Come faccio a creare un utente MySQL di sola lettura per scopi di backup con mysqldump?


14

Sto usando lo automysqlbackupscript per scaricare i miei database mysql, ma voglio avere un utente di sola lettura per farlo in modo da non memorizzare la mia password del database di root in un file di testo normale.

Ho creato un utente in questo modo:

grant select, lock tables on *.* to 'username'@'localhost' identified by 'password';

Quando corro mysqldump(attraverso automysqlbackupo direttamente) ricevo il seguente avviso:

mysqldump: Got error: 1044: Access denied for user 'username'@'localhost' to database 'information_schema' when using LOCK TABLES

Sto sbagliando? Ho bisogno di sovvenzioni aggiuntive per il mio utente di sola lettura? O può solo rootbloccare il information_schematavolo? Cosa sta succedendo?

Modificare:

GAH e ora funziona. Potrei non aver eseguito FLUSH PRIVILEGES in precedenza.

A parte questo, con quale frequenza si verifica automaticamente?

Modificare:

No, non funziona. L'esecuzione mysqldump -u username -p --all-databases > dump.sqlmanuale non genera un errore, ma non scarica information_schema. automysqlbackupgenera un errore.


Oops ... dalla pagina man per mysqldump: mysqldump non scarica il database INFORMATION_SCHEMA. Se si denomina esplicitamente quel database sulla riga di comando, mysqldump lo ignora silenziosamente Sembra che la pagina man sia obsoleta (e genera un avviso) o che automysqlbackupsta eseguendo alcuni controlli aggiuntivi sul dump per information_schema. Non sono sicuro di quale sia, ma non è correlato alle sovvenzioni degli utenti.
stickmangum dal

1
Non è un problema GRANT. Non è necessario eseguire il backup di INFORMATION_SCHEMA (vedere: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger

1
Per aggiungere ciò che ha detto SmallClanger, INFORMATION_SCHEMA è un database virtuale, ricostruito ogni volta che MySQL viene riavviato, quindi non ha senso eseguire il backup perché non è possibile ripristinarlo comunque.
John Gardeniers,

Risposte:


4

Tali autorizzazioni dovrebbero essere tutto ciò che è necessario per mysqldump.

Dato che hai concesso LOCK TABLES, ed è un errore su LOCK TABLES, sembra che le autorizzazioni siano incoerenti. Hai eseguito un FLUSH PRIVILEGES?


1

Oops ... dalla pagina man per mysqldump:

mysqldump does not dump the INFORMATION_SCHEMA database. If you name that database explicitly on the command line, mysqldump silently ignores it

Sembra che la pagina man sia obsoleta (e genera un avviso), o automysqlbackupsta eseguendo alcuni controlli aggiuntivi sul dump per information_schema.

Non sono sicuro di quale sia, ma non è correlato alle sovvenzioni degli utenti.

modificare

Sì, è un bug nella automysqlbackupversione 2.5.1 (usando MySQL 5.1.41 in Ubuntu 10.04) - tenta di eseguire il backup information_schemaquando non dovrebbe.

FIX: aggiungi information_schemaa alla DBEXCLUDEriga 76 dello script.


Non è un problema GRANT. Non è necessario eseguire il backup di INFORMATION_SCHEMA (vedere: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger

Per aggiungere ciò che ha detto SmallClanger, INFORMATION_SCHEMA è un database virtuale, ricostruito ogni volta che MySQL viene riavviato, quindi non ha senso eseguire il backup perché non è possibile ripristinarlo comunque.
John Gardeniers,

0

Creare un utente

GRANT USAGE ON *.* TO 'dump'@'localhost' IDENTIFIED BY 'plaintext-pass';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost';

Controlla i privilegi

mysql> SHOW GRANTS FOR dump@'localhost';
+-----------------------------------------------------------------------------------------------+
| Grants for dump@localhost                                                                     |
+-----------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dump'@'localhost'                                                      |
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost' |
+-----------------------------------------------------------------------------------------------+

Utilizzare yor editor preferito per creare il file ~/.my.cnfconchmod 400

[client]
user=dump
password=plaintext-pass

Crea una cartella per i dump, proprio come esempio

mkdir ~/db-dumps

Controlla se funziona

mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/manual-my-db-dump-`date +%F`.sql.gz

Facoltativamente, puoi creare discariche dailye weeklyquindi rimuovere tutte le dailyversioni precedenti al mese

#m h  dom mon dow   command
0  3  *   *   0,2-6 /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/daily-my-db-dump-`date +%F`.sql.gz;
0  3  *   *   1     /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/weekly-my-db-dump-`date +%F`.sql.gz;
0  4  *   *   *     /usr/bin/find ~/db-dumps/ -name "daily-*" -type f -mtime +30 -exec rm -f {} \;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.