H2 에서 MySQL 로 Migration
버전 확인
v0.46.4 확인
metabase 홈페이지에서 jar 파일 설치(동일한 버전으로)
https://downloads.metabase.com/v0.46.4/metabase.jar
로컬 PC에서 준비한 MySQL 접속 되는지 확인(툴 or telnet)
telnet <host> <port>
docker container 접속
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
927c11507bf8 metabase-instance3 "/app/run_metabase.sh" 10 days ago Up 10 days 0.0.0.0:5601->3000/tcp, :::5601->3000/tcp metabase
62ee8a41202d portainer/portainer "/portainer" 10 days ago Up 10 days 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
# container_id 및 name 확인 후 접속
docker exec -it metabase-instance3 /bin/sh
# metabase.db 폴더 백업
tar -cvf metbaseDB.tar metabase.db
# container 나가기
exit
#container -> host(docker 설치된 서버) 로 백업 파일 옮기기
docker cp metabase-instance3:/metabaseDB.tar /home/happytuk/
# 폴더 생성(같은 위치에 있어야지 잘됨.)
mkdir metabaseMigration
# tar 파일 이동
mv metabaseDB.tar ~/metabaseMigration/
# 폴더로 이동
cd metabaseMigration
# 압축 해제
tar -xvzf metabaseDB.tar
# install 한 metabase.jar 파일도 같이 이동
mv metabase.jar ~/metabaseMigration/
# metabase migration 명령어 실행
java -DMB_DB_CONNECTION_URI="jdbc:mysql://<host>:<port>/metabase?user=<user>&password=<password>!&allowPublicKeyRetrieval=true" -jar metabase.jar load-from-h2 ./metabase.db
DB metabase 스키마에 테이블 생성 되었는지 확인
collection 테이블 조회
SELECT * FROM collection;
데이터 있으면 성공
Migration 성공 후 docker container 에 있는 metabase 삭제
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
927c11507bf8 metabase-instance3 "/app/run_metabase.sh" 10 days ago Up 10 days 0.0.0.0:5601->3000/tcp, :::5601->3000/tcp metabase
62ee8a41202d portainer/portainer "/portainer" 11 days ago Up 11 days 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
# 삭제 명령어 docker rm <container_id>
docker rm 927c11507bf8
삭제 후 metabase docker compose 최종본 여기와 동일하게 yml 파일 작성 후 실행하면 된다.
에러났을 때
Exception in thread "main" java.lang.AssertionError: Assert failed: (#{:postgres :h2 :mysql} %) 이러한 에러가 나온다면 스키마 생성을 안
DB URI 는 mysql 로 되있지만 mariadb 도 포함 대신 URI 는 mysql 로 통일해야함.
Last updated
Was this helpful?