Data Engineering

Grafana Migration (sqlite3 to MySQL)

728x90
반응형

개요

그라파나에서는 sqlite3를 default DB로 사용하여 configuration info(유저, 대시보드, 얼럿 등등)를 관리한다.

다만 사용자에 따라 Postgresql, MySQL, MariaDB 등 다른 종류의 DB나 기 사용 중인 DB에 grafana의 config 정보를 추가해 관리하고자 하는 필요가 존재한다.

따라서 grafana에서는 해당 사용자의 필요를 충족시켜주고자 migration 기능을 제공한다.

 

※ 사용중인 DB와 data에 보안 설정이 되어있을 경우 원활한 마이그레이션이 어려울 수 있음
※ 이번 포스팅은 Grafana - Database migration from Sqlite3 to MySQL 내용을 한글로 번역, 요약한 포스팅입니다. 자세한 내용은 해당 링크에서 확인하시길 바랍니다.

내용

그라파나 마이그레이션에는 크게 2 가지 종류로 나누어 볼 수 있다.

  1. default로 설정된 DB인 sqlite3에서 출발해 그 외 DB (MySQL, postgreSQL, MariaDB 등)에 도착하는 migration
  2. sqlite3를 제외한 DB (MySQL, postgreSQL, MariaDB 등)에서 출발해 그 외 DB에 도착하는 migration

 

grafana 공식 blog에서 소개하는 방식은 case 2에 해당하는 postgreSQL to MySQL이다. (링크 참고)

How to migrate your configuration database

 

How to migrate your configuration database

How to Visualize Data that Really Matters to Business with Grafana and MySQL 3 min   |   25 Apr 2019

grafana.com

default DB인 sqlite3 to MySQL은 아래 링크 참고

Grafana - Database migration from Sqlite3 to MySQL

 

Grafana — Database migration from Sqlite3 to MySQL

Shouldn’t it be Sqlite3?

iceburn.medium.com

 

Migration 요약

case에 따라 세부적인 command는 달라지지만 기본적인 flow는 유사하다.

  1. 대상 DB를 설치, 설정한 뒤 migration 이후 grafana config data를 저장할 “grafana” DB 생성 (필요에 따라 user 또한 생성)
  2. 기존 DB에서 migration을 진행할 테이블을 추출 후 해당 데이터에 대해 dump 파일을 생성
  3. (이때 기존 DB의 종류에 따라 command가 달라지거나 grafana에서 제공하는 migrator가 필요하기도 하다)
  4. 그라파나 종료 후 config 내 database 설정을 변경
  5. 그라파나 재시작 후 (자동으로 config 내 db 설정에 따라 대상 grafana db에 테이블 생성) 생성 해둔 dump 파일을 대상 DB로 전송
  6. 데이터 확인 후 migration 종료

 

Migration 가이드 (sqlite3 to MySQL)

step 1. MySQL 설치 및 설정 진행

step 2. MySQL 내 grafana 데이터베이스, 유저 생성 및 권한 설정

# mysql 실행
$ mysql -u root -p

# config 데이터 저장 목적의 grafana database 생성
mysql> create database grafana;
Query OK, 1 row affected (0.00 sec)

# user 생성
mysql> CREATE USER 'grafana'@'localhost' IDENTIFIED BY 'P@ssw0rd_123';
Query OK, 0 rows affected (0.00 sec)

# user 권한 부여
mysql> grant all privileges on grafana.* to 'grafana'@'localhost';
Query OK, 0 rows affected (0.00 sec)

# 변경 사항 적용
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

step 3. database - migrator 준비

sqlite3에 저장된 데이터를 dump하기 위해 제공되는 오픈소스를 사용

# 깃 클론
root/opt $ git clone <https://github.com/grafana/database-migrator.git>

# 클론한 레포지토리 내부로 이동 후 
# 백업용 파일에 실행 권한 (+x -> excutable) 부여
root/opt/database-migrator $ chmod +x sqlitedump.sh

 

step 4. grafana 서버 종료, sqlite3 dump 파일 생성

root/opt/database-migrator $ ./sqlitedump.sh 
/var/lib/grafana/grafana.db > /opt/db_dump.sql

dump 파일을 생성한 뒤 생성 여부를 확인한다.

지정된 생성 경로는 root/opt/ 디렉토리 내부이다.

# opt 디렉토리로 이동, 내부 파일 조회
root/opt/database-migrator $ cd /opt/
root/opt/database-migrator $ ls -la

total 12
drwxr-xr-x 3 root root 4096 Feb 21 17:01 database-migrator
-rw-r--r-- 1 root root 2099 Feb 21 17:06 **db_dump.sql**
drwxr-xr-x 9 root root 4096 Mar 15  2020 VBoxGuestAdditions-5.2.34

 

step 5. grafana 설정 변경

그라파나 서버 종료 후, 현재까지 저장된 모든 config data를 migration하기 위한 준비가 끝났다.

이 후 그라파나 서버를 시작하기전 새롭게 그라파나의 default config DB 설정을 migration의 대상이 되는 새로운 DB로 변경해주어야하는데, 더 이상 기존 sqlite3 DB에 데이터가 저장되지 않게 함과 동시에 새롭게 사용될 MySQL 내 grafana db에 필요한 테이블을 생성해 주기 위해서이다.

해당 설정은 grafana.ini 파일 내부의 [database] 부분을 수정해 변경할 수 있다.

step2에서 설정한 유저 정보와 DB 정보를 아래와 같이 입력해준다.

#################################### Database ####################################
[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 = 127.0.0.1:3306
name = grafana
user = grafana
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = P@ssw0rd_123

설정 완료 후 그라파나 서버를 재시작하여

자동적으로 새로운 DB에 필요한 table이 생성되도록 한다.

서버 시작 후  /var/log/syslog 내 로그 파일에서 “HTTP Server Listen” 메시지가 확인 되었다면

그라파나 서버를 다시 종료한다.

 

step 6. MySQL로 기존 데이터 전송

migration의 마지막 단계로 생성해둔 sqlite3 dump 파일을 새로운 MySQL 내 grafana DB에 전송해주어야한다.

root/opt $ mysql -u grafana -p grafana < db_dump.sql

에러가 발생하지 않았다면, 정상 전송 여부를 확인하기 위해 그라파나를 재 시작하고

MySQL DB내에서 데이터가 추가되었는지 확인한다.

 

step 7. Migration 완료

728x90
반응형