DROP DATABASE 是 MySQL 中破壞力最大的指令之一——資料庫內所有表、視圖、存儲過程、函數、觸發器、資料、索引、權限、分區定義一次性永久銷毀,無法回滾(隱式提交)。本文講解命令列工具與 PHP 實戰,並建立「刪庫前三思、雙人複核」的生產級安全心法。
[root@host]# mysqladmin -u root -p drop RUNOOB Enter password:****** Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'RUNOOB' database [y/N] y Database "RUNOOB" dropped
y 確認,提供最後防線。DROP 權限,通常由 root 或具備全域 DROP 權限的帳號執行。mysql> DROP DATABASE [IF EXISTS] RUNOOB;
IF EXISTS:庫不存在時不報錯(僅 Warning),腳本部署必加。<?php
$db = 'RUNOOB';
$allowed = ['RUNOOB', 'TEST_DB', 'DEMO_DB']; // 白名單
if (!in_array($db, $allowed)) die('Invalid database name');
// 多重確認機制
$confirm1 = $_POST['confirm1'] ?? ''; // 表單隱藏欄位
$confirm2 = $_POST['confirm2'] ?? ''; // 手動輸入資料庫名
if ($confirm1 !== 'YES_DROP_DATABASE' || $confirm2 !== $db) {
die('Confirmation failed. Required: confirm1=YES_DROP_DATABASE & confirm2=DB_NAME');
}
// 可選:雙人複核 Token(生產環境建議)
$token = $_POST['admin_token'] ?? '';
if (!validate_admin_token($token)) die('Invalid admin token');
$conn = new mysqli('localhost:3306', 'root', 'rootpassword');
if ($conn->connect_error) die('Connect failed: ' . $conn->connect_error);
// DDL 不支援預處理,但庫名經白名單驗證
$sql = "DROP DATABASE IF EXISTS `$db`";
if ($conn->query($sql)) {
echo "Database `$db` dropped successfully\n";
audit_log('DROP_DATABASE', $db, 'success');
} else {
echo "Drop failed: " . $conn->error;
audit_log('DROP_DATABASE', $db, 'failed: ' . $conn->error);
}
$conn->close();
?>
RENAME DATABASE RUNOOB TO RUNOOB_TO_DROP_20240115;(MySQL 不支援 RENAME DATABASE,實務上:CREATE DATABASE new; RENAME TABLE old.t TO new.t; ... DROP DATABASE old;)。觀察 1-2 週無異常再物理刪除。| 操作 | 範圍 | 保留結構 | 可回滾 | 速度 | 適用場景 |
|---|---|---|---|---|---|
DROP DATABASE | 整庫 | 否 | 否 | 極快 | 專案下線、測試庫清理、嚴格變更流程後 |
DROP TABLE | 單表 | 否 | 否 | 極快 | 表結構重設計、舊表歸檔後清理 |
TRUNCATE TABLE | 單表資料 | 是 | 否 | 極快 | 清空測試資料、重置自增 ID |
Error 1008: Can't drop database 'RUNOOB'; database doesn't exist:加 IF EXISTS 抑制錯誤。Error 1010: Error dropping database (can't rmdir ...):資料目錄殘留檔案/權限問題,檢查 datadir 權限、手動清理殘留。DROP DATABASE 一條命令,銷毀的是企業核心資產。將「備份驗證、依賴掃描、業務確認、重命名緩衝、變更審批、權限最小化」內化為組織級肌肉記憶,並在工具層(堡壘機、CI/CD 管控)強制落地,才能守住資料安全的最後一道防線。