1. 首页 > MySQL教程 > 正文

MySQL教程FG299-MySQL数据库运维规范

内容简介:本文主要介绍MySQL存储过程参数与返回值的相关知识,包括参数类型、使用方法和最佳实践等内容。风哥教程参考MySQL官方文档MySQL Operations、MySQL Server Administration。 01 更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 运维规范的重要性

数据库运维规范是保障数据库系统稳定、安全、高效运行的基础。通过建立标准化的运维流程和规范,可以降低人为错误,提高运维效率,确保服务质量。 02 学习交流加群风哥微信: itpux-com

1.2 运维规范范围

MySQL数据库运维规范涵盖以下方面:

# 运维规范范围

1. 安装配置规范
– 版本选择标准
– 安装目录规范
– 配置文件规范
– 参数配置规范

2. 日常运维规范
– 监控检查规范
– 备份管理规范
– 日志管理规范
– 变更管理规范

3. 安全管理规范
– 账号管理规范
– 权限管理规范
– 访问控制规范
– 审计管理规范

4. 性能管理规范
– 性能监控规范
– 优化操作规范
– 容量规划规范
– 问题处理规范

5. 故障管理规范
– 故障分级规范
– 故障处理规范
– 故障报告规范
– 故障复盘规范

Part02-生产环境规划与建议

2.1 版本选择规范

MySQL版本选择的标准: 03 学习交流加群风哥QQ113257174

# 版本选择规范

1. 版本选择原则
– 优先选择LTS(长期支持)版本
– 避免使用最新发布的版本(至少等待3个月)
– 优先选择GA(正式发布)版本
– 避免使用EOL(停止维护)版本

2. 推荐版本
– MySQL 8.0.x(推荐8.0.36及以上)
– 避免使用MySQL 5.7(2023年10月停止支持)
– 避免使用MySQL 5.6及以下版本

3. 版本检查
# 查看当前版本
mysql> SELECT VERSION();

输出示例:
+———–+
| VERSION() |
+———–+
| 8.0.36 |
+———–+

# 查看版本状态
mysql> SHOW VARIABLES LIKE ‘version%’;

输出示例:
+————————-+——————————+
| Variable_name | Value |
+————————-+——————————+
| version | 8.0.36 |
| version_comment | MySQL Community Server – GPL |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
| version_compile_zlib | 1.2.13 |
+————————-+——————————+

2.2 目录结构规范

MySQL目录结构规范: 04 风哥提示:

# 目录结构规范

1. 安装目录
/usr/local/mysql/ # MySQL安装目录
/usr/local/mysql/bin/ # 可执行文件
/usr/local/mysql/lib/ # 库文件
/usr/local/mysql/share/ # 共享文件

2. 数据目录
/data/mysql/ # 数据根目录
/data/mysql/data/ # 数据文件
/data/mysql/logs/ # 日志文件
/data/mysql/tmp/ # 临时文件
/data/mysql/backup/ # 备份文件

3. 日志目录
/data/mysql/logs/error/ # 错误日志
/data/mysql/logs/slow/ # 慢查询日志
/data/mysql/logs/general/ # 通用日志
/data/mysql/logs/binlog/ # 二进制日志
/data/mysql/logs/relay/ # 中继日志

4. 配置目录
/etc/mysql/ # 配置文件目录
/etc/mysql/my.cnf # 主配置文件
/etc/mysql/conf.d/ # 配置片段目录

5. 创建目录结构
mkdir -p /data/mysql/{data,logs/{error,slow,general,binlog,relay},tmp,backup}
chown -R mysql:mysql /data/mysql
chmod 755 /data/mysql
chmod 700 /data/mysql/data

6. 配置my.cnf
vim /etc/mysql/my.cnf

[client]
port = 3306
socket = /data/mysql/mysql.sock

[mysqld]
# 基础配置
user = mysql
port = 3306
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysql.pid
basedir = /usr/local/mysql
datadir = /data/mysql/data
tmpdir = /data/mysql/tmp

# 日志配置
log-error = /data/mysql/logs/error/mysql-error.log
slow_query_log_file = /data/mysql/logs/slow/mysql-slow.log
log-bin = /data/mysql/logs/binlog/mysql-bin
relay-log = /data/mysql/logs/relay/mysql-relay

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# InnoDB配置
innodb_data_home_dir = /data/mysql/data
innodb_log_group_home_dir = /data/mysql/data

Part03-生产环境项目实施方案

3.1 监控检查规范

日常监控检查的规范: 05更多学习教程公众号风哥教程itpux_com

# 监控检查规范

1. 每日检查项目
– 数据库连接数
– 复制延迟
– 磁盘空间
– 慢查询数量
– 错误日志

2. 检查脚本
vim /scripts/daily_check.sh

#!/bin/bash

# MySQL日常检查脚本
MYSQL_USER=”monitor”
MYSQL_PASSWORD=”monitor_password”
LOG_FILE=”/var/log/mysql/daily_check.log”

# 记录检查时间
echo “========================================” >> $LOG_FILE
echo “检查时间: $(date)” >> $LOG_FILE

# 检查连接数
CONNECTIONS=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e “SHOW STATUS LIKE ‘Threads_connected’;” | awk ‘NR==2{print $2}’)
MAX_CONNECTIONS=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e “SHOW VARIABLES LIKE ‘max_connections’;” | awk ‘NR==2{print $2}’)
CONNECTION_PERCENT=$((CONNECTIONS * 100 / MAX_CONNECTIONS))

echo “当前连接数: $CONNECTIONS / $MAX_CONNECTIONS ($CONNECTION_PERCENT%)” >> $LOG_FILE

if [ $CONNECTION_PERCENT -gt 80 ]; then
echo “[WARNING] 连接数超过80%!” >> $LOG_FILE
fi

# 检查复制延迟
SLAVE_LAG=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e “SHOW SLAVE STATUS\G” 2>/dev/null | grep “Seconds_Behind_Master” | awk ‘{print $2}’)
if [ ! -z “$SLAVE_LAG” ] && [ “$SLAVE_LAG” != “NULL” ]; then
echo “复制延迟: $SLAVE_LAG 秒” >> $LOG_FILE
if [ $SLAVE_LAG -gt 300 ]; then
echo “[WARNING] 复制延迟超过5分钟!” >> $LOG_FILE
fi
fi

# 检查磁盘空间
DISK_USAGE=$(df -h /data/mysql | awk ‘NR==2{print $5}’ | sed ‘s/%//’)
echo “磁盘使用率: $DISK_USAGE%” >> $LOG_FILE

if [ $DISK_USAGE -gt 85 ]; then
echo “[WARNING] 磁盘使用率超过85%!” >> $LOG_FILE
fi

# 检查慢查询
SLOW_QUERIES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e “SHOW STATUS LIKE ‘Slow_queries’;” | awk ‘NR==2{print $2}’)
echo “慢查询数量: $SLOW_QUERIES” >> $LOG_FILE

# 检查错误日志
ERROR_COUNT=$(grep -c “ERROR” /data/mysql/logs/error/mysql-error.log 2>/dev/null || echo 0)
echo “错误日志条目: $ERROR_COUNT” >> $LOG_FILE

echo “检查完成” >> $LOG_FILE

3. 执行检查脚本
chmod +x /scripts/daily_check.sh
/scripts/daily_check.sh

输出示例:
查看日志文件
tail -20 /var/log/mysql/daily_check.log

========================================
检查时间: Fri Apr 4 09:00:00 CST 2026
当前连接数: 45 / 500 (9%)
复制延迟: 0 秒
磁盘使用率: 45%
慢查询数量: 12
错误日志条目: 0
检查完成

4. 设置定时任务
crontab -e

# 每天上午9点执行检查
0 9 * * * /scripts/daily_check.sh

5. 查看定时任务
crontab -l

输出示例:
0 9 * * * /scripts/daily_check.sh

3.2 备份管理规范

备份管理的规范: 06 from mysql视频:www.itpux.com

# 备份管理规范

1. 备份策略
– 全量备份:每周日执行
– 增量备份:每天执行
– 日志备份:实时备份
– 保留周期:本地保留7天,异地保留30天

2. 备份脚本
vim /scripts/backup.sh

#!/bin/bash

# MySQL备份脚本
BACKUP_DIR=”/data/mysql/backup”
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER=”backup”
MYSQL_PASSWORD=”backup_password”
RETENTION_DAYS=7

# 创建备份目录
mkdir -p $BACKUP_DIR

# 全量备份(周日)
if [ $(date +%w) -eq 0 ]; then
echo “开始全量备份…”
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD –all-databases –single-transaction –flush-logs –master-data=2 > $BACKUP_DIR/full_$DATE.sql
if [ $? -eq 0 ]; then
echo “全量备份成功: full_$DATE.sql”
gzip $BACKUP_DIR/full_$DATE.sql
else
echo “全量备份失败!”
exit 1
fi
else
# 增量备份(其他日期)
echo “开始增量备份…”
LAST_FULL=$(ls -t $BACKUP_DIR/full_*.sql.gz | head -1 | sed ‘s/.sql.gz//’)
if [ ! -z “$LAST_FULL” ]; then
innobackupex –incremental $BACKUP_DIR/incr_$DATE –incremental-basedir=$LAST_FULL –user=$MYSQL_USER –password=$MYSQL_PASSWORD
if [ $? -eq 0 ]; then
echo “增量备份成功: incr_$DATE”
else
echo “增量备份失败!”
exit 1
fi
fi
fi

# 删除过期备份
echo “清理过期备份…”
find $BACKUP_DIR -name “*.sql.gz” -mtime +$RETENTION_DAYS -delete
find $BACKUP_DIR -name “incr_*” -mtime +$RETENTION_DAYS -exec rm -rf {} \;

# 同步到异地
rsync -avz –progress $BACKUP_DIR/ remote-server:/backup/mysql/

echo “备份完成!”

3. 备份验证
# 定期验证备份可用性
mysql -u root -p -e “CREATE DATABASE backup_test;”
mysql -u root -p backup_test < $BACKUP_DIR/full_$DATE.sql

# 检查数据完整性
mysql -u root -p -e “USE backup_test; SELECT COUNT(*) FROM users;”

4. 设置定时任务
crontab -e

# 每天凌晨2点执行备份
0 2 * * * /scripts/backup.sh >> /var/log/mysql/backup.log 2>&1

Part04-生产案例与实战讲解

4.1 账号管理规范

数据库账号管理的规范:

# 账号管理规范

1. 账号命名规范
– 应用账号:app_<应用名>_<环境>
– 管理账号:dba_<姓名>_<环境>
– 监控账号:monitor_<环境>
– 备份账号:backup_<环境>

2. 密码规范
– 长度至少12位
– 包含大小写字母、数字、特殊字符
– 每90天强制更换
– 禁止使用历史密码

3. 权限最小化原则
– 应用账号只授予必要的权限
– 禁止授予SUPER、FILE等高危权限
– 禁止授予ALL PRIVILEGES
– 按功能分离权限

4. 账号创建示例
— 创建应用账号
CREATE USER ‘app_order_prod’@’10.0.0.%’ IDENTIFIED BY ‘ComplexP@ssw0rd123’;
GRANT SELECT, INSERT, UPDATE, DELETE ON order_db.* TO ‘app_order_prod’@’10.0.0.%’;

— 创建管理账号
CREATE USER ‘dba_zhangsan_prod’@’10.0.0.%’ IDENTIFIED BY ‘AdminP@ssw0rd456’;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX ON *.* TO ‘dba_zhangsan_prod’@’10.0.0.%’;

— 创建监控账号
CREATE USER ‘monitor_prod’@’localhost’ IDENTIFIED BY ‘MonitorP@ss789’;
GRANT SELECT, REPLICATION CLIENT, PROCESS ON *.* TO ‘monitor_prod’@’localhost’;

— 创建备份账号
CREATE USER ‘backup_prod’@’localhost’ IDENTIFIED BY ‘BackupP@ss012’;
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER ON *.* TO ‘backup_prod’@’localhost’;

FLUSH PRIVILEGES;

5. 定期审查账号
— 查看所有账号
SELECT user, host, plugin, password_expired, password_last_changed
FROM mysql.user
WHERE user NOT LIKE ‘mysql.%’;

— 查看账号权限
SHOW GRANTS FOR ‘app_order_prod’@’10.0.0.%’;

— 删除无用账号
DROP USER ‘unused_user’@’%’;

Part05-风哥经验总结与分享

5.1 运维最佳实践

数据库运维的最佳实践:

# 运维最佳实践

1. 变更管理
– 所有变更必须通过变更流程
– 变更前必须备份
– 变更必须在低峰期执行
– 变更后必须验证

2. 监控告警
– 建立完善的监控体系
– 设置合理的告警阈值
– 告警必须及时处理
– 定期进行监控 review

3. 文档管理
– 维护完整的架构文档
– 记录所有配置变更
– 编写操作手册
– 定期更新文档

4. 团队管理
– 明确职责分工
– 建立值班制度
– 定期进行培训
– 知识分享和传承

5. 持续改进
– 定期回顾运维工作
– 分析故障案例
– 优化运维流程
– 引入自动化工具

GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息