Как удалить несколько таблиц из большого файла 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.

Другие вопросы по тегам