Итак, хотим мы, значит, сделать дамп какой-то mysql-базы с рабочего проекта.
Чтобы скачать себе и развернуть у себя локальную копию.
Или просто в целях бэкапа.
Ну и, конечно, для этого у нас есть наша любимая утилита mysqldump.
Но вот незадача, есть в базе штук пять таблиц в которые пишутся различные логи.
И написалось их уже за время работы сайта, аж на 10 гигабайт.
10 гигабайт эти нам совершенно ни к чему, ни в бэкапе их хранить незачем, ни тем более на локалку себе выкачивать не хочется.
Но и удалять тоже жалко, вдруг пригодятся.
Ну ладно, просто воспользуемся опцией --ignore-table-data
, которая, конечно, где-то в обильном списке опций должна быть.
Опа, а нет, оказывается, ничего подобного.
Только заявка на неё и благодарность за заявку.
Какие же другие варианты у нас есть?
--ignore-table
: просто игнорировать таблицы. Не катит, структура нам нужна, в них же всё равно что-то писаться будет.
--where="true limit 100"
: выбрать только сотню записей. Плохо, другие таблицы нам нужны полными.
Придётся сделать в два захода:
1. Сохранить для таблиц с логами только структуру (--no-data
).
2. Сделать дамп всех остальных таблиц.
И в сочетании с моими потугами о области изучения баша, получается следующее (здесь мы ещё заодно архивируем дамп в файл с указанием текущей даты):
#!/bin/sh DB_NAME="dbname" DB_USER="username" DB_PASS="qwerty" OUTPUT_FILE="$DB_NAME-$(date +%Y-%m-%d).sql.tar.gz" TMP_SQL_FILE="$DB_NAME.sql" tables_cmd="" ignore_cmd="" for table in "log_table_1" "log_table_2" "log_table_3" do tables_cmd="$tables_cmd $table" ignore_cmd="$ignore_cmd --ignore-table=$DB_NAME.$table" done echo "Dump to $TMP_SQL_FILE" mysqldump \ -u$DB_USER \ -p$DB_PASS \ --databases $DB_NAME \ --no-create-db \ --add-drop-table \ $ignore_cmd \ > $TMP_SQL_FILE; echo "Append big tables structures to $TMP_SQL_FILE" mysqldump \ -u$DB_USER \ -p$DB_PASS \ --databases $DB_NAME \ --no-create-db \ --add-drop-table \ --tables $tables_cmd \ --no-data \ >> $TMP_SQL_FILE; echo "Archiving to $OUTPUT_FILE" tar -czf $OUTPUT_FILE $TMP_SQL_FILE echo "Remove $TMP_SQL_FILE" rm $TMP_SQL_FILE |
Мои познания в баше не позволили мне вынести список таблиц в отдельную переменную, но и так работает.