服務管理
# Systemd(現代 Linux)
systemctl start mysqld
systemctl stop mysqld
systemctl restart mysqld
systemctl status mysqld
systemctl enable mysqld
# SysVinit(舊版)
/etc/init.d/mysql start|stop|restart|status
service mysql start|stop|restart|status
# mysqladmin 方式
mysqladmin -u root -p start
mysqladmin -u root -p shutdown
連線與退出
# 本機連線
mysql -u root -p
mysql -h localhost -u root -p db_name
# 遠端連線
mysql -h 192.168.1.100 -u user -p db_name
# 退出
exit
quit
\q
密碼管理
# 修改密碼(5.7+)
mysqladmin -u root -p'oldpass' password 'newpass'
# SQL 方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
FLUSH PRIVILEGES;
# 8.0 加密插件注意
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass';
帳號與權限管理
-- 建立用戶(8.0 語法)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_pass';
-- 授權:特定庫、特定權限
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'%';
-- 授權:所有權限(慎用)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
-- 撤銷權限
REVOKE INSERT ON mydb.* FROM 'app_user'@'%';
-- 查看權限
SHOW GRANTS FOR 'app_user'@'%';
-- 刪除用戶
DROP USER 'app_user'@'%';
-- 刷新生效
FLUSH PRIVILEGES;
資料庫與表操作
-- 列出資料庫
SHOW DATABASES;
-- 切換資料庫
USE db_name;
-- 列出表
SHOW TABLES;
SHOW TABLES FROM db_name;
-- 表結構
DESCRIBE tbl_name;
SHOW COLUMNS FROM tbl_name;
SHOW CREATE TABLE tbl_name;
-- 建庫/建表
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE tbl_name (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)) ENGINE=InnoDB;
-- 刪庫/刪表
DROP DATABASE db_name;
DROP TABLE tbl_name;
-- 清空表資料
TRUNCATE TABLE tbl_name; -- DDL,快、不可回滾、重置自增值
DELETE FROM tbl_name; -- DML、可回滾、不重置自增值
編碼查看與修改
-- 查看所有字元集變數
SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
-- 修改資料庫預設編碼
ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 修改表編碼(僅影響新資料)
ALTER TABLE tbl_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 修改欄位編碼
ALTER TABLE tbl_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8mb4;
-- 完整轉換表資料編碼
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
進程監控與控制
-- 查看所有連線進程
SHOW FULL PROCESSLIST;
-- 或
SHOW PROCESSLIST;
-- 殺掉指定進程
KILL 12345;
KILL QUERY 12345; -- 僅終止當前查詢,保持連線
-- 關鍵欄位解讀
-- Id: 連線 ID
-- User/Host: 來源
-- db: 當前資料庫
-- Command: Sleep/Query/Connect/Binlog Dump 等
-- Time: 狀態持續秒數
-- State: 具體狀態
-- Info: 執行的 SQL(前 100 字元)
資料匯入匯出
# 邏輯備份
mysqldump -u root -p db_name > backup.sql
mysqldump -u root -p --single-transaction --master-data=2 db_name | gzip > backup.sql.gz
mysqldump -u root -p --all-databases > all.sql
# 匯出特定表
mysqldump -u root -p db_name tbl1 tbl2 > tables.sql
# 只匯出結構/只匯出資料
mysqldump -u root -p -d db_name > schema.sql
mysqldump -u root -p -t db_name > data.sql
# 匯入
mysql -u root -p db_name < backup.sql
# 或在 mysql 客戶端
SOURCE /path/to/backup.sql;
# 文字檔匯入/匯出
LOAD DATA LOCAL INFILE '/path/file.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';
SELECT * INTO OUTFILE '/path/out.txt' FROM tbl_name;
DDL 常用變更
-- 新增欄位
ALTER TABLE tbl ADD COLUMN col_name VARCHAR(50) DEFAULT '';
-- 修改欄位名稱/型別/預設值
ALTER TABLE tbl CHANGE old_col new_col INT UNSIGNED DEFAULT 0;
-- 修改預設值
ALTER TABLE tbl ALTER COLUMN col_name SET DEFAULT 'new_val';
-- 修改型別
ALTER TABLE tbl MODIFY col_name BIGINT;
-- 新增主鍵
ALTER TABLE tbl ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;
-- 新增/刪除索引
ALTER TABLE tbl ADD INDEX idx_name (col_name);
ALTER TABLE tbl ADD UNIQUE INDEX uk_name (col_name);
DROP INDEX idx_name ON tbl_name;
-- 重命名表
RENAME TABLE old_tbl TO new_tbl;
ALTER TABLE old_tbl RENAME new_tbl;
實用查詢片段
-- 當前用戶/版本/時間/資料庫
SELECT USER(), VERSION(), NOW(), DATABASE();
-- 表大小統計
SELECT table_name,
ROUND(data_length/1024/1024,2) AS data_mb,
ROUND(index_length/1024/1024,2) AS index_mb,
table_rows
FROM information_schema.tables
WHERE table_schema='db_name'
ORDER BY data_length DESC;
-- 找出大表
SELECT table_schema, table_name,
ROUND((data_length+index_length)/1024/1024/1024,2) AS size_gb
FROM information_schema.tables
ORDER BY size_gb DESC LIMIT 20;
-- 檢查鎖等待
SELECT * FROM information_schema.innodb_locks;
SELECT * FROM information_schema.innodb_lock_waits;