DBA 命令全面指南:核心操作、语法与最佳实践

发布于:2025-07-04 ⋅ 阅读:(14) ⋅ 点赞:(0)

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';

安全规范

  1. 密码策略:长度≥12位,包含大小写+数字+符号
  2. 主机限制:避免使用’%',如'appuser'@'192.168.1.%'
  3. 定期审计: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;

索引优化原则

  1. WHERE 条件列优先索引
  2. 避免在更新频繁的列建索引
  3. 组合索引遵循最左前缀原则

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 TO
  MASTER_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. 操作前检查清单

  1. 备份验证SHOW CREATE TABLE table_name
  2. 影响评估EXPLAIN 分析执行计划
  3. 维护窗口:业务低峰期操作
  4. 回滚方案:准备好恢复脚本
  5. 监控告警:设置操作期间特殊监控

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 黄金法则

  1. 备份重于一切:3-2-1 备份原则(3份备份、2种介质、1份异地)
  2. 最小权限原则:用户只拥有必要权限
  3. 变更管理:所有生产变更走审批流程
  4. 监控覆盖:核心指标 5 分钟粒度监控
  5. 文档沉淀:维护操作手册和应急预案
  6. 定期演练:每季度进行恢复演练
  7. 安全加固:定期扫描漏洞和配置审计

通过掌握这些核心 DBA 命令和最佳实践,您将能够高效管理数据库系统,保障数据安全和服务可用性。记住:优秀的 DBA 不是避免问题,而是在问题发生前预防,发生时快速解决。


网站公告

今日签到

点亮在社区的每一天
去签到