2009-02-03 19 views
12

uso el siguiente comando para la salida del esquema de una base de datos MySQL:¿Cómo suprimo el recuento de filas para las tablas agregadas (AUTO_INCREMENT = N) a la salida mysqldump?

mysqldump --no-data --skip-add-drop-table 

voy a hacer esto por dos bases de datos que desea comparar, y luego diff los dos archivos de salida. Esta es mi forma cruda de rastrear los cambios de la base de datos entre entornos.

Sin embargo, un inconveniente menor para mí es que el número de filas de cada tabla se incluye como parte de la definición de la tabla, ya que el valor AUTO_INCREMENT, así:

ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1; 

Me gustaría pensar que la '- El indicador "-no-data" suprimiría cualquier información sobre la tabla que haga referencia a los datos, incluido el número de filas.

¿Cómo suprimo AUTO_INCREMENT = N en esta salida?

Respuesta

22

Consulte este ticket en este problema. Fue cerrado como "No fijará"

usted puede hacer esto, de forma alternativa:

mysqldump --no-data --skip-add-drop-table my_database | sed 's/AUTO_INCREMENT=[0-9]*\b//' > database.dump 
+0

Gracias, desearía que haya alguna manera de marcar esta "gran respuesta" porque realmente lo es, teniendo en cuenta la referencia al informe de error real, etc. ¡Bravo y gracias! – Marcus

+0

Lamentablemente, este comando es solo para Linux (y posiblemente para OSX). –

+0

Muy bien, gracias! –

1
mysqldump --no-data --skip-add-drop-table | grep -v AUTO_INCREMENT 

?

+0

Bueno, AUTO_INCREMENT está en la misma línea que motor y CHARSET, cualquier diferencia en la que me haría * * Quiero ver ... entonces, no quiero omitir toda la línea. ¡Gracias de cualquier forma! – Marcus

1

Después de mucha investigación y ajustar encontré que en Windows (con Powershell disponible) que puede hacer ...

mysqldump -h SERVER -u USERNAME --password=PASSWORD -d DATABASE -C | powershell -Command "$input | ForEach-Object { $_ -replace \" AUTO_INCREMENT=\S+\", \"\" }"

Sólo añadir > output.txt hasta el final para guardarlo en un archivo en lugar de imprimir a pantalla.

0

(Editar la respuesta aceptada es por supuesto la forma correcta. Nadie en su sano juicio hace que una columna con el valor por defecto "AUTO_INCREMENT = 123")

La lucha con la misma pregunta, y la lectura de la referenciada advertencia de ticket sobre sedimentación de una solución, di la salida --xml de un torbellino, y se me ocurrió una solución de trabajo sin las trampas (por ejemplo, alguien que crea una columna con un valor predeterminado "AUTO_INCREMENT = 123" -frecuente, lo sé , pero aún así ...):

mysqldump \ 
    --xml \ 
    --compact \ 
    --no-data \ 
    mydb | 
xmlstarlet ed -d ' 
    //key/@Cardinality | 
    //options/@Rows | 
    //options/@Avg_row_length | 
    //options/@Data_length | 
    //options/@Auto_increment | 
    //options/@Index_length 
' | 
xmllint --format - 

Básicamente elimina algunos valores usando xmlstarlet que vi variado (incluso desde volcados consecutivos de la misma base de datos). Una hoja de estilo XSLT podría hacer el mismo trabajo.

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <database name="mydb"> 
    <table_structure name="SomeTable"> 
     <field Field="foo" Type="int(12)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="bar" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <field Field="baz" Type="int(11)" Null="NO" Key="PRI" Extra="" Comment=""/> 
     <key Table="AccessControlList" Non_unique="0" Key_name="PRIMARY" 
      Seq_in_index="1" Column_name="referenceID" Collation="A" Null="" 
      Index_type="BTREE" Comment="" Index_comment=""/> 
    <options Name="SomeTable" Engine="InnoDB" Version="10" Row_format="Compact" 
      Max_data_length="0" Data_free="0" Create_time="2012-09-11 15:31:11" 
      Collation="utf8_general_ci" Create_options="" Comment=""/> 
[...] 

(se han añadido nuevas líneas entre los atributos XML para facilitar la lectura, sino que no están en la salida xmllint)

Cuestiones relacionadas