사전 설치 필요
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
'모니터링(Grafana, Prometheus) > Grafana' 카테고리의 다른 글
Grafana database is locked (0) | 2025.04.11 |
---|---|
Grafana alert webhook x509 unhandled critical extension (0) | 2025.02.14 |
Grafana version 9 Alert 이미지 첨부하기(include image) (0) | 2023.09.07 |
Grafana Alert silences (0) | 2023.07.26 |
Grafana alert or 조건 사용 (0) | 2023.07.26 |