在酷!學園發現這篇,有人問到如何限制 MySQL 的使用空間大小,我第一個想到的就是 Linux quota 指令限制大小,看回文有一篇利用 MySQL 來解決此問題:MySQL Quota-Tool,它利用了 MySQL INSERT 跟 CREATE 的權限控管,來達成限制,當資料庫大小超過您所設定的限制,系統就會拔除您的 INSERT 跟 CREATE 權限,如果沒有超過,就會將權限設定回去,基本上非常簡單,首先要先建立一個專屬控管每個資料庫的 database
CREATE TABLE `Quota` (`Db` CHAR(64) NOT NULL, `Limit` BIGINT NOT NULL, `Exceeded` ENUM('Y','N') DEFAULT 'N' NOT NULL, PRIMARY KEY (`Db`), UNIQUE (`Db`));
底下是 PHP 程式,可以利用 crontab 方式來達到每小時偵測一次,自行可以設定時間:
#!/usr/bin/php -q $quota_limit) && !$quota_exceeded) { if ($debug) echo "Locking database...\n"; // Save in quota table $usql = "UPDATE $mysql_table SET exceeded='Y' WHERE db='$quota_db';"; mysql_query($usql); if ($debug) echo "Querying: $usql\n"; // Dismiss CREATE and INSERT privilege for database mysql_select_db('mysql'); $usql = "UPDATE db SET Insert_priv='N', Create_priv='N' WHERE Db='$quota_db';"; mysql_query($usql); if ($debug) echo "Querying: $usql\n"; mysql_select_db($mysql_db); } if (($quota_size <= $quota_limit) && $quota_exceeded) { if ($debug) echo "Unlocking database...\n"; // Save in quota table $usql = "UPDATE $mysql_table SET exceeded='N' WHERE db='$quota_db';"; mysql_query($usql); if ($debug) echo "Querying: $usql\n"; // Grant CREATE and INSERT privilege for database mysql_select_db('mysql'); $usql = "UPDATE db SET Insert_priv='Y', Create_priv='Y' WHERE Db='$quota_db';"; mysql_query($usql); if ($debug) echo "Querying: $usql\n"; mysql_select_db($mysql_db); } } ?>參考網站:
http://projects.marsching.org/mysql_quota/
See also
- [SQL] 如何從單一資料表取得每個 key 前 n 筆資料
- 在 Docker 偵測 MySQL 或 Postgres 是否啟動
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0
- PHP-FIG 新網站