MySQLのデータベース削除についてまとめています。
以下、MySQLのバージョンは8.0.19を前提に解説しています。
MySQLのデータベース削除コマンドは、drop database
例えば、データベースemployees2を削除するには、以下のようにします。
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> drop database employees2; Query OK, 0 rows affected (0.21 sec)
データベース削除後は、復元する方法はないと考えておいたほうが良いでしょう。万が一のために、mysqldumpなどでバックアップを取得しておきましょう。
【関連記事】
▶MySQLのデータバックアップなら専用コマンドのmysqldumpを
$ mysqldump -u root -p -x employees > dump200116.sql Enter password:
mysqldumpで取得したデータがあれば、以下のようにデータベース削除後にcreate databaseさえしておけばリストアが可能です。
$ mysql -u root -p employees2 < dump200116.sql Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show tables; +----------------------+ | Tables_in_employees2 | +----------------------+ | current_dept_emp | | departments | | dept_emp | | dept_emp_latest_date | | dept_manager | | employees | | salaries | | titles | +----------------------+ 8 rows in set (0.00 sec) mysql> select * from employees limit 10;
phpmyadminでデータベースを削除する手順
MySQLをウェブベースで管理するphpMyAdminからデータベースを削除するには以下のようにします。
データベースを削除できる権限を持つユーザで、phpMyAdminにログインします。
- 削除したいデータベースを選択します。
- 画面上部のメニューから「操作」をクリックします。
- 「データベースを削除する(DROP)」をクリックします。
「データベースを完全に削除しようとしています! DROP DATABASE データベース名 を本当に実行しますか」とメッセージが表示されるので、OKをクリックします。
なお、「データベース名の変更」という機能は、内部的にはデータベースを削除して再作成する処理になります。処理の途中で異常終了すると、データが消失してしまうケースがあるため、要注意です。
データベースから、データを削除したのにディスク空き容量が増えない
MySQLで、InnoDBを使用している場合、deleteやtruncateでデータを削除してもディスク空き容量が増えないケースがあります。
いったんデータベースを作ってしまうと、使った容量は確保されたままになるため、空き容量が減らないんですね。
空き容量を減らすためには、MySQLサービスを停止する必要がありますが、以下のようにします。
- 全データベースのバックアップを取得
- MySQLサービスを停止する
- MySQLのデータベースの実体ファイルを削除
- MySQLのデータベースをリストア
以下のコマンドで、全データベースのバックアップを取得します。
$ mysqldump -u root -p --opt --all-databases > alldb.sql Enter password:
いったんデータベースを削除するため、このバックアップが正常に取得できているかどうかを必ず確認してください。
以下のコマンドで、MySQLサービスを停止します。
$ sudo systemctl stop mysql
$ cd /var/lib/mysql $ ls -l total 307924 drwxr-x--- 2 mysql mysql 4096 Jan 25 10:52 #innodb_temp -rw-r----- 1 mysql mysql 56 Jan 17 03:58 auto.cnf : : -rw-r----- 1 mysql mysql 50331648 Jan 25 10:52 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 Jan 25 10:52 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 Jan 25 10:52 ibdata1 : :
対象のファイルを削除します。
$ sudo rm ib_logfile0 ib_logfile1 ibdata1
データベースを起動します。
$ sudo systemctl start mysql
以下のコマンドで、全データベースをリストアします。
$ mysql -u root -p < alldb.sql Enter password:
上記の手順は、実際にデータベースを一度削除するため、テスト環境などで動作を確認してから実行しましょう。
まとめ
- データベース削除は、drop databaseで実行
- 一度削除したデータベースを復元するには、バックアップが必須
- phpMyAdminからデータベース削除も可能
- データベース領域の空き容量を増やすには、一度データベースを削除してからリストアする必要がある