grafana迁移mysql
grafana版本:9.5.14
迁移 sqlite3 到 mysql
网上很多版本,没有可以直接用的,自己实践记录一下
0x01 前言
网上有挺多版本的,没有可以直接用的,还遇到一些坑,实践下来主要是如下步骤,默认大家熟悉基础运维,提前准备一个数据库
0x02 创建数据库
1 | CREATE DATABASE IF NOT EXISTS grafana DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; |
0x03 启动新grafana
因为我们不能直接动生产,所以采用了一样的配置文件做修改,然后在本地启动(或者相似的环境启动)
1 | type = mysql |
这是最简单的的配置,自行修改地址和用户,你也可以直接用root
启动后等grafana正常打开了,直接停止即可
我这次实践用的是基于k8s,所以就直接 scale 0 了
0x04 转移数据
网上有一种用 sqlite3-to-mysql 的工具,但是实际上这个工具会把表完全的倒过去,grafana自带一个迁移记录表,记录了sql,如果覆盖了估计会有兼容问题,所以我没有使用,而是用了另一种脚本的方式
脚本导出数据
1 |
|
创建一个这样的脚本 con.sh
,执行命令
1 | chmod +x con.sh |
导入mysql数据库
比较简单就是 mysql 命令行导入
1 | mysql -h 127.0.0.1 -u root -p grafana < grafana.sql |
但是这样其实看不太清楚报错和结果,我个人比较喜欢用 antares 这个数据库,可以清晰的导入,并处理数据
0x05 问题处理
不知道是大家场景的问题还是什么,我的生产实践表明,这样结果会有几十行的数据无法导入
时间格式
第一种就是 时间格式的问题,比如前面导出的sql中会带有这种数据
1 | 2021-12-01 09:49:08.321867897+08:00 |
这样的数据 mysql 的date 是没办法直接导入的,需要用vim将类似的格式全部替换
1 | :%s/2021-12-01 09:49:08.321867897+08:00/2021-12-01 09:49:08/g |
至于详细的时间是否准确 ,emmmm我觉得导入正常更重要,而且这个时间显示了+8 代表需要-8 才对,如果你有空就可以一个个手动改时间
dashboard 导入后无法正确打开
打开某个dashboard提示错误或者是not found
Error while loading dashboard, dashboard data is invalid
打开dashboard后右上角出现如此消息,代表dashbaord的数据有问题,这里其实就是mysql导入数据的时候会去考虑转义的问题,但是grafana的json存入的时候也已经考虑的转义的问题,比如存的是
1 | [ |
观察导出的sql文件,发现文件中存储的也是这样的,所以我们需要对 \
符号做转义保证它能正确插入,而不是被mysql识别为特殊字符,vim下替换也很简单
1 | :%s/\\/\\\\/g |
处理完数据文件后,就可以直接导入mysql启动grafana正确玩耍了(这里反复导入是没有问题的)
0x06 切换生产
前面是将线上的数据库传到本地,在本地搭了一个简单的grafana,并且调试后发现正常,最后一个步骤就是将生产的配置也切换到 mysql 的配置然后重启即可