上周整理某个grafana文件夹下的 dashboard 的时候, 看到一个 dashboard 的名字叫 XXX-copy, 觉得这个太无趣, 可能是一个临时 copy 的 dashboard, 立马起了杀意, 直接删除. 这周到公司, 直接有人说我删除了他辛辛苦苦已经加工了半个月的 dashboard. 我无语. 想该怎么恢复.
google 了一下, UI 上无法恢复已经删除的 dashboard. 我们的 Grafana 没有用默认的 sqlite3, 而是使用 msyql, 并且是 DBA 专业30年维护. 于是找到 DBA 要了一个删除之前的那天的数据库 snapshot. 这个 snapshot 是一个 sql 文件. 压缩后300多M, 解压后2.5G.
于是拿到这个数据库 snapshot, 先解压, 然后通过 docker 安装一个 msyql, 导入数据, 然后再安装一个 grafana, 然后导出dashboard 数据, 再导入正在使用的grafana, 问题解决. 下面是具体步骤(前提本地有安装好的 docker)
安装 mysql
$ docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
复制 数据文件到 mysql container (ec2c00bc4837 是 上面 mysql 的 container id [docker ps])
$ docker cp ~/Downloads/grafana.sql ec2c00bc4837:/
进入 mysql container 导入数据
$ docker exec -it ec2c00bc4837 /bin/bash
# /usr/bin/mysql -u root -p > /grafana.sql
本地定制 grafana 的配置文件 custom.ini, 只要修改 defaults.ini 的 database 部分, 具体参考这里: https://grafana.com/docs/grafana/latest/administration/configuration/
[database]
type = mysql
host = mysql
name = mygrafanaDB
user = root
password = 123456
docker 安装 grafana 使用定制配置文件
$ docker run --link mysql -d --name grafana -p 3000:3000 -v ~/Downloads/custom.ini:/etc/grafana/grafana.ini grafana/grafana
现在就可以等你的 grafana 了 http://localhost:3000/
另外如果你发现你需要某些特定的用户名/密码才能改这个页面, 研究下数据库里的这3个表:
dashboard
dashboard_acl
user