У меня есть база данных MySQL, и я пытаюсь найти способ экспортировать ее структуру только без значений автоматического увеличения. mysqldump --no-data
почти выполнит эту работу, но сохранит значения auto_increment. Есть ли способ сделать это без использования PHPMyAdmin (что я знаю, что он может это сделать)?
Mysqldump - Структура экспорта только без автоинкремента
Ответ 1
Вы можете сделать это:
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 Lobal replacement) следующим образом:
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
)
Ответ 2
Ответ JoDev отлично работал у меня с небольшой настройкой на регулярное выражение sed:
mysqldump -d -h localhost -u<user> -p<password> <databaseName> | sed 's/ AUTO_INCREMENT=[0-9]*//g' > databaseStructure.sql
Ответ 3
Это --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
Ответ 4
Благодаря этому сообщению я смог ответить на мой вопрос:
Как я могу управлять версиями на моем db?
Затем я просто создал этот script: 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.
Ответ 5
Просто используйте -add-drop-table следующим образом:
mysqldump --no-data --add-drop-table
Ответ 6
mysqldump -u [USER] -p [PASSWORD] -d --skip-opt --single-transaction [DB_SCHEMA] > [FILE.ESTENSIONE]