SHOW DATABASES;
CREATE DATABASE `mydb` DEFAULT CHARSET utf8mb4;
USE `mydb`;
SHOW TABLES;
CREATE TABLE `t` (`id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(20));
DESC `t`;
INSERT INTO `t` VALUES (NULL, 'test');
SELECT * FROM `t`;
-- 僅讀
GRANT SELECT ON `mydb`.* TO 'readonly'@'%' IDENTIFIED BY 'pass';
-- 讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON `mydb`.* TO 'rw'@'10.0.%' IDENTIFIED BY 'pass';
-- 管理權限
GRANT ALL PRIVILEGES ON `mydb`.* TO 'admin'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
| 層級 | 權限關鍵字 | 說明 |
|---|---|---|
| 全域 | FILE, PROCESS, RELOAD, SHUTDOWN, SUPER | 影響整個伺服器 |
| 庫級 | CREATE, DROP, INDEX, ALTER, REFERENCES | 特定資料庫 |
| 表級 | SELECT, INSERT, UPDATE, DELETE, TRIGGER | 特定資料表 |
| 欄位級 | SELECT (col), UPDATE (col), REFERENCES (col) | 特定欄位 |
ALL:等同 root 所有權限(含 GRANT OPTION)。USAGE:僅允許連線,無任何操作權限。
REVOKE INSERT, UPDATE ON `mydb`.* FROM 'rw'@'10.0.%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'old'@'%';
DROP USER 'old'@'%';
FLUSH PRIVILEGES;
DELETE FROM mysql.user WHERE User='';ALTER USER 'root'@'localhost' IDENTIFIED BY 'strong';UPDATE mysql.user SET Host='127.0.0.1' WHERE User='root';DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';validate_password 強制複雜度。
# Windows
net start mysql
net stop mysql
# Linux (systemd)
systemctl start mysqld
systemctl stop mysqld
systemctl restart mysqld
systemctl status mysqld
SHOW PROCESSLIST; -- 當前連線
SHOW ENGINE INNODB STATUS; -- InnoDB 內部狀態
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW VARIABLES LIKE 'max_connections';
將上述命令整理為個人 Cheat Sheet,日常運維事半功倍。