mysqldump - структура экспорта только без автоинкремента
У меня есть база данных MySQL, и я пытаюсь найти способ, чтобы экспортировать только структуру, без автоматического приращения. mysqldump --no-data
почти сделал бы работу, но он сохраняет значения auto_increment. Есть ли способ сделать это без использования PHPMyAdmin (что я знаю, что он может это сделать)?
5 ответов:
вы можете сделать это:
mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > <filename>.sql
как упоминалось другими, Если вы хотите
sed
для правильной работы добавьтеg
(для gлобальная замена) параметр такой:mysqldump -u root -p -h <db-host> --opt <db-name> -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//g' > <filename>.sql
(это работает только если у вас установлены инструменты GUI:
mysqldump --skip-auto-increment
)
JoDev прекрасно работал для меня, с небольшими поправками к СЭД регулярное выражение:
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
это --create-options, который включен в --opt, по умолчанию, который генерирует определения таблицы AUTO_INCREMENT.
Если вы хотите только базовые таблицы,
mysql -hlocalhost -uuser -ppass --skip-column-names --batch \ -e "select table_name from tables where table_type = 'BASE TABLE' and table_schema = 'schemaname'" INFORMATION_SCHEMA \ | xargs mysqldump -hlocalhost -uuser -ppass \ --no-data --skip-triggers --skip-opt --no-create-db \ schemaname
Если вы хотите представления, триггеры и подпрограммы тоже,
mysqldump -hlocalhost -uuser -ppass \ --skip-opt --events --routines --no-data \ schemaname
благодаря этому сообщению, я смог ответить на мой вопрос:
как я могу сделать контроль версий на моей БД?
тогда я просто создал этот скрипт:
db_bkp.sh
#!/bin/sh filename="db_structure.sql" backupfolder="/var/www/" fpath="$backupfolder/$filename" usr="DBUSER" pass="DBPASS" db="DBNAME" mysqldump --user=$usr --password=$pass --no-data $db | sed 's/ AUTO_INCREMENT=[0-9]*//g' > "$fpath"
затем я добавил Это в crontab:
30 5 * * * sh /home/scripts/db_bkp.sh
затем в моем РЕПО я добавил результат,
db_structure.sql
для git и перед нажатием изменений в prod я всегда проверяю, есть ли какие-либо структурные изменения, которые я забыл сделать на всех dbs.