¿Cómo creo un usuario MySQL de solo lectura para propósitos de respaldo con mysqldump?

14

Estoy usando el automysqlbackupscript para volcar mis bases de datos mysql, pero quiero tener un usuario de solo lectura para hacer esto para que no almacene mi contraseña de base de datos raíz en un archivo de texto sin formato.

He creado un usuario así:

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

Cuando ejecuto mysqldump(ya sea a través automysqlbackupo directamente) me sale la siguiente advertencia:

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

¿Lo estoy haciendo mal? ¿Necesito subvenciones adicionales para mi usuario de solo lectura? ¿O solo puede rootbloquear la information_schemamesa? ¿Que esta pasando?

Editar:

GAH y ahora funciona. Es posible que no haya ejecutado FLUSH PRIVILEGES anteriormente.

Además, ¿con qué frecuencia ocurre esto automáticamente?

Editar:

No, no funciona Ejecutarlo mysqldump -u username -p --all-databases > dump.sqlmanualmente no genera un error, pero no vuelca information_schema. automysqlbackupplantea un error

stickmangumby
fuente
Vaya ... desde la página de mysqldumpmanual de: mysqldump no volca la base de datos INFORMATION_SCHEMA. Si nombra esa base de datos explícitamente en la línea de comando, mysqldump la ignora silenciosamente Parece que la página del manual está desactualizada (y genera una advertencia) o automysqlbackupestá realizando algunas comprobaciones adicionales en el volcado information_schema. No estoy seguro de cuál es, pero no está relacionado con las subvenciones de los usuarios.
stickmangumby
1
No es un problema de SUBVENCIÓN. No necesita hacer una copia de seguridad de INFORMATION_SCHEMA (consulte: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger
1
Para agregar a lo que dijo SmallClanger, INFORMATION_SCHEMA es una base de datos virtual, reconstruida cada vez que se reinicia MySQL, por lo que no tiene sentido hacer una copia de seguridad porque no puede restaurarla de todos modos.
John Gardeniers

Respuestas:

4

Esos permisos deberían ser todo lo que se necesita para mysqldump.

Dado que ha otorgado LOCK TABLES, y está dando error en LOCK TABLES, parece que los permisos son inconsistentes. ¿Has ejecutado un FLUSH PRIVILEGES?

Shane Madden
fuente
1

Vaya ... de la página del manual para mysqldump:

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

Parece que la página del manual está desactualizada (y genera una advertencia) o automysqlbackupestá realizando algunas verificaciones adicionales en el volcado information_schema.

No estoy seguro de cuál es, pero no está relacionado con las subvenciones de los usuarios.

Editar

Sí, es un error en la automysqlbackupversión 2.5.1 (usando MySQL 5.1.41 en Ubuntu 10.04): intenta hacer una copia de seguridad information_schemacuando no debería.

REVISIÓN: Agregar information_schemaa la DBEXCLUDElínea 76 del script.

stickmangumby
fuente
No es un problema de SUBVENCIÓN. No necesita hacer una copia de seguridad de INFORMATION_SCHEMA (consulte: dev.mysql.com/doc/refman/5.0/en/information-schema.html )
SmallClanger
Para agregar a lo que dijo SmallClanger, INFORMATION_SCHEMA es una base de datos virtual, reconstruida cada vez que se reinicia MySQL, por lo que no tiene sentido hacer una copia de seguridad porque no puede restaurarla de todos modos.
John Gardeniers
0

Crear usuario

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

Consultar privilegios

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' |
+-----------------------------------------------------------------------------------------------+

Use su editor favorito para crear un archivo ~/.my.cnfconchmod 400

[client]
user=dump
password=plaintext-pass

Crear carpeta para volcados, solo como ejemplo

mkdir ~/db-dumps

Comprueba si funciona

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

Opcionalmente, puede hacer volcados dailyy weeklyluego eliminar todos los dailymás antiguos que el mes

#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 {} \;
Vasilii Suricov
fuente