Вы можете использовать опцию --ignore-table . Так что вы могли бы сделать
mysqldump -u USERNAME -pPASSWORD DATABASE --ignore-table=DATABASE.table1 > database.sql
После -p
этого нет пробелов (это не опечатка).
Если вы хотите игнорировать несколько таблиц, вы можете использовать простой скрипт, как этот
#!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN
)
IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done
echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines ${DATABASE} > ${DB_FILE}
echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}
Основываясь на ответе @ Brian-Fisher и отвечая на комментарии некоторых людей к этому посту, у меня есть куча огромных (и ненужных) таблиц в моей базе данных, поэтому я хотел пропустить их содержимое при копировании, но сохранить структуру :
Полученные два файла являются структурно исправными, но выгруженные данные теперь составляют ~ 500 МБ, а не 9 ГБ, что намного лучше для меня. Теперь я могу импортировать эти два файла в другую базу данных для целей тестирования, не беспокоясь о манипулировании 9 ГБ данных или нехватке дискового пространства.
источник
для нескольких баз данных:
источник
mysqld
иmysqldump
были бы такие же программы.Еще один пример игнорирования нескольких таблиц
с помощью
--ignore-table
и создавая массив таблиц с такими синтаксисами, какdatabase.table
Ссылки с информацией, которая поможет вам
сжать вывод mysqldump
Импорт базы данных
Простой скрипт для игнорирования таблиц
источник
Чтобы исключить некоторые данные таблицы , но не структуру таблицы . Вот как я это делаю:
Дамп структуры базы данных всех таблиц, без каких-либо данных:
Затем выведите базу данных с данными, кроме исключенных таблиц, и не создавайте структуру:
Затем, чтобы загрузить его в новую базу данных:
источник
Вы можете использовать
mysqlpump
команду скоманда. Он указывает список таблиц через запятую, которые нужно исключить.
Синтаксис mysqlpump очень похож на mysqldump, но он более производительный. Подробнее о том, как использовать параметр исключения, вы можете прочитать здесь: https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#mysqlpump-filtering
источник
Сбросить все базы данных со всеми таблицами, но пропустить определенные таблицы
на github: https://github.com/rubo77/mysql-backup.sh/blob/master/mysql-backup.sh
С небольшой помощью https://stackoverflow.com/a/17016410/1069083
Он использует lzop, который намного быстрее, см .: http://pokecraft.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
источник
Мне нравится решение Rubo77, я не видел его до того, как изменил решение Пола. Это будет резервное копирование одной базы данных, исключая любые таблицы, которые вы не хотите. Затем он скопирует его и удалит все файлы старше 8 дней. Я, вероятно, буду использовать 2 версии этого, которые делают полный (минус таблица журналов) один раз в день, и еще одна, которая просто создает резервные копии наиболее важных таблиц, которые меняются чаще всего каждый час, используя пару заданий cron.
источник
Для полноты картины ниже приведен скрипт, который на самом деле может быть однострочным, чтобы получать резервную копию из базы данных, исключая (игнорируя) все представления. Предполагается, что имя БД - это сотрудники:
Вы можете обновить логику запроса. В общем, используя
group_concat
иconcat
вы можете генерировать практически любую нужную строку или команду оболочки.источник
В общем, вам нужно использовать эту функцию, когда вы не хотите или не имеете времени иметь дело с огромным столом. Если это ваш случай, лучше использовать опцию --where из ограничивающего набора результатов mysqldump. Например,
mysqldump -uuser -ppass database --where="1 = 1 LIMIT 500000" > resultset.sql
.источник