12

次のコマンドを使用して、MySQL データベースのスキーマを出力します。

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

比較したい 2 つのデータベースに対してこれを行い、2 つの出力ファイルを比較します。これは、環境間でデータベースの変更を追跡するための私の粗雑な方法です。

ただし、次のように、各テーブルの行数が AUTO_INCREMENT 値としてテーブル定義の一部として含まれていることは、私にとって小さな不便です。

ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1;

「--no-data」フラグを使用すると、行数など、データを参照するテーブルに関する情報が抑制されると思います。

この出力で AUTO_INCREMENT=N を抑制するにはどうすればよいですか?

4

4 に答える 4

22

ticketこの問題については、こちらをご覧ください。「直らない」としてクローズされました

または、これを行うこともできます:

mysqldump --no-data --skip-add-drop-table my_database | sed 's/AUTO_INCREMENT=[0-9]*\b//' > database.dump
于 2009-02-03T14:34:43.810 に答える
1
mysqldump --no-data --skip-add-drop-table | grep -v AUTO_INCREMENT

?

于 2009-02-03T14:30:18.030 に答える
1

多くの調査と微調整の後、Windows(Powershellが利用可能)でできることがわかりました...

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

最後に追加> output.txtするだけで、画面に出力する代わりにファイルに保存できます。

于 2012-05-08T00:27:24.860 に答える
0

(もちろん、受け入れられた回答を編集するのが正しい方法です。正しい心の誰も、デフォルト値「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 出力にはありません)

于 2012-11-28T23:30:45.487 に答える