qidao123.com技术社区-IT企服评测·应用市场

标题: 从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化 [打印本页]

作者: 去皮卡多    时间: 2025-5-5 14:00
标题: 从实列中学习linux shell12 通过Shell脚本来优化MySQL数据库性能,特别是慢SQL跟踪和索引优化
在Shell脚本中优化MySQL数据库性能,特别是慢SQL跟踪和索引优化

可以通过以下步骤实现。以下是一个结构化的办理方案,包罗示例代码和具体阐明:

1. 启用慢查询日志

目标:动态启用慢查询日志并配置参数,网络慢SQL数据。
  1. #!/bin/bash
  2. # 配置慢查询参数
  3. MYSQL_USER="root"
  4. MYSQL_PASS="your_password"
  5. SLOW_LOG_PATH="/var/log/mysql/mysql-slow.log"
  6. LONG_QUERY_TIME=1  # 记录超过1秒的查询
  7. # 动态启用慢查询日志(无需重启)
  8. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  9. SET GLOBAL slow_query_log = 'ON';
  10. SET GLOBAL long_query_time = $LONG_QUERY_TIME;
  11. SET GLOBAL slow_query_log_file = '$SLOW_LOG_PATH';
  12. "
  13. # 可选:修改配置文件持久化设置(需重启MySQL)
  14. sudo sed -i '/^#slow_query_log/ c\slow_query_log = ON' /etc/mysql/my.cnf
  15. sudo sed -i "/^#long_query_time/ c\long_query_time = $LONG_QUERY_TIME" /etc/mysql/my.cnf
  16. sudo systemctl restart mysql
  17. echo "慢查询日志已启用,日志路径:$SLOW_LOG_PATH"
复制代码

2. 分析慢查询日志

目标:利用工具分析日志并天生报告。
  1. # 安装Percona Toolkit(如未安装)
  2. if ! command -v pt-query-digest &> /dev/null; then
  3.     echo "安装Percona Toolkit..."
  4.     sudo apt-get install percona-toolkit
  5. fi
  6. # 生成慢查询分析报告
  7. REPORT_FILE="slow_query_report.txt"
  8. pt-query-digest $SLOW_LOG_PATH > $REPORT_FILE
  9. echo "慢查询分析报告已生成:$REPORT_FILE"
复制代码

3. 索引优化分析

目标:检查缺失或冗余索引,天生优化建议。
  1. # 生成索引优化建议
  2. INDEX_REPORT="index_optimization_report.txt"
  3. # 检查未使用的索引
  4. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  5. SELECT object_schema, object_name, index_name
  6. FROM sys.schema_unused_indexes;
  7. " >> $INDEX_REPORT
  8. # 检查冗余索引
  9. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  10. SELECT table_schema, table_name, index_name, redundant_index_name
  11. FROM sys.schema_redundant_indexes;
  12. " >> $INDEX_REPORT
  13. echo "索引优化建议已生成:$INDEX_REPORT"
复制代码

4. 定期维护任务

目标:自动执行表分析和统计信息更新。
  1. # 分析所有表以更新统计信息
  2. DATABASES=$(mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|sys)")
  3. for DB in $DATABASES; do
  4.     TABLES=$(mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SHOW TABLES FROM $DB;" | tail -n +2)
  5.     for TABLE in $TABLES; do
  6.         mysql -u$MYSQL_USER -p$MYSQL_PASS -e "ANALYZE TABLE $DB.$TABLE;"
  7.     done
  8. done
  9. echo "表统计信息已更新"
复制代码

5. 自动化脚本整合

完整脚本示例:将上述步骤整合为定时任务。
  1. #!/bin/bash
  2. # 配置参数
  3. MYSQL_USER="root"
  4. MYSQL_PASS="your_password"
  5. SLOW_LOG_PATH="/var/log/mysql/mysql-slow.log"
  6. LONG_QUERY_TIME=1
  7. REPORT_DIR="/opt/mysql_reports"
  8. mkdir -p $REPORT_DIR
  9. # 启用慢查询日志
  10. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  11. SET GLOBAL slow_query_log = 'ON';
  12. SET GLOBAL long_query_time = $LONG_QUERY_TIME;
  13. SET GLOBAL slow_query_log_file = '$SLOW_LOG_PATH';
  14. "
  15. # 等待收集数据(例如1小时)
  16. sleep 3600
  17. # 关闭慢查询日志(可选)
  18. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "SET GLOBAL slow_query_log = 'OFF';"
  19. # 生成慢查询报告
  20. pt-query-digest $SLOW_LOG_PATH > $REPORT_DIR/slow_query_$(date +%F).txt
  21. # 生成索引优化报告
  22. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  23. SELECT object_schema, object_name, index_name
  24. FROM sys.schema_unused_indexes;
  25. " > $REPORT_DIR/index_unused_$(date +%F).txt
  26. mysql -u$MYSQL_USER -p$MYSQL_PASS -e "
  27. SELECT table_schema, table_name, index_name, redundant_index_name
  28. FROM sys.schema_redundant_indexes;
  29. " > $REPORT_DIR/index_redundant_$(date +%F).txt
  30. # 发送邮件通知(可选)
  31. echo "性能报告已生成" | mail -A "$REPORT_DIR/*_$(date +%F).txt" admin@example.com
复制代码

关键阐明


注意事项


通过上述脚本,可自动化实现MySQL性能监控与优化,明显提拔数据库服从。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4