(编辑接受的答案当然是正确的方法。没有人在他们的头脑中使用默认值“AUTO_INCREMENT = 123”创建一个列)
在同一个问题上苦苦挣扎,并阅读了有关解决方案的参考票证警告,我对--xml
输出形式进行了旋转,我想出了一个没有陷阱的工作解决方案(例如,有人创建了一个默认值为“AUTO_INCREMENT”的列=123" —我知道,牵强,但仍然……):
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 -
基本上,它使用我看到的不同的 xmlstarlet 删除了一些值(即使来自同一数据库的连续转储)。XSLT 样式表可以做同样的工作。
<?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=""/>
[...]
(为了便于阅读,在 XML 属性之间添加了换行符;它们不在 xmllint 输出中)