MySQL 8.0으로 업그레이드
Bahmni Standard 1.0 릴리스부터 OpenMRS 서비스와 보고서 서비스의 기본 데이터베이스 버전으로 MySQL 8.0을 제공합니다. 자세한 내용은 관련 Jira EPIC을 참조하십시오.
Bahmni 인스턴스와 데이터베이스의 구성 방식은 다양합니다. 클라우드 인프라의 관리형 데이터베이스 서비스(예: AWS RDS)를 사용한다면 제공자의 문서와 마이그레이션 절차를 따르십시오. 아래 단계는 데이터베이스 서버를 Docker 컨테이너로 실행하는 경우를 다룹니다.
이 페이지의 목차:
CentOS의 Bahmni에서 마이그레이션
CentOS에서 Bahmni 0.93 또는 0.92를 실행 중이라면 Docker 기반 Bahmni로 마이그레이션하는 것이 좋습니다. 관련 문서의 절차로 전체 Bahmni 인스턴스를 Docker로 옮길 수 있습니다. 데이터베이스와 파일 산출물을 백업한 뒤 MySQL 8.0 인스턴스에 복원하는 과정입니다.
Docker에서 이미 실행 중인 MySQL 5.6 또는 MySQL 5.7에서 마이그레이션
Bahmni가 이미 Docker에서 실행되고 데이터베이스 서비스가 Docker Compose에 포함되어 있다면 새 인스턴스에 백업·복원하지 않고 기존 데이터베이스 인스턴스를 업그레이드할 수 있습니다. Bahmni 애플리케이션 중단 시간이 필요하므로 미리 계획하십시오.
MySQL 5.6에서 마이그레이션
MySQL 5.6에서 8.0으로의 마이그레이션은 두 단계입니다. 먼저 MySQL 5.7로, 그다음 MySQL 8.0으로 업그레이드해야 합니다. 데이터베이스가 이미 MySQL 5.7이면 아래 단계를 건너뛰고 ‘5.7에서 마이그레이션’ 절로 이동하십시오.
1단계: OpenMRS 데이터베이스에 연결된 서비스 중지
먼저 OpenMRS 데이터베이스에 연결된 서비스를 중지합니다. bahmni-docker/bahmni-lite 또는 bahmni-docker/bahmni-standard 하위 디렉터리에서 아래 명령을 실행합니다. 구축 시 .env가 아닌 다른 환경 파일을 사용했다면 Docker Compose 명령에 --env-file 옵션을 전달하십시오.
2단계: 서비스 이미지 태그 갱신 및 데이터베이스 시작
nano나 vi 같은 텍스트 편집기로 구축 환경의 .env 파일을 열고 안내된 변수 값을 변경합니다.
아래 명령으로 두 데이터베이스 서비스를 MySQL 5.6에서 MySQL 5.7로 시작합니다.
3단계: mysql_upgrade 수행
다음으로 데이터베이스 컨테이너 셸에서 mysql_upgrade 클라이언트 명령을 실행합니다. 이 명령은 MySQL 시스템 스키마를 5.6에서 5.7로 마이그레이션합니다.
아래 명령을 실행해 openmrsdb 컨테이너와 reportsdb 컨테이너에 각각 접속합니다.
Bash 셸이 열리면 셸 안에서 아래 명령을 실행합니다.
명령이 성공적으로 완료되면 exit 명령으로 컨테이너 셸을 종료하고 아래 명령으로 서비스를 재시작합니다.
reportsdb 컨테이너에도 같은 단계를 수행합니다.
4단계: 애플리케이션 서비스 시작
아래 명령으로 OpenMRS와 Reports 서비스를 다시 시작합니다.
이제 Bahmni 인스턴스가 MySQL 5.7에서 실행됩니다. MySQL 8.0으로 진행하기 전에 로그인, 보고서, 기존 데이터 확인 같은 중요 시나리오를 검증하는 것이 좋습니다.
MySQL 5.7에서 마이그레이션
1단계: OpenMRS 데이터베이스에 연결된 서비스 중지
먼저 OpenMRS 데이터베이스에 연결된 서비스를 중지합니다. bahmni-docker/bahmni-lite 또는 bahmni-docker/bahmni-standard 하위 디렉터리에서 아래 명령을 실행합니다. 구축 시 .env가 아닌 다른 환경 파일을 사용했다면 Docker Compose 명령에 --env-file 옵션을 전달하십시오.
2단계: 서비스 이미지 태그 갱신 및 데이터베이스 시작
nano나 vi 같은 텍스트 편집기로 구축 환경의 .env 파일을 열고 안내된 변수 값을 변경합니다.
아래 명령을 실행하여 데이터베이스 서비스를 업그레이드된 버전으로 시작합니다.
3단계: 기본 authentication_plugin 갱신
MySQL 8.0의 주요 변경점 중 하나는 caching_sha2_password를 기본 인증 플러그인으로 사용하는 것입니다. 보안과 성능이 향상되며 자세한 내용은 관련 문서를 참조하십시오.
아래 명령으로 OpenMRS DB 서비스에 접속합니다.
이제 root 사용자로 MySQL에 로그인합니다.
아래 명령으로 기본 플러그인을 caching_sha2_password로 변경합니다. 명령의 OMRS_DB_USERNAME과 OMRS_DB_PASSWORD에는 .env의 값을 넣어야 합니다.
ALTER USER '<OMRS_DB_USERNAME>'@'%' IDENTIFIED WITH 'caching_sha2_password' BY '<OMRS_DB_PASSWORD>';
--> Example: ALTER USER 'openmrs-user'@'%' IDENTIFIED WITH 'caching_sha2_password' BY 'password';아래 명령으로 플러그인이 갱신되었는지 확인합니다.
Reports-DB-User에 대해서도 Reports 데이터베이스에서 같은 단계를 수행합니다.
RDS 인스턴스를 MySQL 5.7에서 MySQL 8.0으로 업그레이드
Bahmni 인프라 자동화 Terraform 스크립트는 AWS RDS MySQL 인스턴스를 프로비저닝합니다. Terraform으로 배포하는 구축 환경에서는 다음 단계에 따라 bahmni-infra 포크를 갱신해야 합니다.
업그레이드에 필요한 전체 Terraform 구성 변경사항은 관련 변경 내역에서 확인할 수 있습니다. bahmni-infra 포크를 rebase하여 변경사항을 가져오거나 아래 순서대로 커밋을 적용하십시오. terraform apply 전에 반드시 terraform plan을 실행하여 변경사항을 검증하십시오.
1단계: RDS에서 메이저 버전 업그레이드 활성화
Terraform의 aws_db_instance 리소스에는 메이저 버전 업그레이드를 활성화하거나 비활성화하는 속성이 있습니다. Terraform 구성에 새 변수가 추가되었으므로 관련 커밋을 참조해 플래그를 추가하십시오.
2단계: MySQL 8 RDS 인스턴스의 새 파라미터 그룹 추가
업그레이드된 RDS 인스턴스에 사용할 새 사용자 지정 파라미터 그룹을 만들어야 합니다. 필요한 코드 변경은 관련 커밋을 참조하십시오.
3단계: RDS 버전 및 파라미터 갱신
이 단계에서 RDS 인스턴스 엔진 버전을 MySQL 8.0으로 올립니다. 서비스 중단이 발생하므로 미리 계획하십시오.
- 환경별 .tfvars 파일(예: nonprod.tfvars)의 mysql_version 변수 값을 8.0으로 변경합니다. 관련 커밋을 참조하십시오. RDS 인스턴스에 매핑된 파라미터 그룹도 갱신합니다. 관련 커밋을 참조하십시오.
MySQL 8.0 업그레이드의 영향
1. 엄격한 쿼리 검증
MySQL 8.0부터 ONLY_FULL_GROUP_BY SQL 모드가 기본으로 활성화됩니다. 이 설정 때문에 환자 대기열 및 일부 보고서 쿼리가 실패할 수 있습니다. 임시 해결책으로 Bahmni에서는 환경 변수를 통해 ONLY_FULL_GROUP_BY 모드를 비활성화합니다. 향후 릴리스에서 이 우회 방법은 제거될 수 있습니다.
2. 병동 목록 쿼리의 성능 영향
MySQL 8.0으로 마이그레이션할 때 ADT 모듈의 입원 환자 조회 쿼리가 크게 지연되어 API 요청 시간이 초과되는 현상이 확인되었습니다. 일부 상수 값을 캐시하는 최적화 전략을 적용하여 성능 문제를 해결했습니다.
이 수정에는 emrapi.sqlGet.wardsListDetails에 정의된 쿼리를 갱신하는 Liquibase 마이그레이션이 bahmni-core 모듈에 추가되었습니다. 구축 환경에서 쿼리를 다시 구성했다면 캐시된 변수를 사용하도록 기존 쿼리를 리팩터링하고 성능 영향을 테스트하는 것이 좋습니다.
3. MySQL 저장 프로시저 생성에 SUPER 권한 필요
MySQL 8.0에서는 바이너리 로깅이 활성화됩니다. 따라서 저장 프로시저나 함수를 만들 때 MySQL에서 SUPER 권한을 요구합니다.
저장 프로시저를 수동으로 만들 때는 root 사용자를 사용하십시오.
openmrs-user 같은 애플리케이션 데이터베이스 사용자가 Liquibase로 프로시저를 만든다면 함수 생성자 신뢰 설정을 일시적으로 활성화합니다. openmrsdb 컨테이너의 MySQL 셸에서 아래 명령을 실행해 활성화할 수 있습니다.
자세한 내용은 관련 문서를 참조하십시오.
Bahmni Wiki · CC BY-SA 4.0