(もちろん、受け入れられた回答を編集するのが正しい方法です。正しい心の誰も、デフォルト値「AUTO_INCREMENT = 123」の列を作成しません)
同じ質問に苦労し、ソリューションの sed に関する参照チケットの警告を読んで、--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 出力にはありません)