MySQL 常用 SQL 与运维速查
连接与查看
mysql -h 127.0.0.1 -u app -p appdb
mysql -e 'SELECT VERSION();'
mysql -e 'SHOW DATABASES;'
mysql appdb -e 'SHOW TABLES;'
mysql appdb -e 'SHOW CREATE TABLE orders\G'
mysql -e 'SHOW PROCESSLIST;'
mysql -e 'SHOW STATUS LIKE "Threads_connected";'
mysql -e 'SHOW VARIABLES LIKE "max_connections";'
用户与权限
CREATE USER 'app'@'%' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE ON app.* TO 'app'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'app'@'%';
ALTER USER 'app'@'%' IDENTIFIED BY 'new-password';
查询与优化
EXPLAIN SELECT * FROM orders WHERE user_id = 1;
EXPLAIN ANALYZE SELECT ...;
SHOW INDEX FROM orders;
SHOW TABLE STATUS LIKE 'orders';
SHOW ENGINE INNODB STATUS\G
备份与恢复
mysqldump -u root -p --single-transaction appdb > appdb.sql
mysqldump -u root -p --databases appdb > appdb-with-create.sql
mysql -u root -p appdb < appdb.sql
mysqladmin -u root -p status
场景速查
| 目的 |
命令 |
| 查看连接数 |
SHOW STATUS LIKE 'Threads_connected'; |
| 查看慢查询 |
SHOW VARIABLES LIKE 'slow_query_log'; |
| 查看锁等待 |
SHOW ENGINE INNODB STATUS\G |
| 查看复制 |
SHOW REPLICA STATUS\G |
| 查看表大小 |
information_schema.tables |
| 杀死连接 |
KILL <id>; |
易错点
mysqldump 不加 --single-transaction 可能拿到不一致快照。
- 命令行密码会进历史;用
~/.my.cnf 或 --defaults-extra-file。
GRANT 后忘记 FLUSH PRIVILEGES 的情况只在直接改表时出现。
- 字符集不一致会导致乱码;确认 client/server/table 的 charset。
- 大表
ALTER 可能锁表;用在线 DDL 或工具评估。
- 复制延迟和只读副本的
read_only 要确认。
EXPLAIN 的 rows 是估算值;结合 EXPLAIN ANALYZE 看实际。
相关命令
mysql — 完整命令页
mysqldump — 备份
mysqladmin — 状态