Как удалить все таблицы в базе данных MySQL, не удаляя базу данных?
12
Мне нужно удалить все таблицы в базе данных, не зная их имена заранее. Типичная процедура - удалить и затем заново создать базу данных, но это не вариант. Каков наилучший способ сделать это?
Кстати, почему вы пишете '$' перед значением IFS? Почему это не выглядит как "IFS = '\ n'"?
Колыпто
@o_OTync Использование $''заставляет bash интерпретировать последовательности с обратной косой чертой вместо буквального восприятия . '\n'будет точно такой же \ n, как и тот, который $IFSбудет разбиваться на \ и n символов. $'\n'будет содержать символ новой строки, 0x0D. Посмотрите здесь для получения дополнительной информации: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .
Джефф Снайдер
Я думаю, что это проще, чем использовать INFORMATION_SCHEMA.
Чрезвычайно плохая идея для любой нетривиальной установки, так как MySQL не ожидает, что эти файлы внезапно исчезнут и могут быть в середине любого числа операций, транзакций, репликации, блокировок ...
bot403
Не могли бы вы пересмотреть свой ответ, включив в него правильные команды и процедуру?
Ответы:
Есть простой однострочный bash, использующий mysqldump (из блога Thingy Ma Jig ).
Если вы получаете эту ошибку:
Попробуйте следующее:
Теперь он игнорирует ограничения.
источник
Вам следует использовать таблицы information_schema для извлечения метаданных о базе данных, а затем отбросить перечисленные там таблицы.
источник
Вы можете попробовать быстрый скрипт для этого:
Удалить
echo
после того, как вы проверили, что он будет делать то, что вы ожидаете.источник
$''
заставляет bash интерпретировать последовательности с обратной косой чертой вместо буквального восприятия .'\n'
будет точно такой же \ n, как и тот, который$IFS
будет разбиваться на \ и n символов.$'\n'
будет содержать символ новой строки, 0x0D. Посмотрите здесь для получения дополнительной информации: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .Недавно в блоге Xaprb появилась запись, в которой об этом хорошо сказано .
Это объясняет, почему использование
INFORMATION_SCHEMA
не всегда хорошо, и ссылается на инструмент тех милых людей из Maatkit .Попробуйте следующее с
mk-find
:Если вы довольны результатами, тогда:
источник
Если у вас есть доступ к файловой системе, то просто
rm -rf databasename/*
:).Оператор Drop database делает то же самое ... Выдержка из руководства MySQL:
Оператор DROP DATABASE удаляет из заданного каталога базы данных те файлы и каталоги, которые сам MySQL может создать во время нормальной работы:
источник