Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux MySQL 常用命令大全:安裝、管理、備份與優化

編輯:Linux 教學

前言

MySQL 是 Linux 下最流行的關係型數據庫。本文匯總從服務管理、帳號權限、庫表操作、數據導入導出、字符集設置到性能優化的高頻命令,作為開發運維的桌面速查手冊。

一、服務管理

操作Systemd (現代)SysVinit (傳統)
啟動systemctl start mysqldservice mysqld start / /etc/init.d/mysqld start
停止systemctl stop mysqldservice mysqld stop
重啟systemctl restart mysqldservice mysqld restart
狀態systemctl status mysqldservice mysqld status
開機自啟systemctl enable mysqldchkconfig mysqld on

服務名可能為 mysql、mysqld、mariadb,視發行版而定。

二、連接與認證

1. 本地連接

mysql -u root -p
# 輸入密碼(首次安裝 root 可能為空,直接回車)

2. 遠程連接

mysql -h 192.168.1.100 -u root -p'password' -P 3306

3. 退出

exit
# 或
quit
# 或 Ctrl+D

三、密碼管理

1. 修改 root 密碼 (5.7+ / 8.0)

# 方法一:mysqladmin
mysqladmin -u root -p'oldpass' password 'newpass'

# 方法二:SQL 語句 (需先登錄)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
FLUSH PRIVILEGES;

2. 忘記 root 密碼重置

systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root
# 在 mysql> 提示符下
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';
exit
# 重啟正常服務
systemctl restart mysqld

四、用戶與權限

1. 創建用戶

CREATE USER 'appuser'@'%' IDENTIFIED BY 'strongpass';

2. 授權

-- 全庫全表讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';

-- 全權限(慎用)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

-- 僅特定表
GRANT SELECT ON mydb.orders TO 'readonly'@'%';

3. 查看權限

SHOW GRANTS FOR 'appuser'@'%';

4. 撤銷權限

REVOKE INSERT ON mydb.* FROM 'appuser'@'%';

5. 刪除用戶

DROP USER 'appuser'@'%';

6. 刷新生效

FLUSH PRIVILEGES;

五、庫表操作

操作SQL
顯示所有庫SHOW DATABASES;
創建庫CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
切換庫USE mydb;
刪除庫DROP DATABASE mydb;
顯示表SHOW TABLES;
查看表結構DESC tbl_name; / SHOW CREATE TABLE tbl_name;
創建表CREATE TABLE t (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
刪除表DROP TABLE t;
清空表數據TRUNCATE TABLE t; (比 DELETE 快,不可回滾)

六、數據導入導出

1. 邏輯備份

# 備份單庫
mysqldump -u root -p --single-transaction --routines --triggers --events mydb > mydb_$(date +%F).sql

# 備份多庫
mysqldump -u root -p --databases db1 db2 > multi.sql

# 備份所有庫
mysqldump -u root -p --all-databases > all.sql

# 只導出結構
mysqldump -u root -p --no-data mydb > schema.sql

# 壓縮備份
mysqldump -u root -p mydb | gzip > mydb_$(date +%F).sql.gz

2. 邏輯恢復

# 方法一:shell 重定向
mysql -u root -p mydb < mydb.sql

# 方法二:mysql 客戶端內部
mysql -u root -p
mysql> USE mydb;
mysql> SOURCE /path/to/mydb.sql;

3. 文本數據導入

# 數據文件:字段用 TAB 分隔,NULL 用 \N 表示
LOAD DATA LOCAL INFILE '/path/data.txt' INTO TABLE tbl_name
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n';

4. 物理備份

# Percona XtraBackup (熱備份 InnoDB,不阻塞)
xtrabackup --backup --target-dir=/backup/full --user=root --password

# 增量備份
xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full

七、字符集與編碼

層級查看修改
服務器級SHOW VARIABLES LIKE 'character_set%';啟動參數 --character-set-server=utf8mb4 或 my.cnf [mysqld] character-set-server=utf8mb4
庫級SHOW CREATE DATABASE mydb;ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
表級SHOW CREATE TABLE t;ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
連接級SHOW VARIABLES LIKE 'character_set_connection';客戶端連接字符串 ?characterEncoding=utf8mb4 或 SET NAMES utf8mb4;

強烈建議:全鏈路使用 utf8mb4(支持 Emoji、完整 Unicode),避免 utf8(實為 utf8mb3)截斷 4 字節字符。

八、常用維護與優化命令

  • 查看進程列表:SHOW FULL PROCESSLIST; / SHOW PROCESSLIST;
  • 殺死長查詢:KILL 12345; (ID 來自 PROCESSLIST)
  • 查看引擎狀態:SHOW ENGINE INNODB STATUS\G
  • 查看表大小:
    SELECT table_schema, table_name,
           ROUND(data_length/1024/1024,2) AS data_mb,
           ROUND(index_length/1024/1024,2) AS idx_mb
    FROM information_schema.tables
    WHERE table_schema='mydb'
    ORDER BY data_mb DESC;
  • 分析表統計:ANALYZE TABLE t;
  • 優化表碎片:OPTIMIZE TABLE t; (InnoDB 實際執行 ALTER TABLE ... ENGINE=InnoDB 重建)
  • 查看慢查詢日志:mysqldumpslow -s t /var/log/mysql/slow.log | head -20
  • 檢查/修復表:CHECK TABLE t; / REPAIR TABLE t; (僅 MyISAM)

九、配置文件關鍵參數

[mysqld]
# 基礎
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

# InnoDB 核心
innodb_buffer_pool_size=4G          # 物理內存 60-80%
innodb_log_file_size=512M
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=1    # ACID,2 可提升寫性能
innodb_file_per_table=1
innodb_io_capacity=2000             # SSD 建議 2000-5000

# 連接
max_connections=1000
max_connect_errors=100000

# 日志
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=1
log_queries_not_using_indexes=1

# 安全
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

十、快速排查清單

  1. 連不上?檢查 systemctl status mysqld、netstat -ltnp | grep 3306、防火牆、bind-address、skip-networking。
  2. 報 Access denied?確認用戶@主機、密碼、FLUSH PRIVILEGES、密碼插件 (caching_sha2_password vs mysql_native_password)。
  3. 寫入慢?檢查 innodb_flush_log_at_trx_commit、innodb_io_capacity、磁盤 IOPS、sync_binlog。
  4. 主從延遲?SHOW SLAVE STATUS\G 看 Seconds_Behind_Master、Slave_IO_Running/Slave_SQL_Running、relay_log_space_limit。
  5. 磁盤爆滿?PURGE BINARY LOGS BEFORE '2024-01-01';、調整 expire_logs_days、清理臨時表、innodb_file_per_table + OPTIMIZE TABLE 回收空間。

結語

MySQL 命令繁多,但核心高頻集中在服務管理、權限控制、庫表 DDL、備份恢復、字符集、慢查詢分析六大塊。將本文作為速查表,配合 mysql --help、mysqldump --help、官方文檔,即可覆蓋 95% 日常運維場景。

Copyright © Windows教程網 All Rights Reserved