本文彙整 MySQL 命令列操作精華,涵蓋服務管理、帳號權限、資料庫/資料表操作、資料匯入匯出、備份還原、效能優化等核心技能,適合 DBA 速查與開發者入門。
# Windows net stop mysql net start mysql # Linux (SysVinit) /etc/rc.d/init.d/mysqld start /etc/rc.d/init.d/mysqld stop # Linux (systemd) systemctl start mysqld systemctl stop mysqld
# 本機登入 mysql -u root -p # 指定主機、資料庫 mysql -h 192.168.1.100 -u root -p mydb # 直接帶密碼 (不建議生產環境) mysql -uroot -p123456
# 允許本機登入,擁有所有資料庫增刪改查權限 GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'user1'@'localhost' IDENTIFIED BY 'password1'; # 允許任意主機登入 (百分號為萬用字元) GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'user1'@'%' IDENTIFIED BY 'password1'; # 僅特定資料庫權限 GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'user2'@'localhost' IDENTIFIED BY 'password2';
REVOKE DELETE ON mydb.* FROM 'user2'@'localhost'; DROP USER 'user2'@'localhost';
# 5.7+ 版本
UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
# 或使用 mysqladmin
mysqladmin -u root -p password 'newpass'
| 操作 | 指令 |
|---|---|
| 顯示所有資料庫 | SHOW DATABASES; |
| 建立資料庫 | CREATE DATABASE dbname CHARACTER SET utf8mb4; |
| 刪除資料庫 | DROP DATABASE dbname; |
| 切換資料庫 | USE dbname; |
| 顯示資料表 | SHOW TABLES; |
| 檢視表結構 | DESCRIBE tbl_name; 或 SHOW COLUMNS FROM tbl_name; |
| 建立資料表 | CREATE TABLE t (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)) ENGINE=InnoDB; |
| 刪除資料表 | DROP TABLE tbl_name; |
| 清空資料表 | TRUNCATE TABLE tbl_name; (比 DELETE 更快、重設自增 ID) |
# 匯出整個資料庫 (含結構+資料) mysqldump -u root -p dbname > backup.sql # 僅匯出結構 mysqldump -u root -p -d dbname > schema.sql # 匯出特定資料表 mysqldump -u root -p dbname tbl_name > table_backup.sql # 壓縮匯出 mysqldump -u root -p dbname | gzip > backup.sql.gz
# 方式 1: mysql 指令導入 mysql -u root -p dbname < backup.sql # 方式 2: source 指令 (需先進入 mysql shell) USE dbname; SOURCE /path/to/backup.sql; # 方式 3: 解壓縮並導入 gunzip < backup.sql.gz | mysql -u root -p dbname
# 欄位以 Tab 分隔,每行一筆 LOAD DATA LOCAL INFILE '/path/to/data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
# 建立索引 CREATE INDEX idx_name ON tbl_name (col_name); ALTER TABLE tbl_name ADD INDEX idx_name (col_name); # 唯一索引 CREATE UNIQUE INDEX uk_email ON users (email); # 刪除索引 DROP INDEX idx_name ON tbl_name; ALTER TABLE tbl_name DROP INDEX idx_name;
# 執行計畫 EXPLAIN SELECT * FROM tbl_name WHERE col = 'value'; # 關鍵欄位解讀: # type: ALL(全掃) > index > range > ref > eq_ref > const > system (越右越好) # key: 實際使用的索引 # rows: 預估掃描行數 # Extra: Using index, Using where, Using filesort 等
# 整理碎片、回收空間 (適用 MyISAM, InnoDB) OPTIMIZE TABLE tbl_name; # 分析資料分佈,更新統計資訊 ANALYZE TABLE tbl_name; # 檢查表錯誤 CHECK TABLE tbl_name;
# 設定參數 (my.cnf) query_cache_type = 1 query_cache_size = 64M # SQL 中控制 SELECT SQL_CACHE * FROM tbl_name; # 明確快取 SELECT SQL_NO_CACHE * FROM tbl_name; # 明確不快取
# 版本、時間、使用者、目前資料庫 SELECT VERSION(), NOW(), USER(), DATABASE(); # 連線程序 SHOW PROCESSLIST; SHOW FULL PROCESSLIST; # 系統變數 SHOW VARIABLES LIKE '%char%'; SHOW VARIABLES LIKE '%buffer%'; # 資料表狀態 SHOW TABLE STATUS; SHOW TABLE STATUS FROM dbname;
rpm -ivh MySQL-server.rpm MySQL-client.rpm/var/lib/mysql → 修改 my.cnf 的 datadir 與 socket → 修改啟動腳本 /etc/init.d/mysql 的 datadir → 重啟服務。chkconfig --add mysql / systemctl enable mysqld[mysqld] character-set-server=utf8mb4,重啟生效。DELETE FROM mysql.user WHERE User='';UPDATE mysql.user SET Host='localhost' WHERE User='root';SHOW GRANTS FOR 'user'@'host';# 顯示建表語句 SHOW CREATE TABLE tbl_name; # 修改表結構 ALTER TABLE tbl_name ADD COLUMN new_col INT; ALTER TABLE tbl_name MODIFY col_name VARCHAR(100); ALTER TABLE tbl_name CHANGE old_col new_col INT; ALTER TABLE tbl_name RENAME TO new_tbl_name; # 分頁查詢 SELECT * FROM tbl_name ORDER BY id LIMIT 10 OFFSET 20; # 第 3 頁,每頁 10 筆 # 字串連接 SELECT CONCAT(id, ':', name) FROM tbl_name; # 隨機取樣 SELECT * FROM tbl_name ORDER BY RAND() LIMIT 10;
熟練掌握上述指令,即能應付大多數 MySQL 日常運維與開發場景。建議搭配官方文件深入研究各參數細節。