Jak usunąć wszystkie tabele z bazy MySQL?

Max Koluszky - 2017-03-07 20:18:07 UTC

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?