| name | mysql |
| description | MySQL 数据库管理与运维 |
| version | 1.0.0 |
| author | terminal-skills |
| tags | ["database","mysql","mariadb","sql"] |
MySQL 数据库管理
概述
MySQL/MariaDB 数据库的日常管理、备份恢复、性能调优等运维技能。
连接管理
mysql -u root -p
mysql -h hostname -P 3306 -u user -p database
mysql -u user -p database < script.sql
mysql -u user -p -e "SHOW DATABASES;"
用户与权限
SELECT user, host FROM mysql.user;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%';
GRANT SELECT, INSERT ON database.table TO 'username'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'username'@'%';
数据库操作
SHOW DATABASES;
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP DATABASE dbname;
USE dbname;
SHOW TABLES;
DESCRIBE tablename;
SHOW CREATE TABLE tablename;
备份与恢复
mysqldump 备份
mysqldump -u root -p database > backup.sql
mysqldump -u root -p --all-databases > all_backup.sql
mysqldump -u root -p --no-data database > schema.sql
mysqldump -u root -p database | gzip > backup.sql.gz
恢复
mysql -u root -p database < backup.sql
gunzip < backup.sql.gz | mysql -u root -p database
性能监控
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
SHOW STATUS;
SHOW GLOBAL STATUS LIKE 'Threads%';
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE '%buffer%';
SHOW VARIABLES LIKE 'slow_query%';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
常见场景
场景 1:排查慢查询
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SHOW VARIABLES LIKE 'slow_query_log_file';
EXPLAIN SELECT * FROM table WHERE condition;
EXPLAIN ANALYZE SELECT * FROM table WHERE condition;
场景 2:锁问题排查
SHOW ENGINE INNODB STATUS\G
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
SELECT * FROM information_schema.INNODB_TRX;
场景 3:主从复制状态
SHOW MASTER STATUS;
SHOW SLAVE STATUS\G
故障排查
| 问题 | 排查方法 |
|---|
| 连接数过多 | SHOW PROCESSLIST, 检查 max_connections |
| 查询慢 | EXPLAIN, 检查索引 |
| 锁等待 | SHOW ENGINE INNODB STATUS |
| 复制延迟 | SHOW SLAVE STATUS, 检查网络和负载 |
| 磁盘满 | 检查 binlog, 清理旧日志 |