grafana数据库从sqlit3迁移至mysql(tidb)

背景

grafana 默认采用的是sqlite3,由于sqlite3不支持同时写,sqlite的锁是文件锁,作用的是整个DB文件,同一时间可以有多个读事务,但是同一时间最多只能有一个写事务。容易锁库导致grafana报错,现决定将grafana默认sqlite3 db文件迁移至mysql(tidb)中。

报错信息:

Error: database is locked

迁移步骤

1. 下载迁移工具镜像

docker pull ghcr.io/techouse/sqlite3-to-mysql:latest

2. 准备好数据库

CREATE DATABASE IF NOT EXISTS grafana DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

3. 备份grafana sqlite数据库文件 (grafana配置文件中指定了sqlite数据库文件存放位置) 为了防止有新数据生成,将grafana停掉

[root@dev grafana]# docker-compose down
Stopping grafana_grafana_1 ... done
Removing grafana_grafana_1 ... done

4. 执行迁移

docker run -it     --workdir $(pwd)     --volume $(pwd):$(pwd)     --rm ghcr.io/techouse/sqlite3-to-mysql:latest     --sqlite-file grafana.db      --mysql-user root     --mysql-password xxxxxxx     --mysql-database grafana     --mysql-host 192.168.181.61  --mysql-integer-type 'bigint(20)' --mysql-text-type LONGTEXT

2023-07-03 13:30:07 INFO     Transferring table migration_log
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 487/487 [00:05<00:00, 82.45it/s]
2023-07-03 13:30:13 INFO     Transferring table user
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:00<00:00, 32.05it/s]
2023-07-03 13:30:13 INFO     Adding index to column "login, email" in table user
2023-07-03 13:30:16 INFO     Adding unique index to column "email" in table user
2023-07-03 13:30:19 INFO     Adding unique index to column "login" in table user
2023-07-03 13:30:23 INFO     Adding index to column "status" in table temp_user
2023-07-03 13:30:26 INFO     Adding index to column "code" in table temp_user
2023-07-03 13:30:29 INFO     Adding index to column "org_id" in table temp_user
2023-07-03 13:30:32 INFO     Adding index to column "email" in table temp_user
2023-07-03 13:30:36 INFO     Adding unique index to column "user_id, dashboard_id" in table star
2023-07-03 13:30:43 INFO     Transferring table org
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<00:00, 24.85it/s]
2023-07-03 13:30:43 INFO     Adding unique index to column "name" in table org
......

5. 修改grafana配置文件(红色字体为修改内容)

cat config/grafana.ini 
...
[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.

# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = xxx.xxx.xxx.xxx:3306
name = grafana
user = xxx
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = xxx

# Use either URL or the previous fields to configure the database
# Example: mysql://user:secret@host:port/database
;url =
...

[root@dev grafana]# cat docker-compose.yml 
version: '2'

services:
  grafana:
    image: docker.io/bitnami/grafana:9.5.3
    ports:
      - '3001:3000'
    environment:
      - 'GF_SECURITY_ADMIN_PASSWORD=xsv#SOnIupu=#GRZ'
    volumes:
      - ./grafana_data:/opt/bitnami/grafana/data
      - ./gazetteer/usa-states.json:/opt/bitnami/grafana/public/gazetteer/usa-states.json:ro
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/TZ:ro
      - ./config/grafana.ini:/opt/bitnami/grafana/conf/grafana.ini

networks:
  default:
    external:
      name: mynetwork

6. 重新启动grafana

docker-compose up -d 

打开grafana验证是否数据正确

你可能感兴趣的:(监控系统,数据库,grafana,mysql)