首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 下 MySQL 常用命令大全:服務管理、帳號權限、備份還原、編碼與進程控制

     編輯:MySQL 資料庫相關知識

服務管理


# 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;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved