Ответ 1
Проверьте эту ticket
по этой проблеме. Он был закрыт как "Не исправить"
Вы можете сделать это, альтернативно:
mysqldump --no-data --skip-add-drop-table my_database | sed 's/AUTO_INCREMENT=[0-9]*\b//' > database.dump
Я использую следующую команду для вывода схемы для MySQL db:
mysqldump --no-data --skip-add-drop-table
Я сделаю это для двух баз данных, которые хочу сравнить, а затем разделим два выходных файла. Это мой грубый способ отслеживания изменений базы данных между средами.
Однако незначительное неудобство для меня состоит в том, что количество строк для каждой таблицы включено как часть определения таблицы как значение AUTO_INCREMENT, например:
ENGINE=MyISAM AUTO_INCREMENT=844 DEFAULT CHARSET=latin1;
Я бы подумал, что флаг "-no-data" будет подавлять любую информацию о таблице, которая ссылается на данные, включая количество строк.
Как подавить AUTO_INCREMENT = N на этом выходе?
Проверьте эту ticket
по этой проблеме. Он был закрыт как "Не исправить"
Вы можете сделать это, альтернативно:
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
?
После долгих исследований и настройки я обнаружил, что в Windows (с доступной Powershell) вы можете...
mysqldump -h SERVER -u USERNAME --password=PASSWORD -d DATABASE -C | powershell -Command "$input | ForEach-Object { $_ -replace \" AUTO_INCREMENT=\S+\", \"\" }"
Просто добавьте > output.txt
в конец, чтобы сохранить его в файле, а не печатать его на экране.
( Изменить принятый ответ, конечно, правильный путь. Никто в здравом уме не делает столбец со значением по умолчанию "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)