生产环境必备技能:安全升级不停摆,数据备份保无忧
📌Grafana 的升级原则:先备份、小版本递进、测试环境验证、生产环境快速切换。
一、为什么要关注平滑升级与备份?
Grafana 官方建议“经常升级以获得最新的修复和增强功能”。跨版本升级时,Grafana 会在启动时自动迁移数据库 schema(如果有新增或变更的表)。
但这并不意味着升级是完全无风险的:
-
跨大版本(如 7.x → 10.x)可能存在视图不兼容的问题
-
插件版本可能跟不上主程序版本,导致加载失败
-
自定义配置可能在升级过程中被覆盖
因此,“平滑”的本质是:升级前有完整的备份,升级过程中有预案,升级失败后可以快速回滚。
二、升级前的核心备份:三件套
Grafana 的数据和配置散落在三个关键位置。在动手升级之前,必须先完成以下备份。
2.1 配置文件备份
核心配置文件路径为 /etc/grafana/grafana.ini(deb/rpm 安装)或 $WORKING_DIR/conf/custom.ini(二进制安装)。
此外,如果你配置了 Provisioning(数据源/仪表盘的声明式配置),还需要备份 /etc/grafana/provisioning/ 整个目录。
# 备份核心配置文件
sudo cp /etc/grafana/grafana.ini /backup/grafana/grafana.ini.bak# 备份 provisioning 目录(如适用)
sudo tar -czvf /backup/grafana/provisioning.tar.gz /etc/grafana/provisioning/
2.2 数据库备份(最关键的一步)
Grafana 的默认数据库是 SQLite,所有仪表盘、用户、组织等元数据都存储在一个文件中。该文件通常位于 /var/lib/grafana/grafana.db(deb/rpm 安装)或 <grafana_install_dir>/data(二进制安装)。
为确保数据一致性,备份 SQLite 数据库前建议先停止 Grafana 服务:
sudo systemctl stop grafana-server
sudo cp /var/lib/grafana/grafana.db /backup/grafana/grafana.db.bak
sudo systemctl start grafana-server
如果使用 MySQL 或 PostgreSQL 作为后端数据库,备份命令略有不同:
# MySQL / MariaDB
mysqldump -u root -p[password] grafana > /backup/grafana_backup.sql# PostgreSQL
pg_dump grafana > /backup/grafana_backup.sql
2.3 插件备份
已安装的插件存放在 /var/lib/grafana/plugins(deb/rpm 安装)或 $WORKING_DIR/data/plugins(二进制安装)。可以整体打包备份:
sudo tar -czvf /backup/grafana/plugins_backup.tar.gz /var/lib/grafana/plugins/
备份的插件不仅能在回滚时恢复原样,也能在新版本中检测哪些需要升级。
2.4 自动化备份脚本(推荐)
将以下脚本保存为 /usr/local/bin/grafana-backup.sh 并赋予执行权限:
#!/bin/bash
BACKUP_DIR="/backup/grafana"
DATE=$(date +%Y%m%d)mkdir -p $BACKUP_DIR# 备份数据库(SQLite 示例)
cp /var/lib/grafana/grafana.db $BACKUP_DIR/grafana.db.bak.$DATE# 备份配置文件
tar czf $BACKUP_DIR/grafana-config-$DATE.tar.gz /etc/grafana# 备份插件
tar czf $BACKUP_DIR/grafana-plugins-$DATE.tar.gz /var/lib/grafana/plugins# 删除 7 天前的备份
find $BACKUP_DIR -type f -mtime +7 -deleteecho "Grafana 备份完成:$BACKUP_DIR"
添加到 crontab 实现每日自动备份:
0 0 * * * /usr/local/bin/grafana-backup.sh
三、平滑升级实操
下面根据不同的安装方式,分别给出升级命令。
3.1 从 APT 仓库升级(Ubuntu / Debian)
sudo apt-get update
sudo apt-get upgrade
或只升级 Grafana:
sudo apt-get install --only-upgrade grafana
3.2 从 YUM 仓库升级(CentOS / RHEL)
sudo yum update grafana
或升级所有软件包:
sudo yum update
3.3 从 Debian / RPM 包升级
下载新版 .deb 或 .rpm 包后执行:
# Debian
sudo dpkg -i grafana_<新版本>_amd64.deb# RPM
sudo yum localinstall grafana_<新版本>.rpm # 或 rpm -Uvh
3.4 从二进制包升级(tar.gz)
最佳实践:将自定义配置放在 <grafana_install_dir>/conf/custom.ini 中,这样升级时直接解压覆盖,不会丢失配置。
# 1. 备份安装目录和数据
cp -r /usr/local/grafana /usr/local/grafana.bak.$(date +%Y%m%d)
cp -r /var/lib/grafana /var/lib/grafana.bak.$(date +%Y%m%d)# 2. 下载新版本
wget https://dl.grafana.com/oss/release/grafana-13.1.0.linux-amd64.tar.gz# 3. 停止服务
sudo systemctl stop grafana-server# 4. 替换程序文件
tar -zxf grafana-13.1.0.linux-amd64.tar.gz -C /usr/local/
rm -rf /usr/local/grafana
mv /usr/local/grafana-13.1.0 /usr/local/grafana# 5. 恢复配置文件(不要覆盖新版本的 defaults.ini)
cp /usr/local/grafana.bak/conf/custom.ini /usr/local/grafana/conf/# 6. 修复权限
chown -R grafana:grafana /usr/local/grafana /var/lib/grafana# 7. 启动服务
sudo systemctl start grafana-server# 8. 验证
sudo systemctl status grafana-server
grafana-server -v
3.5 升级后的版本检查
grafana-cli --version
或通过 Web 界面:左下角 Help → About 查看版本号。
四、数据库自动迁移与版本兼容性
Grafana 升级后首次启动时,会自动迁移数据库 schema。这意味着在新版本中访问仪表盘之前,数据库结构已经完成了更新。
这一过程通常是平滑且不可见的。但在以下情况需要额外关注:
-
跨越多版本(如 6.x → 10.x):建议分步升级,先升级到中间版本(如 8.x 再升级到 10.x),避免一次跨度太大。
-
回滚时需谨慎:如果升级后发现问题想要降级,数据库 schema 可能已经变更,低版本无法识别新结构。此时必须使用升级前的备份数据库来恢复。这也是强调升级前务必备份的核心原因。
⚠️ 关键提示:升级后如果发现问题,不要直接尝试降级。正确的做法是用备份文件恢复到升级前的状态,而不是依赖“低版本覆盖高版本”。
五、升级后插件兼容性处理
这是生产环境升级中最容易被忽视的问题。
5.1 为什么插件会不兼容?
每个 Grafana 插件的 plugin.json 中都定义了 grafanaDependency 字段,声明支持的 Grafana 版本范围。升级主程序后,如果当前版本超出了插件声明的支持范围,系统会标记该插件为 incompatible。
5.2 检查兼容性
升级后登录 Grafana Web 界面,进入 Configuration → Plugins,查看是否有插件显示红色警告或 “Incompatible” 标签。
也可以在日志中查找错误:
sudo journalctl -u grafana-server | grep incompatible
5.3 处理方案
方案一:升级插件到最新版(推荐)
# 查看已安装插件
grafana-cli plugins list# 更新指定插件
grafana-cli plugins update <plugin-id># 批量更新所有插件
grafana-cli plugins update-all# 重启服务
sudo systemctl restart grafana-server
方案二:手动修改插件依赖范围(临时方案,适用于私有插件)
找到插件的安装目录(如 /var/lib/grafana/plugins/<plugin-id>),编辑 plugin.json,修改 grafanaDependency 字段:
// 修改前
"grafanaDependency": "^8.0.0"// 修改后(支持多个版本)
"grafanaDependency": "^8.0.0 || ^9.0.0 || ^10.0.0"
修改后重启 Grafana 服务。注意这只是临时规避,后续仍需跟进代码兼容性测试。
六、降级与回滚操作
如果升级后发现了无法解决的问题,回滚到旧版本是最稳妥的选择。但前提是升级前做好了完整备份。
6.1 降级步骤(以 apt 为例)
# 停止服务
sudo systemctl stop grafana-server# 卸载当前版本
sudo apt-get remove grafana# 查看可用旧版本
apt-cache policy grafana# 安装指定旧版本
sudo apt-get install grafana=7.5.11# 恢复配置文件
sudo cp /backup/grafana/grafana.ini.bak /etc/grafana/grafana.ini# 恢复数据库
sudo cp /backup/grafana/grafana.db.bak /var/lib/grafana/grafana.db
sudo chown grafana:grafana /var/lib/grafana/grafana.db# 恢复插件
sudo tar -xzvf /backup/grafana/plugins_backup.tar.gz -C /# 启动服务
sudo systemctl start grafana-server
6.2 完整灾难恢复(从零重建)
如果整个 Grafana 服务需要迁移或从零重建,请按以下顺序操作:
-
安装与旧版本相同版本的 Grafana(不要直接装新版)
-
停止服务:
sudo systemctl stop grafana-server -
恢复配置文件(
grafana.ini和provisioning/目录) -
恢复数据库文件(
grafana.db),并确保文件属主为grafana:grafana -
恢复插件目录(
/var/lib/grafana/plugins/) -
启动服务:
sudo systemctl start grafana-server -
验证仪表盘和数据源是否正常
针对不同数据库的恢复命令:
# SQLite
cp /backup/grafana.db.bak.20260524 /var/lib/grafana/grafana.db
chown grafana:grafana /var/lib/grafana/grafana.db# MySQL
mysql -u grafana -p grafana < /backup/grafana-mysql-20260524.sql# PostgreSQL
psql -U grafana grafana < /backup/grafana-postgres-20260524.sql
恢复配置文件与插件:
# 恢复配置
rm -rf /etc/grafana
tar xzf /backup/grafana-config-20260524.tar.gz -C /# 恢复插件
rm -rf /var/lib/grafana/plugins
tar xzf /backup/grafana-plugins-20260524.tar.gz -C /# 统一修复权限
chown -R grafana:grafana /etc/grafana /var/lib/grafana
6.3 部分恢复:只恢复单个仪表盘
如果只是误删了某个仪表盘,不需要恢复整个数据库:
-
打开 Grafana → 左侧菜单 Dashboards → Import
-
上传之前导出的 JSON 文件(参见第一篇博客中关于仪表盘导出的内容)
-
选择导入的文件夹,点击 Import
6.4 补充工具:grafanactl
除了手动备份恢复,Grafana 生态中还提供 grafanactl 工具,可以通过 API 备份和恢复实例中的所有资源(仪表盘、数据源、告警规则等),适合对备份有自动化需求的场景。
七、平滑升级检查清单
在生产环境执行升级前,建议逐项核对以下内容:
| 检查项 | 状态 |
|---|---|
| ✅ 已在测试环境验证新版本 | ☐ |
| ✅ 备份配置文件(grafana.ini + provisioning) | ☐ |
| ✅ 备份数据库(grafana.db 或 mysqldump) | ☐ |
| ✅ 备份插件目录(/var/lib/grafana/plugins/) | ☐ |
| ✅ 记录当前版本和已安装插件列表 | ☐ |
| ✅ 了解升级后插件的兼容性情况 | ☐ |
| ✅ 准备好回滚方案和备份文件 | ☐ |
| ✅ 选择业务低峰期执行升级 | ☐ |
