2011-03-29 9 views
49

¿Cómo ordeno a mysqldump que haga una copia de seguridad con los nombres de columna en las instrucciones de inserción?
En mi caso no lo hice una normal de copia de seguridad con inserto de SQL que resulta en la estructuraMysqldump: crear nombres de columna para inserciones al realizar una copia de seguridad

LOCK TABLES `users` WRITE; 
/*!40000 ALTER TABLE `users` 
INSERT INTO `users` VALUES (1 

.

Ahora fui adelante y eliminó una columna del esquema en los usuarios. Después de esto, cuando ejecuto la copia de seguridad de sql recibo un error de discrepancia de número de columna.

Para solucionar esto, ¿cómo hago para dar instrucciones a mysqldump para que escriba también los nombres de las columnas? Así es como lo hago ahora

mysqldump --host=${dbserver} --user=${dbusername} --password=${dbpassword} \ 
      --no-create-db --no-create-info --extended-insert --single-transaction \ 
      --compress tablename 

En un nivel más general, ¿cuál es la mejor práctica para gestionar estos cambios en el esquema?

+1

¿Cómo van campos especificados explícitamente ayudarle? Después de eliminar una columna, incluso la consulta con los campos especificados será incorrecta. – zerkms

Respuesta

113

Uso --complete-insert en el comando mysqldump params

+6

¿Existe alguna razón para que esto no sea el comportamiento predeterminado de mysqldump? – paradiso

+4

@paradiso Creo que eso es porque 'mysqldump' se usa mucho para copias de seguridad, y es bueno que sean lo más pequeño posible. – Cacovsky

+6

@paradiso también tenga en cuenta que mysqldump está volcando de forma predeterminada la estructura y los datos, lo que hace que la información de los nombres de columna sea inútil. Tener los nombres de columna especificados es útil cuando carga valores en una tabla cuya estructura puede diferir de la que extrajo. – Ninj

Cuestiones relacionadas