12

我使用以下命令输出 MySQL 数据库的架构:

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

我将对两个要比较的数据库执行此操作,然后对两个输出文件进行比较。这是我在环境之间跟踪数据库更改的粗略方式。

但是,给我带来的一个小不便是,每个表的行数都包含在表定义中,作为 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”创建一个列)

在同一个问题上苦苦挣扎,并阅读了有关解决方案的参考票证警告,我对--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 回答