Как удалить несколько таблиц из большого файла SQL?
У меня есть файл SQL размером около 3 ГБ. Так что это занимает много времени, чтобы восстановить каждый раз, когда я взял недавний дамп с производства.
В этой единственной таблице "access_log" потребовалось 2,2 ГБ, что является просто журналом. Для целей тестирования нормально, чтобы эта таблица была пустой. Есть ли способ избежать этой таблицы при восстановлении базы данных.
Моя команда для восстановления выглядит
mysqldump -u uname -p pwd --no-data site_name_com | awk '/DROP TABLE/ { print }' | mysql -u uname -p pwd site_name_com && mysql -u uname -p pwd site_name_com < /..file_path../..file_name.sql
Как сделать дамп базы данных, исключающий одну конкретную таблицу?
2 ответа
mysqldump
Выходной формат - это просто длинный список команд SQL, предназначенный для обратной передачи в mysql
программа.
Ты можешь использовать mysqldump --ignore-table=<database>.<table>
создать дамп, который не включает в себя access_log
стол вообще.
Тогда вы можете использовать mysqldump --no-data=true
сбросить только структуру для access_log
Таблица.
Если вы объедините их, у вас будет полный скрипт дампа, который исключает данные для access_log
Таблица.
Пока вам нужно сделать это только для одной или нескольких таблиц и контролировать исходный вызов mysqldump, это должно быть практическим решением.
Погуглил таблицу исключений mysqldump, которая послужила источником моего вдохновения: пропустить определенные таблицы с вопросом переполнения стека mysqldump и его принятый ответ.
Если у вас есть файл SQL, созданныйmysqldump
, он должен содержать комментарии, указывающие, что делают следующие строки.
Пример:
--
-- Table structure for table `access_log`
--
Мы можем использовать их для фильтрации диапазонов операторов при потоковой передаче файла команде mysql.
Например, игнорировать что-либо между двумяCREATE TABLE
утверждения, мы можем сделать:
cat backup.sql | sed '/Dumping data for table `first_table_to_skip`/,/Dumping data for table `next_table_to_include`/d' | mysql
См. этот ответ для получения дополнительной информации об этой функции sed.