菜鸟科技网

MySQL DBA必备命令有哪些?

MySQL DBA在日常运维和管理中需要掌握一系列核心命令,这些命令涵盖了数据库安装配置、用户权限管理、备份恢复、性能优化、监控诊断等多个方面,熟练运用这些命令能够有效保障数据库的稳定性、安全性和高效运行,以下将从不同维度详细介绍MySQL DBA常用的命令及其实际应用场景。

MySQL DBA必备命令有哪些?-图1
(图片来源网络,侵删)

用户与权限管理

用户和权限管理是数据库安全的基础,创建用户需要使用CREATE USER命令,例如CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';,这里'app_user'是用户名,表示允许从任何主机连接,IDENTIFIED BY后跟密码,创建用户后,需要通过GRANT语句分配权限,如GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'%';,表示授予该用户对app_db数据库所有表的查询、插入和更新权限,权限分配完成后,需执行FLUSH PRIVILEGES;使权限立即生效,查看用户权限可以使用SHOW GRANTS FOR 'app_user'@'%';,若需撤销权限,使用REVOKE命令,例如REVOKE DELETE ON app_db.* FROM 'app_user'@'%';,删除用户则通过DROP USER 'app_user'@'%';实现,在权限管理中,需遵循最小权限原则,避免赋予用户不必要的权限,同时定期审计用户权限,及时清理闲置用户。

数据库与表结构管理

创建数据库使用CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,指定字符集和排序规则以确保兼容性,选择数据库后,可通过CREATE TABLE语句创建表,例如CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE);,修改表结构时,常用ALTER TABLE命令,如添加列ALTER TABLE users ADD COLUMN age INT DEFAULT 18;,修改列类型ALTER TABLE users MODIFY COLUMN username VARCHAR(100);,或删除列ALTER TABLE users DROP COLUMN age;,索引优化是提升查询性能的关键,创建索引使用CREATE INDEX idx_email ON users(email);,唯一索引使用CREATE UNIQUE INDEX idx_username ON users(username);,删除索引通过DROP INDEX idx_email ON users;,查看表结构可以使用DESCRIBE users;SHOW CREATE TABLE users;

备份与恢复

备份是防止数据丢失的重要手段,MySQL提供了mysqldump工具进行逻辑备份,全量备份命令为mysqldump -u root -p --all-databases > full_backup.sql,备份单个数据库使用mysqldump -u root -p db_name > db_backup.sql,备份单个表则使用mysqldump -u root -p db_name table_name > table_backup.sql,若需包含存储过程和函数,可添加--routines --triggers参数,物理备份则适用于大型数据库,可通过Percona XtraBackup工具实现,例如innobackupex --user=root --password=password /backup/dir,恢复数据时,对于逻辑备份的全量备份,执行mysql -u root -p < full_backup.sql;对于单库备份,需先创建数据库CREATE DATABASE db_name;,再执行mysql -u root -p db_name < db_backup.sql,物理备份恢复需要先准备备份innobackupex --apply-log /backup/dir,然后停止MySQL服务,替换数据文件,最后重启服务。

性能监控与优化

性能监控是保障数据库高效运行的核心,使用SHOW PROCESSLIST;可查看当前数据库中的线程列表,包括连接状态、执行的SQL等,通过KILL [PROCESSID];可终止异常线程,监控慢查询日志,需先开启慢查询配置slow_query_log = 1slow_query_log_file = /var/log/mysql/slow.loglong_query_time = 2,然后通过mysqldumpslow -s t /var/log/mysql/slow.log分析慢查询,执行计划分析是优化SQL的重要手段,使用EXPLAIN SELECT * FROM users WHERE username = 'test';,通过查看type(访问类型,如ref、range)、key(使用的索引)、rows(扫描行数)等判断SQL性能,索引优化方面,可通过SHOW INDEX FROM users;查看索引使用情况,避免索引失效的场景,如对索引列进行函数操作或类型转换,服务器级别监控可使用SHOW GLOBAL STATUS LIKE 'Threads%';查看线程数,SHOW GLOBAL VARIABLES LIKE 'buffer_pool_size';查看缓冲池大小等。

MySQL DBA必备命令有哪些?-图2
(图片来源网络,侵删)

日常维护与故障排查

日常维护包括定期检查磁盘空间、优化表、更新统计信息等,检查磁盘空间使用df -h命令,优化表可使用OPTIMIZE TABLE users;,该命令会重建表、消除碎片,适用于频繁更新的表,更新统计信息使用ANALYZE TABLE users;,确保查询优化器生成高效的执行计划,故障排查时,若遇到连接问题,可检查max_connections参数,通过SHOW VARIABLES LIKE 'max_connections';查看,并使用SET GLOBAL max_connections = 1000;临时调整(需配置文件永久生效),若出现死锁,可通过SHOW ENGINE INNODB STATUS;查看死锁日志,分析锁等待情况并优化事务隔离级别或SQL语句,对于主从复制故障,检查SHOW SLAVE STATUS\G;中的Slave_IO_RunningSlave_SQL_Running状态,若为No,需根据错误日志(Last_Error字段)定位问题,如网络中断、主从数据不一致等,可通过CHANGE REPLICATION SOURCE TO重新配置主从信息或跳过错误事件(SET GLOBAL sql_slave_skip_counter = 1;)。

相关问答FAQs

Q1: 如何查看MySQL当前正在执行的慢查询?
A1: 确保MySQL配置中开启了慢查询日志,在my.cnfmy.ini中设置slow_query_log = 1slow_query_log_file = 慢查询日志路径long_query_time = 阈值(秒),重启MySQL服务,使用mysqldumpslow工具分析慢查询日志,例如mysqldumpslow -s t -t 10 慢查询日志路径-s t表示按查询时间排序,-t 10表示显示前10条最慢的查询,也可通过第三方监控工具如Percona PMM或MySQL Enterprise Monitor实时查看慢查询。

Q2: MySQL主从复制中断,Slave_SQL_Running为No,如何排查?
A2: 首先执行SHOW SLAVE STATUS\G;查看Last_Error字段,获取具体的错误信息,常见错误包括主键冲突、数据类型不匹配、SQL语法错误等,若因数据不一致导致,可在从库上跳过当前错误事件(仅临时解决,不推荐长期使用),执行STOP SLAVE; SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;,若为DDL语句冲突,需确保主从执行顺序一致,或使用gh-ostpt-online-schema-change等工具进行在线变更,若为网络问题,检查主从之间的网络连通性及防火墙设置,排查后,需确保主从数据一致,必要时通过全量备份+增量日志重新搭建从库。

MySQL DBA必备命令有哪些?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇