迁移grafana数据sqlite3到mysql
背景:
由于sqlite3不支持同时写,sqlite的锁是文件锁,作用的是整个DB文件,同一时间可以有多个读事务,但是同一时间最多只能有一个写事务。容易锁库导致grafana报错,现决定将grafana默认sqlite3 db文件迁移至mysql中。
报错:
Error: database is locked
迁移步骤:
1. 安装迁移工具
pip3 install sqlite3-to-mysql
2. 准备好mysql数据库
# 创建数据库grafana,创建用户grafana并授权
CREATE DATABASE IF NOT EXISTS grafana DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'grafana'@'%' IDENTIFIED BY '12345678';
GRANT All privileges ON grafana.* TO 'grafana'@'%';
flush privileges;
3. 备份grafana sqlite数据库文件 (grafana配置文件中指定了sqlite数据库文件存放位置)
为了防止有新数据生成,将grafana停掉
systemctl stop grafana-server.service
备份
cp grafana.db grafana.db.bak
4. 执行迁移
sqlite3mysql -f ./grafana.db -d grafana -ugrafana -p -h127.0.0.1
5. 修改grafana配置文件
vim grafana.ini
# Use either URL or the previous fields to configure the database
# Example: mysql://user:secret@host:port/database
url = mysql://grafana:123456@127.0.0.1:3306/grafana
6. 重启grafana
systemctl start grafana-server.service