内容简介:本文主要介绍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. 持续改进
– 定期回顾运维工作
– 分析故障案例
– 优化运维流程
– 引入自动化工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
