2010-10-20 27 views
29

Estoy intentando reunir todas las opciones que necesito para mysqldump para crear todo lo que usa mi base de datos de aplicaciones en un solo script. Esto incluye la base de datos y todos los usuarios/contraseñas/privilegios de la base de datos.Uso de mysqldump y usuarios de la base de datos

lo tengo todo resuelto con la excepción de la pieza de usuario ... esto es lo que estoy usando actualmente:

mysqldump -h host -u root -p \ 
    --add-drop-database --routines -B database_name > backup.sql 

Por lo tanto, lo que me estoy perdiendo?

+0

MySQL no van a ser almacenados en 'database_name'. – ceejayoz

+0

Me gustaría vincular a [esta solución en DBA stackexchange] (http://dba.stackexchange.com/questions/23265/mysql-show-grants-for-all-users/127529#127529). – knocte

Respuesta

36

Los usuarios/contraseñas/privilegios de la base de datos se mantienen en la base de datos mysql, y no serán volcados con su comando de volcado. Vas a tener que añadir que la base de datos así a la lista de DB para volcar:

mysqldump ... --routines --databases database_name mysql > backup.sql 

o simplemente volcar todo:

mysqldump ... --routines --all-databases > backup.sql 
+0

Perfecto - eso es lo que acabo de descubrir. Sugiero que solo avisemos a las personas que el dumping/restauración de mysql db vs el uso del script al que me he vinculado podría tener algunos efectos involuntarios. si los dos servidores no son imágenes especulares el uno del otro (no tienen los mismos db's). –

+0

Recuerde que la base de datos mysql contiene información sobre bases de datos que no está descargando. No sé qué sucederá cuando importe esos metadatos a un nuevo servidor de base de datos. – Halfgaar

+0

En realidad, yo quería lo opuesto. Quería que todas las bases de datos fueran "vacías", pero NO la información del usuario, etc. Así que utilicé una lista explícita de dbs, en lugar de todos los dbs para evitar el dumping de la base de datos "mysql". – BuvinJ

9

lo tanto, tuve un malentendido fundamental. Los usuarios no son específicos de una base de datos, sino que se crean a nivel de servidor.

Puede ver todos los usuarios existentes con la siguiente consulta:

SELECT * FROM mysql.user; 

Sabiendo esto, es bastante obvio que mysqldump no debe hacer nada con los usuarios. Sin embargo, si necesita una respuesta para exportar/importar usuarios y permanentes, le sugiero que consulte el siguiente artículo: me ayudó.

http://pento.net/2009/03/12/backing-up-permissions-for-individual-databases/

Mis disculpas por el ruido en el tablero, pero pensé que había que dejar el cargo en caso que alguien más tiene el mismo malentendido.

+4

No, esto fue lo que se debe hacer. Además, si esta publicación fue lo que REALMENTE te permitió resolverla, entonces debes marcar ESTA RESPUESTA como "la respuesta" en lugar de la otra. Solo pensé en compartir. – jcolebrand

+3

FYI el enlace al que se hace referencia muestra una instrucción SQL que da un error con algo así como "Uso incorrecto de UNION y INTO", la solución es mover INTO a la última instrucción SELECT – knocte

+0

Sí, esta es la respuesta. Responde Y necesitarás usar tu cerebro un poco, no solo copiar más allá de un comando de tipo – Johny19

19

Cuando el vertido de la base de datos mysql, no se olvide: los usuarios

--flush-privileges Emit a FLUSH PRIVILEGES statement after dumping the mysql 
        database. This option should be used any time the dump 
        contains the mysql database and any other database that 
        depends on the data in the mysql database for proper 
        restore. 
+0

Esto es lo que hizo el truco para mí. Gracias –

Cuestiones relacionadas