Работал сегодня с сервером mysql. Надо было проверять дампы баз и искать в них данные. Постоянно загружал и удалял таблицы, базы и т.д. В общем, работал много с mysql, а чтобы все было максимально быстро, то через консоль. Оказалось, что простого и быстрого способа удалить разом все таблицы в базе mysql нет. Рассказываю, как поступал я для очистки таблиц без удаления самой базы данных.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
В общем случае удалить таблицы из базы данных можно командой в консоли mysql:
mysql> use databasename; mysql> drop table00 table01, table02;
Если у вас таблиц десятки и сотни, очевидно, что вручную их указывать неудобно. Дальше каждый изобретает свой велосипед в виде различных скриптов на php или bash. Мне не захотелось этим заниматься, уверен был, что можно найти способ проще и я его нашел.
Можно воспользоваться mysqldump и некоторыми ключами.
# mysqldump --add-drop-table --no-data databasename
Эта команда сделает дамп только структуры базы данных, при этом для каждой таблицы перед ее созданием будет команда на удаление. Вот эти команды на удаление мы и заберем из дампа.
# mysqldump --add-drop-table --no-data databasename | grep ^DROP
Мы получили набор команд на удаление всех таблиц. Теперь направим эти команды в mysql консоль на исполнение.
# mysqldump --add-drop-table --no-data databasename | grep ^DROP | mysql databasename
У меня настроена авторизация в mysql из консоли без пароля. В общем случае, с паролем команда будет выглядеть вот так:
# mysqldump -uuser -ppassword --add-drop-table --no-data databasename | grep ^DROP | mysql -uuser -ppassword databasename
Таким простым способом, без скриптов, можно прямо в консоли сервера удалить все таблицы из базы данных mysql, не удаляя саму базу. Может возникнуть вопрос, а почему не удалить все же базу и не создать заново. Причин может быть несколько:
- У вас нет прав на создание и удаление баз данных (наиболее частый случай).
- Не помните точно параметры базы данных, не хочется вспоминать, искать, как создать новую базу данных с теми же параметрами, что стоят у текущей (мой случай).
Если у вас есть какое-то свое простое решение по удалению таблиц из базы, делитесь в комментариях.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Выходит ошибка
ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: a foreign key constraint fails
Хотелось бы перед изменением узнать состояние foreign key, потом установить необходимое значение, и вернуть предыдущее значение
А еще вариант - если в бд только таблички, без всяких триггеров, функций и прочего - drop database ; create database ; Это бывает очень удобно :)
У меня пальцы сами помнят вот такое:
for TABLE in $(mysql database -N -e 'show tables') ; do mysql database -e "drop table $TABLE" ; done
Работает конечно, но твой вариант с "mysqldump --add-drop-table" более правильный. Особенно, если в названиях таблиц есть какая-нибудь дрянь, вроде UTF8. Попробую перепрошить память в пальцах. :)
Спасибо.
Если таблицы не innodb, можно застопить базу и удалить просто файлы в дирректории, где мускуль хранит базы.
Сейчас вроде все на innodb перешли. Я уже давно не видел другие базы.