greatsql教程FG028-GreatSQL日常维护管理实战
内容简介
本教程详细介绍GreatSQL数据库的日常维护管理,包括日常操作、监控、备份、性能优化等内容。风哥教程参考GreatSQL官方文档维护指南,帮助读者掌握GreatSQL的日常维护管理技能。
日常维护管理是确保数据库稳定运行的关键,通过定期的维护操作,可以提高数据库的性能和可靠性,减少故障的发生。本教程将从基础概念入手,逐步深入到实战案例和最佳实践。
目录大纲
Part01-基础概念与理论知识
1.1 日常维护概述
GreatSQL的日常维护是指为确保数据库系统稳定、高效运行而进行的一系列定期操作和检查。日常维护的目的是:
- 确保数据库系统的稳定性和可靠性
- 提高数据库系统的性能
- 预防和及时发现潜在的问题
- 确保数据的安全性和完整性
- 延长数据库系统的使用寿命
1.2 维护内容分类
日常维护内容主要包括以下几个方面:
- 系统检查:
- 服务状态检查
- 资源使用情况检查
- 日志检查
- 性能监控:
- 查询性能监控
- 系统负载监控
- 存储使用监控
- 备份与恢复:
- 定期备份
- 备份验证
- 恢复测试
- 优化与调整:
- 参数优化
- 索引优化
- 查询优化
- 安全管理:
- 用户权限管理
- 安全审计
- 漏洞修复
1.3 维护周期规划
维护周期规划建议:
- 每日维护:
- 服务状态检查
- 日志检查
- 备份验证
- 每周维护:
- 性能监控分析
- 索引优化
- 存储使用检查
- 每月维护:
- 完整备份
- 数据库优化
- 安全检查
- 每季度维护:
- 系统升级
- 存储清理
- 恢复测试
- 每年维护:
- 全面系统评估
- 架构优化
- 灾难恢复演练
Part02-生产环境规划与建议
2.1 维护工具选择
风哥提示:选择合适的维护工具可以提高维护效率,减少人工操作的错误。
维护工具推荐:
- 监控工具:
- Prometheus + Grafana
- Nagios
- Zabbix
- MySQL Enterprise Monitor
- 备份工具:
- Percona XtraBackup
- mysqldump
- mysqlpump
- GreatSQL Backup
- 性能分析工具:
- pt-query-digest
- MySQL Enterprise Monitor
- GreatSQL Performance Schema
- 管理工具:
- phpMyAdmin
- MySQL Workbench
- GreatSQL Admin
2.2 维护策略制定
维护策略制定建议:
- 制定详细的维护计划:
- 明确维护内容和周期
- 分配维护责任
- 制定维护流程
- 建立维护文档:
- 维护操作手册
- 故障处理流程
- 备份恢复计划
- 实施自动化维护:
- 编写维护脚本
- 设置定时任务
- 配置自动告警
- 定期培训:
- 维护技能培训
- 故障处理演练
- 新技术学习
2.3 风险控制措施
风险控制措施:
- 备份策略:
- 定期备份
- 多重备份
- 异地备份
- 监控告警:
- 设置合理的告警阈值
- 配置多渠道告警
- 定期检查告警系统
- 故障处理:
- 制定故障处理流程
- 建立应急响应机制
- 定期演练故障处理
- 变更管理:
- 变更审批流程
- 变更前测试
- 变更后验证
更多视频教程www.fgedu.net.cn
Part03-生产环境项目实施方案
3.1 日常操作流程
日常操作流程:
- 每日操作:
- 检查服务状态
- 查看错误日志
- 验证备份结果
- 监控系统负载
- 每周操作:
- 分析慢查询
- 检查索引使用情况
- 清理日志文件
- 更新统计信息
- 每月操作:
- 执行完整备份
- 优化表结构
- 检查用户权限
- 更新系统补丁
- 季度操作:
- 系统升级
- 存储清理
- 恢复测试
- 性能评估
3.2 监控系统部署
监控系统部署步骤:
- 安装监控工具:
- 安装Prometheus
- 安装Grafana
- 配置MySQL Exporter
- 配置监控指标:
- 系统指标(CPU、内存、磁盘、网络)
- 数据库指标(连接数、查询性能、缓存使用)
- 存储指标(空间使用、I/O性能)
- 设置告警规则:
- 服务状态告警
- 性能指标告警
- 存储空间告警
- 配置监控面板:
- 系统监控面板
- 数据库监控面板
- 趋势分析面板
3.3 备份恢复方案
备份恢复方案:
- 备份策略:
- 每日增量备份
- 每周完整备份
- 每月归档备份
- 备份存储:
- 本地存储
- 网络存储
- 云存储
- 恢复测试:
- 定期恢复测试
- 记录恢复时间
- 优化恢复流程
- 灾难恢复:
- 制定灾难恢复计划
- 建立异地备份
- 演练灾难恢复流程
Part04-生产案例与实战讲解
4.1 日常维护实战
# 每日维护脚本
cat > /greatsql/scripts/daily_maintenance.sh << 'EOF'
#!/bin/bash # daily_maintenance.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== Daily Maintenance ===” echo “Date: $(date)”
# 1. 检查服务状态
echo “1. Checking GreatSQL service status:” systemctl status greatsql
# 2. 查看错误日志
echo “2. Checking error logs:” tail -n 50 /greatsql/logs/error.log
# 3. 验证备份结果
echo “3. Checking backup status:” ls -la /greatsql/backup/
# 4. 监控系统负载
echo “4. Checking system load:” uptime
# 5. 检查数据库连接数
echo “5. Checking database connections:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Threads_connected’;”
# 6. 检查慢查询
echo “6. Checking slow queries:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” echo “=== Daily Maintenance Completed ===” echo “Date: $(date)” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/daily_maintenance.sh
cat > /greatsql/scripts/daily_maintenance.sh << 'EOF'
#!/bin/bash # daily_maintenance.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== Daily Maintenance ===” echo “Date: $(date)”
# 1. 检查服务状态
echo “1. Checking GreatSQL service status:” systemctl status greatsql
# 2. 查看错误日志
echo “2. Checking error logs:” tail -n 50 /greatsql/logs/error.log
# 3. 验证备份结果
echo “3. Checking backup status:” ls -la /greatsql/backup/
# 4. 监控系统负载
echo “4. Checking system load:” uptime
# 5. 检查数据库连接数
echo “5. Checking database connections:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Threads_connected’;”
# 6. 检查慢查询
echo “6. Checking slow queries:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;” echo “=== Daily Maintenance Completed ===” echo “Date: $(date)” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/daily_maintenance.sh
# 执行每日维护脚本 /greatsql/scripts/daily_maintenance.sh
=== Daily Maintenance ===
Date: Wed Apr 9 20:00:00 CST 2026
1. Checking GreatSQL service status:
● greatsql.service – GreatSQL Server
Loaded: loaded (/usr/lib/systemd/system/greatsql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 08:00:00 CST; 12h ago
Main PID: 12345 (mysqld)
Status: “Server is operational”
Tasks: 38
Memory: 1.0G
CPU: 5.0%
CGroup: /system.slice/greatsql.service
└─12345 /greatsql/app/bin/mysqld –defaults-file=/greatsql/app/etc/my.cnf
2. Checking error logs:
2026-04-09T08:00:00.000000Z 0 [Note] mysqld: ready for connections.
Version: ‘8.0.32-24’ socket: ‘/tmp/mysql.sock’ port: 3306 GreatSQL Server (GPL)
3. Checking backup status:
total 1024000
-rw-r–r– 1 root root 1048576000 Apr 9 02:00 backup_20260409.sql
4. Checking system load:
20:00:00 up 1 day, 2:00, 1 user, load average: 0.10, 0.05, 0.01
5. Checking database connections:
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_connected | 10 |
+——————-+——-+
6. Checking slow queries:
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Slow_queries | 0 |
+—————+——-+
=== Daily Maintenance Completed ===
Date: Wed Apr 9 20:00:00 CST 2026
Date: Wed Apr 9 20:00:00 CST 2026
1. Checking GreatSQL service status:
● greatsql.service – GreatSQL Server
Loaded: loaded (/usr/lib/systemd/system/greatsql.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 08:00:00 CST; 12h ago
Main PID: 12345 (mysqld)
Status: “Server is operational”
Tasks: 38
Memory: 1.0G
CPU: 5.0%
CGroup: /system.slice/greatsql.service
└─12345 /greatsql/app/bin/mysqld –defaults-file=/greatsql/app/etc/my.cnf
2. Checking error logs:
2026-04-09T08:00:00.000000Z 0 [Note] mysqld: ready for connections.
Version: ‘8.0.32-24’ socket: ‘/tmp/mysql.sock’ port: 3306 GreatSQL Server (GPL)
3. Checking backup status:
total 1024000
-rw-r–r– 1 root root 1048576000 Apr 9 02:00 backup_20260409.sql
4. Checking system load:
20:00:00 up 1 day, 2:00, 1 user, load average: 0.10, 0.05, 0.01
5. Checking database connections:
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_connected | 10 |
+——————-+——-+
6. Checking slow queries:
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Slow_queries | 0 |
+—————+——-+
=== Daily Maintenance Completed ===
Date: Wed Apr 9 20:00:00 CST 2026
学习交流加群风哥微信: itpux-com
4.2 监控系统实战
# 部署Prometheus和Grafana
# 安装Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz tar -xvf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/prometheus-2.37.0.linux-amd64 /usr/local/prometheus
# 安装Grafana wget https://dl.grafana.com/oss/release/grafana-9.0.0.linux-amd64.tar.gz tar -xvf grafana-9.0.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/grafana-9.0.0 /usr/local/grafana
# 安装MySQL Exporter wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar -xvf
mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
# 配置MySQL Exporter
cat > /usr/local/mysqld_exporter/.my.cnf << 'EOF' [client] user=exporter password=password EOF
# 创建exporter用户
mysql -u root -p -e “CREATE USER ‘exporter’@’fgedu.localhost’ IDENTIFIED BY ‘password’ WITH MAX_USER_CONNECTIONS 3;” mysql -u root -p -e “GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’fgedu.localhost’;”
# 启动服务
systemctl start prometheus systemctl start grafana-server systemctl start mysqld_exporter
# 验证服务状态
systemctl status prometheus systemctl status grafana-server systemctl status mysqld_exporter
# 安装Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz tar -xvf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/prometheus-2.37.0.linux-amd64 /usr/local/prometheus
# 安装Grafana wget https://dl.grafana.com/oss/release/grafana-9.0.0.linux-amd64.tar.gz tar -xvf grafana-9.0.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/grafana-9.0.0 /usr/local/grafana
# 安装MySQL Exporter wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar -xvf
mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /usr/local/ mv /usr/local/mysqld_exporter-0.14.0.linux-amd64 /usr/local/mysqld_exporter
# 配置MySQL Exporter
cat > /usr/local/mysqld_exporter/.my.cnf << 'EOF' [client] user=exporter password=password EOF
# 创建exporter用户
mysql -u root -p -e “CREATE USER ‘exporter’@’fgedu.localhost’ IDENTIFIED BY ‘password’ WITH MAX_USER_CONNECTIONS 3;” mysql -u root -p -e “GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO ‘exporter’@’fgedu.localhost’;”
# 启动服务
systemctl start prometheus systemctl start grafana-server systemctl start mysqld_exporter
# 验证服务状态
systemctl status prometheus systemctl status grafana-server systemctl status mysqld_exporter
● prometheus.service – Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12345 (prometheus)
Tasks: 10
Memory: 200.0M
CPU: 1.0%
CGroup: /system.slice/prometheus.service
└─12345 /usr/local/prometheus/prometheus –config.file=/usr/local/prometheus/prometheus.yml
● grafana-server.service – Grafana Server
Loaded: loaded (/etc/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12346 (grafana-server)
Tasks: 15
Memory: 150.0M
CPU: 2.0%
CGroup: /system.slice/grafana-server.service
└─12346 /usr/local/grafana/bin/grafana-server
● mysqld_exporter.service – MySQL Exporter
Loaded: loaded (/etc/systemd/system/mysqld_exporter.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12347 (mysqld_exporter)
Tasks: 5
Memory: 50.0M
CPU: 0.5%
CGroup: /system.slice/mysqld_exporter.service
└─12347 /usr/local/mysqld_exporter/mysqld_exporter –config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12345 (prometheus)
Tasks: 10
Memory: 200.0M
CPU: 1.0%
CGroup: /system.slice/prometheus.service
└─12345 /usr/local/prometheus/prometheus –config.file=/usr/local/prometheus/prometheus.yml
● grafana-server.service – Grafana Server
Loaded: loaded (/etc/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12346 (grafana-server)
Tasks: 15
Memory: 150.0M
CPU: 2.0%
CGroup: /system.slice/grafana-server.service
└─12346 /usr/local/grafana/bin/grafana-server
● mysqld_exporter.service – MySQL Exporter
Loaded: loaded (/etc/systemd/system/mysqld_exporter.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-09 20:00:00 CST; 10s ago
Main PID: 12347 (mysqld_exporter)
Tasks: 5
Memory: 50.0M
CPU: 0.5%
CGroup: /system.slice/mysqld_exporter.service
└─12347 /usr/local/mysqld_exporter/mysqld_exporter –config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
学习交流加群风哥QQ113257174
4.3 备份恢复实战
# 备份脚本
cat > /greatsql/scripts/backup.sh << 'EOF'
#!/bin/bash # backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn BACKUP_DIR=”/greatsql/backup” DATE=$(date +%Y%m%d) BEGIN_TIME=$(date +”%Y-%m-%d %H:%M:%S”)
echo “=== Backup Started ===” echo “Start time: $BEGIN_TIME”
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行完整备份
mysqldump -u root -p –all-databases –single-transaction –master-data=2 –flush-logs > $BACKUP_DIR/backup_$DATE.sql
# 压缩备份文件
gzip $BACKUP_DIR/backup_$DATE.sql
# 删除7天前的备份文件
find $BACKUP_DIR -name “backup_*.sql.gz” -mtime +7 -delete END_TIME=$(date +”%Y-%m-%d %H:%M:%S”) echo “End time: $END_TIME” echo “=== Backup Completed ===” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/backup.sh
# 添加到定时任务 crontab -e
# 添加以下行
# 0 2 * * * /greatsql/scripts/backup.sh > /greatsql/logs/backup.log 2>&1
cat > /greatsql/scripts/backup.sh << 'EOF'
#!/bin/bash # backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn BACKUP_DIR=”/greatsql/backup” DATE=$(date +%Y%m%d) BEGIN_TIME=$(date +”%Y-%m-%d %H:%M:%S”)
echo “=== Backup Started ===” echo “Start time: $BEGIN_TIME”
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行完整备份
mysqldump -u root -p –all-databases –single-transaction –master-data=2 –flush-logs > $BACKUP_DIR/backup_$DATE.sql
# 压缩备份文件
gzip $BACKUP_DIR/backup_$DATE.sql
# 删除7天前的备份文件
find $BACKUP_DIR -name “backup_*.sql.gz” -mtime +7 -delete END_TIME=$(date +”%Y-%m-%d %H:%M:%S”) echo “End time: $END_TIME” echo “=== Backup Completed ===” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/backup.sh
# 添加到定时任务 crontab -e
# 添加以下行
# 0 2 * * * /greatsql/scripts/backup.sh > /greatsql/logs/backup.log 2>&1
# 执行备份脚本 /greatsql/scripts/backup.sh
=== Backup Started ===
Start time: 2026-04-09 20:00:00
End time: 2026-04-09 20:05:00
=== Backup Completed ===
Start time: 2026-04-09 20:00:00
End time: 2026-04-09 20:05:00
=== Backup Completed ===
# 恢复测试脚本
cat > /greatsql/scripts/restore_test.sh << 'EOF'
#!/bin/bash # restore_test.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn BACKUP_FILE=”/greatsql/backup/backup_$(date +%Y%m%d).sql.gz” TEST_DB=”test_restore”
echo “=== Restore Test Started ===”
# 创建测试数据库
mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS $TEST_DB;”
# 恢复数据
zcat $BACKUP_FILE | mysql -u root -p $TEST_DB
# 验证恢复
mysql -u root -p -e “SHOW TABLES FROM $TEST_DB;”
# 清理测试数据库
mysql -u root -p -e “DROP DATABASE $TEST_DB;” echo “=== Restore Test Completed ===” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/restore_test.sh
cat > /greatsql/scripts/restore_test.sh << 'EOF'
#!/bin/bash # restore_test.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn BACKUP_FILE=”/greatsql/backup/backup_$(date +%Y%m%d).sql.gz” TEST_DB=”test_restore”
echo “=== Restore Test Started ===”
# 创建测试数据库
mysql -u root -p -e “CREATE DATABASE IF NOT EXISTS $TEST_DB;”
# 恢复数据
zcat $BACKUP_FILE | mysql -u root -p $TEST_DB
# 验证恢复
mysql -u root -p -e “SHOW TABLES FROM $TEST_DB;”
# 清理测试数据库
mysql -u root -p -e “DROP DATABASE $TEST_DB;” echo “=== Restore Test Completed ===” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/restore_test.sh
# 执行恢复测试 /greatsql/scripts/restore_test.sh
=== Restore Test Started ===
+————————+
| Tables_in_test_restore |
+————————+
| fgedu_users |
| fgedu_orders |
| fgedu_products |
+————————+
=== Restore Test Completed ===
+————————+
| Tables_in_test_restore |
+————————+
| fgedu_users |
| fgedu_orders |
| fgedu_products |
+————————+
=== Restore Test Completed ===
Part05-风哥经验总结与分享
5.1 日常维护最佳实践
- 制定详细的维护计划:
- 明确维护内容和周期
- 分配维护责任
- 制定维护流程
- 实施自动化维护:
- 编写维护脚本
- 设置定时任务
- 配置自动告警
- 定期备份:
- 制定备份策略
- 验证备份结果
- 定期恢复测试
- 监控系统状态:
- 部署监控工具
- 设置合理的告警阈值
- 定期分析监控数据
- 优化性能:
- 定期分析慢查询
- 优化索引
- 调整参数
5.2 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 数据库连接数过高 | 应用程序连接池配置不当 | 调整连接池配置,增加max_connections参数 |
| 慢查询过多 | SQL语句未优化,缺少索引 | 分析慢查询日志,优化SQL语句,添加索引 |
| 存储空间不足 | 数据增长过快,日志文件过大 | 清理日志文件,扩展存储空间,实施分区表 |
| 服务启动失败 | 配置文件错误,端口被占用 | 检查配置文件,释放端口 |
| 备份失败 | 权限不足,磁盘空间不足 | 检查权限,清理磁盘空间 |
更多学习教程公众号风哥教程itpux_com
5.3 性能优化技巧
# 性能优化脚本
cat > /greatsql/scripts/performance_optimize.sh << 'EOF'
#!/bin/bash # performance_optimize.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== Performance Optimization ===” echo “Date: $(date)”
# 1. 分析慢查询
echo “1. Analyzing slow queries:” mysql -u root -p -e “SHOW GLOBAL VARIABLES LIKE ‘slow_query%’;” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;”
# 2. 检查索引使用情况
echo “2. Checking index usage:” mysql -u root -p -e “SELECT table_schema, table_name, index_name, seq_in_index, column_name, collation, cardinality, sub_part, packed, nullable, index_type, comment FROM information_schema.statistics WHERE table_schema NOT IN (‘information_schema’, ‘mysql’, ‘performance_schema’, ‘sys’);”
# 3. 优化表结构
echo “3. Optimizing tables:” mysql -u root -p -e “OPTIMIZE TABLE fgedudb.fgedu_users, fgedudb.fgedu_orders, fgedudb.fgedu_products;”
# 4. 更新统计信息
echo “4. Updating statistics:” mysql -u root -p -e “ANALYZE TABLE fgedudb.fgedu_users, fgedudb.fgedu_orders, fgedudb.fgedu_products;”
# 5. 检查缓冲区使用情况
echo “5. Checking buffer usage:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Innodb_buffer%’;” echo “=== Performance Optimization Completed ===” echo “Date: $(date)” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/performance_optimize.sh
cat > /greatsql/scripts/performance_optimize.sh << 'EOF'
#!/bin/bash # performance_optimize.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== Performance Optimization ===” echo “Date: $(date)”
# 1. 分析慢查询
echo “1. Analyzing slow queries:” mysql -u root -p -e “SHOW GLOBAL VARIABLES LIKE ‘slow_query%’;” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Slow_queries’;”
# 2. 检查索引使用情况
echo “2. Checking index usage:” mysql -u root -p -e “SELECT table_schema, table_name, index_name, seq_in_index, column_name, collation, cardinality, sub_part, packed, nullable, index_type, comment FROM information_schema.statistics WHERE table_schema NOT IN (‘information_schema’, ‘mysql’, ‘performance_schema’, ‘sys’);”
# 3. 优化表结构
echo “3. Optimizing tables:” mysql -u root -p -e “OPTIMIZE TABLE fgedudb.fgedu_users, fgedudb.fgedu_orders, fgedudb.fgedu_products;”
# 4. 更新统计信息
echo “4. Updating statistics:” mysql -u root -p -e “ANALYZE TABLE fgedudb.fgedu_users, fgedudb.fgedu_orders, fgedudb.fgedu_products;”
# 5. 检查缓冲区使用情况
echo “5. Checking buffer usage:” mysql -u root -p -e “SHOW GLOBAL STATUS LIKE ‘Innodb_buffer%’;” echo “=== Performance Optimization Completed ===” echo “Date: $(date)” EOF
# 设置脚本权限
chmod +x /greatsql/scripts/performance_optimize.sh
# 执行性能优化脚本 /greatsql/scripts/performance_optimize.sh
=== Performance Optimization ===
Date: Wed Apr 9 20:00:00 CST 2026
1. Analyzing slow queries:
+———————+——————————-+
| Variable_name | Value |
+———————+——————————-+
| slow_query_log | ON |
| slow_query_log_file | /greatsql/logs/slow-query.log |
| long_query_time | 1.000000 |
+———————+——————————-+
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Slow_queries | 0 |
+—————+——-+
2. Checking index usage:
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
| table_schema | table_name | index_name | seq_in_index | column_name | collation | cardinality | sub_part | packed | nullable | index_type |
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
| fgedudb | fgedu_users | PRIMARY | 1 | id | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_users | idx_email | 1 | email | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_orders | PRIMARY | 1 | id | A | 50000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_orders | idx_user_id | 1 | user_id | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_products | PRIMARY | 1 | id | A | 20000 | NULL | NULL | | BTREE |
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
3. Optimizing tables:
+——————-+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+——————-+———-+———-+——————————————————————-+
| fgedudb.fgedu_users | optimize | status | OK |
| fgedudb.fgedu_orders | optimize | status | OK |
| fgedudb.fgedu_products | optimize | status | OK |
+——————-+———-+———-+——————————————————————-+
4. Updating statistics:
+——————-+———+———-+———-+
| Table | Op | Msg_type | Msg_text |
+——————-+———+———-+———-+
| fgedudb.fgedu_users | analyze | status | OK |
| fgedudb.fgedu_orders | analyze | status | OK |
| fgedudb.fgedu_products | analyze | status | OK |
+——————-+———+———-+———-+
5. Checking buffer usage:
+———————————-+————-+
| Variable_name | Value |
+———————————-+————-+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead_seq | 0 |
| Innodb_buffer_pool_read_requests | 100000 |
| Innodb_buffer_pool_reads | 100 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 50000 |
+———————————-+————-+
=== Performance Optimization Completed ===
Date: Wed Apr 9 20:00:00 CST 2026
Date: Wed Apr 9 20:00:00 CST 2026
1. Analyzing slow queries:
+———————+——————————-+
| Variable_name | Value |
+———————+——————————-+
| slow_query_log | ON |
| slow_query_log_file | /greatsql/logs/slow-query.log |
| long_query_time | 1.000000 |
+———————+——————————-+
+—————+——-+
| Variable_name | Value |
+—————+——-+
| Slow_queries | 0 |
+—————+——-+
2. Checking index usage:
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
| table_schema | table_name | index_name | seq_in_index | column_name | collation | cardinality | sub_part | packed | nullable | index_type |
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
| fgedudb | fgedu_users | PRIMARY | 1 | id | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_users | idx_email | 1 | email | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_orders | PRIMARY | 1 | id | A | 50000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_orders | idx_user_id | 1 | user_id | A | 10000 | NULL | NULL | | BTREE |
| fgedudb | fgedu_products | PRIMARY | 1 | id | A | 20000 | NULL | NULL | | BTREE |
+————–+————+————+————–+————-+———–+————-+———-+——–+————+———+
3. Optimizing tables:
+——————-+———-+———-+——————————————————————-+
| Table | Op | Msg_type | Msg_text |
+——————-+———-+———-+——————————————————————-+
| fgedudb.fgedu_users | optimize | status | OK |
| fgedudb.fgedu_orders | optimize | status | OK |
| fgedudb.fgedu_products | optimize | status | OK |
+——————-+———-+———-+——————————————————————-+
4. Updating statistics:
+——————-+———+———-+———-+
| Table | Op | Msg_type | Msg_text |
+——————-+———+———-+———-+
| fgedudb.fgedu_users | analyze | status | OK |
| fgedudb.fgedu_orders | analyze | status | OK |
| fgedudb.fgedu_products | analyze | status | OK |
+——————-+———+———-+———-+
5. Checking buffer usage:
+———————————-+————-+
| Variable_name | Value |
+———————————-+————-+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead_seq | 0 |
| Innodb_buffer_pool_read_requests | 100000 |
| Innodb_buffer_pool_reads | 100 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 50000 |
+———————————-+————-+
=== Performance Optimization Completed ===
Date: Wed Apr 9 20:00:00 CST 2026
日常维护建议
- 定期检查:
- 每日检查服务状态和日志
- 每周分析性能和优化
- 每月进行完整备份和安全检查
- 自动化维护:
- 编写维护脚本
- 设置定时任务
- 配置自动告警
- 备份策略:
- 制定合理的备份策略
- 定期验证备份结果
- 进行恢复测试
- 性能监控:
- 部署监控工具
- 设置合理的告警阈值
- 定期分析监控数据
- 安全管理:
- 定期检查用户权限
- 更新系统和数据库补丁
- 进行安全审计
维护案例分享
案例背景:某企业数据库服务器出现性能下降,查询响应时间变长。
分析过程:
- 检查服务状态,发现服务正常运行
- 查看错误日志,未发现明显错误
- 分析慢查询日志,发现大量慢查询
- 检查索引使用情况,发现缺少必要的索引
解决方案:
- 为经常查询的字段添加索引
- 优化SQL语句,减少查询复杂度
- 调整数据库参数,增加缓冲区大小
- 清理过期数据,减少表大小
实施效果:
- 查询响应时间从秒级缩短到毫秒级
- 系统负载降低50%
- 用户满意度显著提高
from greatsql视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
