從零開始構建 MySQL 管理知識庫,涵蓋資料庫/表 DDL、資料 DML、權限體系、服務啟停、安全基線與監控腳本,適合 DBA 速查與開發入門。
| 操作 | 命令 | 說明 |
|---|---|---|
| 查看所有資料庫 | SHOW DATABASES; | |
| 建立資料庫 | CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | 建議顯式指定字元集 |
| 切換資料庫 | USE db_name; | 提示 Database changed 表示成功 |
| 查看當前庫所有表 | SHOW TABLES; | |
| 建立資料表 | CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(20)) ENGINE=InnoDB; | |
| 查看表結構 | DESC t; 或 SHOW COLUMNS FROM t; | |
| 插入資料 | INSERT INTO t VALUES (1, 'hyq'); | |
| 從文字檔匯入 | LOAD DATA LOCAL INFILE '/path/file.txt' INTO TABLE t; | 需啟用 local_infile=1 |
| 匯入 SQL 檔 | SOURCE /path/script.sql; | 在 mysql client 內執行 |
| 刪除表 | DROP TABLE t; | 結構與資料全刪 |
| 清空表 | TRUNCATE TABLE t; | 保留結構,重置自增 ID,速度快 |
| 更新資料 | UPDATE t SET sex='f' WHERE name='hyq'; |
| OS | 啟動 | 停止 | 重啟 | 狀態 |
|---|---|---|---|---|
| Windows (服務) | net start mysql | net stop mysql | net restart mysql | sc query mysql |
| Linux (Systemd) | systemctl start mysqld | systemctl stop mysqld | systemctl restart mysqld | systemctl status mysqld |
| Linux (SysV) | /etc/init.d/mysqld start | /etc/init.d/mysqld stop | /etc/init.d/mysqld restart | /etc/init.d/mysqld status |
注意:啟停需管理員/root 權限。
USE mysql;
DELETE FROM user WHERE User = '';
UPDATE user SET authentication_string=PASSWORD('StrongP@ssw0rd') WHERE User='root';
FLUSH PRIVILEGES;
UPDATE user SET Host='127.0.0.1' WHERE User='root' AND Host='%';
FLUSH PRIVILEGES;
登入驗證:
mysql -uroot -p # 互動式輸入密碼
mysql -uroot -p'StrongP@ssw0rd' # 直接帶密碼(注意無空格)
mysql -h 10.0.0.1 -uroot -p db_name
| 類別 | 權限 | 說明 |
|---|---|---|
| 全域管理 | FILE | 讀寫伺服器檔案 |
| PROCESS | 查看/殺死其他使用者執行緒 | |
| RELOAD | 重載授權表、刷新日誌 | |
| SHUTDOWN | 關閉 MySQL 服務 | |
| 物件級 | ALTER | 修改表結構、索引 |
| CREATE | 建立資料庫/表 | |
| DELETE | 刪除資料 | |
| DROP | 刪除表/資料庫 | |
| INDEX | 建立/刪除索引 | |
| INSERT | 新增資料 | |
| SELECT | 查詢資料 | |
| UPDATE | 修改資料 | |
| 特殊 | ALL | 所有權限(等同 root) |
| USAGE | 僅允許登入,無任何操作權限 |
-- 全庫全表所有權限
GRANT ALL ON mydb.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'Pass123';
-- 僅讀權限
GRANT SELECT ON mydb.* TO 'readonly'@'%' IDENTIFIED BY 'Pass123';
-- 特定表寫入權限
GRANT INSERT, UPDATE ON mydb.orders TO 'writer'@'10.0.0.5' IDENTIFIED BY 'Pass123';
-- 特定表刪除權限
GRANT DELETE ON mydb.logs TO 'cleaner'@'10.0.0.10' IDENTIFIED BY 'Pass123';
-- 授予授權權限(慎用)
GRANT SELECT ON mydb.* TO 'admin'@'%' IDENTIFIED BY 'Pass123' WITH GRANT OPTION;
REVOKE DELETE ON mydb.logs FROM 'cleaner'@'10.0.0.10';
REVOKE ALL ON mydb.* FROM 'old_user'@'%';
'user'@'10.0.0.%' 限制來源網段,避免 'user'@'%'。SELECT User, Host FROM mysql.user; 清理殭屍帳號。#!/bin/bash
# check_slave.sh
HOST="127.0.0.1"
USER="monitor"
PASS="monitor_pass"
IO_RUNNING=$(mysql -h$HOST -u$USER -p$PASS -e "SHOW SLAVE STATUS\G" | grep "Slave_IO_Running:" | awk '{print $2}')
SQL_RUNNING=$(mysql -h$HOST -u$USER -p$PASS -e "SHOW SLAVE STATUS\G" | grep "Slave_SQL_Running:" | awk '{print $2}')
if [[ "$IO_RUNNING" != "Yes" || "$SQL_RUNNING" != "Yes" ]]; then
echo "[$(date)] Slave 异常: IO=$IO_RUNNING, SQL=$SQL_RUNNING" | mail -s "MySQL Slave Alert" dba@company.com
fi
加入 crontab 每分鐘執行:* * * * * /path/check_slave.sh
| 檔案 | 典型路徑 | 用途 |
|---|---|---|
| 配置檔 | /etc/my.cnf 或 /etc/mysql/my.cnf | 伺服器參數 |
| 資料目錄 | /var/lib/mysql | 資料庫檔案 |
| 錯誤日誌 | /var/log/mysqld.log 或 數據目錄下 *.err | 啟動錯誤、崩潰堆疊 |
| 慢查詢日誌 | 配置 slow_query_log_file | 慢 SQL 分析 |
| 二進制日誌 | 配置 log_bin | 主從同步、時間點恢復 |
| PID 檔 | /var/run/mysqld/mysqld.pid | 進程 ID |
| Socket | /var/run/mysqld/mysqld.sock | 本地連線 |
收藏此速查表,日常運維開發查詢不再東奔西走。建議結合 mysql --help、官方文檔與實際環境持續補充,打造屬於自己的 MySQL 知識庫。