涵蓋服務管理、客戶端操作、用戶權限、備份恢復、性能分析、優化參數,適合 DBA/開發隨時查閱。
# 啟動/停止/重啟
systemctl start|stop|restart mysqld
service mysqld start|stop|restart
/etc/init.d/mysqld start|stop|restart
# 開機自啟
systemctl enable mysqld
chkconfig mysqld on
# 進程/端口檢查
ps -ef | grep mysqld
netstat -ntpl | grep 3306
ss -ntpl | grep 3306
# 本地連接
mysql -u root -p
mysql -h localhost -u root -p db_name
# 遠程連接
mysql -h 192.168.1.100 -u app_user -p app_db
# 執行腳本文件
mysql -u root -p db_name < script.sql
# 批量模式(非交互)
mysql -u root -p -e "SELECT VERSION();" db_name
SHOW DATABASES;
USE db_name;
SHOW TABLES;
SHOW TABLES LIKE 'prefix_%';
DESC tbl_name;
SHOW CREATE TABLE tbl_name\G
SHOW COLUMNS FROM tbl_name;
SHOW INDEX FROM tbl_name\G
-- 創建用戶
CREATE USER 'app'@'%' IDENTIFIED BY 'strong_pass';
-- 授權(按需最小權限)
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
-- 刷新生效
FLUSH PRIVILEGES;
-- 查看權限
SHOW GRANTS FOR 'app'@'%';
-- 撤銷權限
REVOKE ALL PRIVILEGES ON *.* FROM 'app'@'%';
DROP USER 'app'@'%';
-- 修改密碼 (5.7+)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';
-- 或
SET PASSWORD FOR 'root'@'localhost' = 'new_pass';
# 邏輯備份 mysqldump
mysqldump -u root -p --databases db1 db2 > backup.sql
mysqldump -u root -p db1 tbl1 tbl2 > backup_tbl.sql
mysqldump -u root -p -d db1 > schema_only.sql # 只導結構
mysqldump -u root -p -t db1 > data_only.sql # 只導數據
mysqldump -u root -p --single-transaction --routines --triggers --events db1 > full.sql
# 恢復
mysql -u root -p db1 < backup.sql
# 物理備份(需停庫或 xtrabackup)
# xtrabackup 在線熱備份工具,推薦生產環境
-- 慢查詢開啟
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
-- 執行計劃
EXPLAIN SELECT * FROM tbl WHERE col = 1\G
EXPLAIN FORMAT=JSON SELECT ...\G -- 5.6+ JSON 格式更詳細
-- 狀態監控
SHOW GLOBAL STATUS LIKE 'Com_select';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
-- 變量查看/修改
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SET GLOBAL innodb_buffer_pool_size = 1073741824; -- 1GB 動態調整
-- 進程列表
SHOW FULL PROCESSLIST;
KILL 12345; -- 殺死長事務/慢查詢
-- 索引分析
ANALYZE TABLE tbl_name;
OPTIMIZE TABLE tbl_name; -- 整理碎片,MyISAM/InnoDB 均支持
| 參數 | 建議值/說明 |
|---|---|
| innodb_buffer_pool_size | 專用機 70-80% 物理內存 |
| innodb_log_file_size | 256M-1G,減少檢查點刷盤 |
| innodb_flush_log_at_trx_commit | 2(高性能)或 1(最高安全) |
| max_connections | 1000-5000,配合 thread_cache_size |
| query_cache_type/size | 5.7 建議關閉,8.0 已移除 |
| tmp_table_size/max_heap_table_size | 64M-256M,減少磁盤臨時表 |
| sort_buffer_size/join_buffer_size | 2M-8M,按會話分配,慎調大 |
# 查看版本
mysql -V
mysqladmin -u root -p version
# 查看當前連接數
mysqladmin -u root -p extended-status | grep Threads_connected
# 查看數據庫大小
mysql -u root -p -e "SELECT table_schema AS 'DB', ROUND(SUM(data_length+index_length)/1024/1024,2) AS 'Size_MB' FROM information_schema.tables GROUP BY table_schema;"
# 導出建表語句
mysqldump -u root -p -d db_name > schema.sql
# 檢查表碎片
mysql -u root -p -e "SELECT TABLE_NAME, DATA_FREE FROM information_schema.TABLES WHERE TABLE_SCHEMA='db_name' AND DATA_FREE > 0;"
命令無數,理解原理才能舉一反三。重點掌握:
EXPLAIN執行計劃、SHOW ENGINE INNODB STATUS事務/鎖/內存、pt-query-digest慢查詢分析。