reordenar - ¿Cómo suprimo el conteo de filas para las tablas agregadas(AUTO_INCREMENT=N) a la salida mysqldump?
reiniciar auto_increment mysql workbench (4)
Utilizo el siguiente comando para generar el esquema para una base de datos MySQL:
mysqldump --no-data --skip-add-drop-table
Haré esto para dos bases de datos que quiero comparar, y luego distinguir los dos archivos de salida. Esta es mi forma cruda de seguir los cambios de la base de datos entre entornos.
Sin embargo, un pequeño inconveniente para mí es que el recuento de filas para cada tabla se incluye como parte de la definición de la tabla, como el valor AUTO_INCREMENT, así:
ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1;
Creo que 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?
Vea este ticket
en este problema. Fue cerrado como "No arreglará"
Usted podría hacer esto, alternativamente:
mysqldump --no-data --skip-add-drop-table my_database | sed ''s/AUTO_INCREMENT=[0-9]*/b//'' > database.dump
mysqldump --no-data --skip-add-drop-table | grep -v AUTO_INCREMENT
?
Después de mucha investigación y ajustes, descubrí que en Windows (con Powershell disponible) puedes hacer ...
mysqldump -h SERVER -u USERNAME --password=PASSWORD -d DATABASE -C | powershell -Command "$input | ForEach-Object { $_ -replace /" AUTO_INCREMENT=/S+/", /"/" }"
Simplemente agregue > output.txt
al final para guardarlo en un archivo en lugar de imprimirlo en la pantalla.
( Editar la respuesta aceptada es, por supuesto, la forma correcta. Nadie en su sano juicio hace una columna con el valor predeterminado "AUTO_INCREMENT = 123")
Luchando con la misma pregunta y leyendo la advertencia de ticket referenciada sobre la sedimentación de una solución, le di un giro a la salida --xml
, y se me ocurrió una solución funcional sin las trampas (por ejemplo, que alguien creara una columna con un valor por defecto). valor "AUTO_INCREMENT = 123", muy buscado, 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 variados (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 agregaron nuevas líneas entre atributos XML para la legibilidad, no están en la salida xmllint)