将SQLite的数据迁移到MySQL

这几天将Grafana的数据库 /var/lib/grafana/grafana.db 迁移到了 MySQL,原因是不想维护多个数据库备份,全都丢MySQL里,统一 管理,统一备份即可。

首先将 grafana 服务暂停一下,省得写新数据进去:

$ sudo systemctl stop grafana

然后执行命令把SQLite的数据导出来:

#!/bin/bash
DB=$1
TABLES=$(sqlite3 $DB .tables | sed -r 's/(\S+)\s+(\S)/\1\n\2/g' | grep -v migration_log)
for t in $TABLES; do
    echo "TRUNCATE TABLE $t;"
done
for t in $TABLES; do
    echo -e ".mode insert $t\nselect * from $t;"
done | sqlite3 $DB
$ ./export_sqlite.sh grafana.db > grafana.sql

接着改 grafana 的配置文件 /etc/grafana.ini 把MySQL中创建好的数据库、用户名、密码写进去:

如果没有创建好,那么应当先创建一个。

[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.

type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafanauser
password = grafana123
url = mysql://grafanauser:[email protected]:3306/grafana

接着启动一下grafana,让它在MySQL中创建好表: sudo systemctl start grafana,使用 journalctl -u grafana.service -f 看着日志,当日志显示数据库migration已经做完了之后,就可以再次停用grafana,然后把数据导进去:

$ mysql -u grafanauser -p -D grafana < grafana.sql

最后,启动grafana,大功告成!


参考资料:


更多文章
  • 推荐三个时间管理工具
  • 一次事故反思
  • 当JS遇到uint64:JS整数溢出问题
  • SQLite3 存储以及ACID原理
  • Redis源码阅读:pub/sub实现
  • Redis源码阅读:zset实现
  • Redis源码阅读:bitmap 位图的运算
  • Redis源码阅读:set是怎么做交并集运算的?
  • Redis源码阅读:list实现(ziplist, quicklist)
  • Redis源码阅读:RDB是怎么实现的
  • Redis源码阅读:AOF重写
  • Redis源码阅读:AOF持久化
  • Redis源码阅读:key是怎么过期的
  • Redis源码阅读:字典是怎么实现的
  • Redis源码阅读:执行命令