모니터링(Grafana, Prometheus)/Grafana

grafanadb mig (sqlite3 to mysql)

babbeolicoding 2023. 11. 27. 23:24

사전 설치 필요

sudo apt-get install gawk => escape.awk 파일 사용하기 위함
sudo apt-get install sqlite3 => sqlitedump.sh를 사용하기 위함
(sqlite 3.31.1+)
=> grafanadb만 있으면 한 서버에서 스크립트를 만들어도 상관없음
sudo apt-get install docker-compose

escape.awk
sqlitedump.sh
파일 로컬에 받고 권한 수정

 

grafana db에서 sql 추출

grafana-server 중지 후 sql 추출
sudo ./sqlitedump.sh /var/lib/grafana/grafana.db > grafana.sql

 

mysql container 생성전  작업(docker-compose 사용)

docker-compose.yml 추가

version: '3.9'

services:
  db:
    image: mysql:latest
    restart: unless-stopped
    ports:
    - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: grafana
      MYSQL_DATABASE: grafana
      MYSQL_USER: grafana
      MYSQL_PASSWORD: grafana
    volumes:
    - /grafanadb/data:/var/lib/mysql         #mysql data(컨테이너가 재시작되도 데이터를 보존하기 위해)
    - /grafanadb/cnf/my.cnf:/etc/my.cnf      #mysql my.cnf 파일 수정을 위해
    logging:
      driver: "json-file"
      options:
        max-size: "8m"
        max-file: "10"

volumes:
  mysql-data: {}
  
  
#mysql container 기동전 확인사항

기동 전 volumes 부분에 대한 설명을 하자면
/grafanadb/data:/var/lib/mysql
=> "/grafanadb/data" : 로컬 마운트 경로
   "/var/lib/mysql" : container my sql db 경로
=> 로컬에 db 정보를 연결하지 않고 container를 실행하면 container가 종료되고 나면 데이터가 초기화 된다.

/grafanadb/cnf/my.cnf:/etc/my.cnf
=> mysql config 정보인데 해당 부분을 수정하지 않고 마이그를 진행하면
   한글이 깨진 상태로 데이터가 보인다
=> 해당 상태로 container를 기동하면 /grafanadb/cnf 경로에 my.cnf가 파일이 아닌 폴더로 생성된다.
   그렇기 떄문에 미리 해당 경로에 my.cnf 파일을 생성해두고 container를 실행하도록 하자.

/grafanadb/cnf 경로 my.cnf 파일을 미리 만든 후 docker-compose up을 진행

my.cnf 내용

[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/

 

 

mysql container 생성

#mysql container 시작
sudo docker-compose up -d

 

 

Grafana.ini 수정 및 실행

#grafana.ini 수정
[database] 부분
type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafana
password = grafana

#grafana 실행
- 생성된 mysql 서버에서 기본grafana.db 이관
grafana-server 실행해서 db table 생성
HTTP Connect 로그가 뜬다면 기본 테이블은 생성완료
이후grafana 중지

 

 

 

mysql로 grafanadb 마이그 진행

#생성된 sql로 mysql로 데이터를 이관

sudo docker exec -i {container_name} {image} grafana -u{user} -p{password} < grafana.sql
sudo docker exec -i kuber_db_1 mysql grafana -ugrafana -pgrafana < grafana.sql

 

 

grafana 실행 및 확인

sudo systemctl start grafana-server

서버 접속 후 mig된 상태 확인
setting에서 database 부분을 보면 type이 mysql로 잘 변경됐는지 확인하면 된다.

 

참고 사이트

https://github.com/grafana/database-migrator

 

GitHub - grafana/database-migrator: Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of G

Code to export grafana.db (sqlite) to MySQL-compatible SQL file, to assist in migration of Grafana data to MySQL-compatible DB. - GitHub - grafana/database-migrator: Code to export grafana.db (sqli...

github.com