DBA 命令全面指南:核心操作、语法与最佳实践
DBA 命令全面指南:核心操作、语法与最佳实践
作为数据库管理员(DBA),掌握关键命令对于数据库的运维管理至关重要。下面我将分类介绍核心 DBA 命令,包括语法、使用场景和注意事项。
一、数据库管理命令
1. 数据库创建与删除
-- 创建数据库
CREATE DATABASE db_name
[CHARACTER SET charset_name]
[COLLATE collation_name];-- 删除数据库
DROP DATABASE [IF EXISTS] db_name;
注意事项:
- 删除操作不可逆,务必提前备份
- 生产环境使用
IF EXISTS
防止错误 - 示例:
CREATE DATABASE fin_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 存储引擎管理
-- 查看支持的存储引擎
SHOW ENGINES;-- 修改表的存储引擎
ALTER TABLE table_name ENGINE = InnoDB;
使用场景:
- InnoDB:事务型应用(默认)
- MyISAM:只读报表
- Memory:临时缓存表
二、用户与权限管理
1. 用户账户管理
-- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';-- 修改密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';-- 删除用户
DROP USER 'username'@'host';
安全规范:
- 密码策略:长度≥12位,包含大小写+数字+符号
- 主机限制:避免使用’%',如
'appuser'@'192.168.1.%'
- 定期审计:
SELECT user, host FROM mysql.user;
2. 权限控制
-- 授予权限
GRANT privilege_type ON db_name.table_name
TO 'username'@'host'
[WITH GRANT OPTION];-- 撤销权限
REVOKE privilege_type ON db_name.table_name
FROM 'username'@'host';-- 刷新权限
FLUSH PRIVILEGES;
权限类型:
权限 | 描述 | 风险等级 |
---|---|---|
ALL PRIVILEGES | 所有权限 | ⚠️⚠️⚠️ |
CREATE USER | 创建用户 | ⚠️⚠️⚠️ |
DROP | 删除对象 | ⚠️⚠️ |
SELECT | 读取数据 | ⚠️ |
INSERT | 插入数据 | ⚠️ |
最佳实践:
-- 最小权限原则示例
GRANT SELECT, INSERT ON sales_db.*
TO 'report_user'@'10.0.0.%';
三、备份与恢复命令
1. 逻辑备份 (mysqldump)
# 全库备份
mysqldump -u root -p --single-transaction --routines --triggers \
--all-databases > full_backup.sql# 单库备份
mysqldump -u root -p --single-transaction db_name > db_backup.sql
#例如mysqldump one > e:a.sql -uroot -p --default-character-set=utf8
#导出one这个数据库中的所有的表
参数说明:
--single-transaction
:InnoDB 一致性备份--routines
:包含存储过程--triggers
:包含触发器--skip-lock-tables
:MyISAM 表备份
2. 物理备份 (Percona XtraBackup)
# 全量备份
xtrabackup --backup --user=root --password=*** \
--target-dir=/backups/full/# 增量备份
xtrabackup --backup --user=root --password=*** \
--target-dir=/backups/inc1/ \
--incremental-basedir=/backups/full/
备份策略:
- 全量备份:每周日 2:00
- 增量备份:每天 2:00
- 保留策略:全备保留1个月,增量保留7天
3. 时间点恢复 (PITR)
-- 恢复全备
mysql -u root -p < full_backup.sql-- 应用binlog
mysqlbinlog --start-datetime="2023-06-01 12:00:00" \
--stop-datetime="2023-06-01 12:30:00" binlog.000012 | mysql -u root -p
四、性能优化命令
1. 查询分析
-- 查看执行计划
EXPLAIN FORMAT=JSON
SELECT * FROM orders WHERE customer_id = 100;-- 开启性能分析
SET SESSION profiling = 1;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ ...;
SHOW PROFILES;
2. 索引管理
-- 添加索引
CREATE INDEX idx_email ON users(email);-- 删除冗余索引
SELECT * FROM sys.schema_redundant_indexes;
DROP INDEX idx_name ON table_name;
索引优化原则:
- WHERE 条件列优先索引
- 避免在更新频繁的列建索引
- 组合索引遵循最左前缀原则
3. 参数调优
-- 动态调整参数
SET GLOBAL innodb_buffer_pool_size = 8*1024*1024*1024; -- 8GB-- 持久化配置
SET PERSIST innodb_log_file_size = 2*1024*1024*1024; -- 2GB
关键参数:
参数 | 推荐值 | 说明 |
---|---|---|
innodb_buffer_pool_size | 70-80% RAM | 缓存池大小 |
innodb_log_file_size | 1-4GB | Redo日志大小 |
max_connections | 500-1000 | 最大连接数 |
thread_cache_size | 100-200 | 线程缓存 |
五、监控与诊断命令
1. 实时状态监控
-- InnoDB状态
SHOW ENGINE INNODB STATUS;-- 锁信息
SELECT * FROM performance_schema.data_locks;-- 连接信息
SELECT * FROM sys.session;
2. 性能计数器
-- 查看QPS/TPS
SHOW GLOBAL STATUS LIKE 'Questions'; -- 每秒查询
SHOW GLOBAL STATUS LIKE 'Com_commit'; -- 每秒提交-- 缓冲池命中率
SELECT (1 - (Variable_value / (SELECT Variable_value FROM sys.metrics WHERE Variable_name = 'innodb_buffer_pool_read_requests'))) * 100 AS hit_rate
FROM sys.metrics
WHERE Variable_name = 'innodb_buffer_pool_reads';
健康指标:
- 缓冲池命中率 > 99%
- 线程缓存命中率 > 90%
- 表打开缓存命中率 > 95%
3. 慢查询分析
-- 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- 秒-- 分析慢查询
mysqldumpslow -s t /var/log/mysql/slow.log
pt-query-digest /var/log/mysql/slow.log
六、高可用与复制管理
1. 主从复制配置
-- 主库
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';-- 从库
CHANGE MASTER TOMASTER_HOST='master_host',MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
START SLAVE;
2. 复制状态监控
SHOW SLAVE STATUS\G-- 关键指标
SELECT Slave_IO_Running, Slave_SQL_Running,Seconds_Behind_Master
FROM performance_schema.replication_applier_status;
七、维护操作命令
1. 表维护
-- 优化表(碎片整理)
OPTIMIZE TABLE orders;-- 修复表(MyISAM)
REPAIR TABLE corrupted_table;
2. 分区管理
-- 添加分区
ALTER TABLE sales ADD PARTITION (PARTITION p2023 VALUES LESS THAN (2024)
);-- 删除分区
ALTER TABLE sales DROP PARTITION p2020;
八、安全审计命令
1. 启用审计
-- MySQL Enterprise Audit
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
SET GLOBAL audit_log_format = JSON;
SET GLOBAL audit_log_policy = ALL;-- 社区版替代方案
ALTER TABLE access_log
ADD COLUMN audit_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
2. 加密管理
-- 透明数据加密 (TDE)
ALTER INSTANCE ROTATE INNODB MASTER KEY;-- 列级加密
INSERT INTO users (ssn)
VALUES (AES_ENCRYPT('123-45-6789', 'secret_key'));
九、DBA 命令最佳实践
1. 操作前检查清单
- 备份验证:
SHOW CREATE TABLE table_name
- 影响评估:
EXPLAIN
分析执行计划 - 维护窗口:业务低峰期操作
- 回滚方案:准备好恢复脚本
- 监控告警:设置操作期间特殊监控
2. 危险命令处理
# 禁止直接删除数据
# 使用软删除或备份后操作
UPDATE users SET is_deleted = 1 WHERE user_id = 100;# 避免全表锁
ALTER TABLE orders ADD INDEX idx_customer (customer_id) ALGORITHM=INPLACE;
3. 自动化运维
#!/bin/bash
# 自动备份脚本
BACKUP_DIR="/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
mysqldump --single-transaction -u root -p$PASSWD --all-databases \
| gzip > $BACKUP_DIR/full_backup.sql.gz
find /backups -type d -mtime +30 -exec rm -rf {} \;
十、跨数据库命令对比
功能 | MySQL | PostgreSQL | Oracle | SQL Server |
---|---|---|---|---|
备份工具 | mysqldump | pg_dump | RMAN | BACKUP DATABASE |
性能诊断 | EXPLAIN | EXPLAIN ANALYZE | EXPLAIN PLAN | SHOWPLAN_XML |
监控视图 | sys schema | pg_stat_activity | V$SESSION | sys.dm_os_performance_counters |
高可用 | InnoDB Cluster | Patroni | RAC | AlwaysOn |
审计 | Enterprise Audit | pgaudit | Unified Audit | SQL Server Audit |
总结:DBA 黄金法则
- 备份重于一切:3-2-1 备份原则(3份备份、2种介质、1份异地)
- 最小权限原则:用户只拥有必要权限
- 变更管理:所有生产变更走审批流程
- 监控覆盖:核心指标 5 分钟粒度监控
- 文档沉淀:维护操作手册和应急预案
- 定期演练:每季度进行恢复演练
- 安全加固:定期扫描漏洞和配置审计
通过掌握这些核心 DBA 命令和最佳实践,您将能够高效管理数据库系统,保障数据安全和服务可用性。记住:优秀的 DBA 不是避免问题,而是在问题发生前预防,发生时快速解决。