Kategorie
MySQL / MariaDB

Jak usunąć wszystkie tabele z bazy MySQL?

Najprościej byłoby usunąć całą bazę i stworzyć ją ponownie:

mysql> DROP DATABASE nazwa_bazy;
mysql> CREATE DATABASE nazwa_bazy;

Ale wtedy na nowo trzeba by było definiować  uprawnienia użytkowników tej bazy.

Chciałoby się, żeby zadziałało coś takiego:

mysql> DROP TABLE IN (SHOW TABLES);

Ale Computer says No!:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'IN (SHOW TABLES)\' at line 1

Pogrzebałem w Internecie i znalazłem takie rozwiązanie:

$ mysqldump --no-data --add-drop-table nazwa_bazy | grep ^DROP | mysql -v nazwa_bazy

Ale wszystko się tutaj sypie, kiedy doda się  nazwę użytkownika i opcję pytania o hasło:

$ mysqldump -u nazwa_użytkownika -p --add-drop-table --no-data nazwa_bazy | grep ^DROP  | mysql -u nazwa_użytkownika -p nazwa_bazy

Computer says No!:

Enter password: Enter password:
ERROR 1045 (28000): Access denied for user \'nazwa_użytkownika\'@\'localhost\' (using password: NO)

Oczywiście mógłbym podać hasło w wierszu polecenia, ale to zbyt ryzykowne, bo później to hasło będzie do znalezienia w historii poleceń:

$ history | grep mysql 
1035  mysqldump -u nazwa_użytkownika -ptajneHaslo --add-drop-table --no-data nazwa_bazy | grep ^DROP  | mysql -u nazwa_użytkownika -ptajneHaslo nazwa_bazy

Na coś takiego nie pójdę.

Zostało mi tylko rozbić zadanie na kilka poleceń:

$ mysqldump -u nazwa_użytkownika -p --add-drop-table --no-data nazwa_bazy | grep ^DROP > drop.sql

$ mysql -u nazwa_użytkownika -p nazwa_bazy < drop.sql

$ rm drop.sql

Działa? Działa! No i fajnie.

źródło: How to drop all MySQL tables from the command-line?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *