Jira Version Upgrade 8.x to 9.x (req. MySQL 8.0)
이 글은 Atlassian Jira LTS 버전 기준 및 Docker 기반으로 진행하며 Atlassian Docs를 참고하여 작성하였습니다.
Jira 업그레이드 전 점검사항
Jira 9.x 버전으로 업그레이드 하기 위해서는 Atlassian Docs에서 지원 플랫폼을 확인할 수 있습니다.
주요 사항을 보자면
Jira 8.x 버전에서 사용 가능했던 MySQL 5.7 버전이 더 이상 지원되지 않고 MySQL 8.0 버전으로 업그레이드를 해야합니다.
기존 MySQL 5.7 버전에서 MySQL 8 버전으로 업그레이드 하는 과정도 설명하겠습니다.
docker-compose.ymal
본 가이드에서 사용될 파일입니다.
version: '3'
services:
jira:
image: atlassian/jira-software:8.20.18
container_name: jira
depends_on:
- jira-db
ports:
- "8080:8080"
volumes:
- /var/atlassian/application-data/jira:/var/atlassian/application-data/jira
jira-db:
image: mysql:5.7
container_name: jira-db
volumes:
- /root/jira-db:/var/lib/mysql
# 테스트를 위해 신규 DB 설정
#- /root/jira-db-config:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: "admin"
신규 Jira 및 DB(MySQL 5.7)를 사용하여 테스트 하기 위한 가이드
신규로 Jira 컨테이너를 MySQL5.7 버전과 연결할 때 아래 사진과 같이 오류가 발생할 수 있습니다.
이를 방지하고자 아래 파일들의 설정을 적용합니다. (신규 설치 기준)
MySQL Connector
본 가이드에서는 아래 MySQL Connector를 사용합니다.
Jira 종료
DB를 업그레이드 해야함으로 Jira를 종료합니다.
docker-compose down
MySQL Version Upgrade(5.7 -> 8.0)
MySQL 버전 업그레이드는 Docker를 사용하기 때문에 이미지 태그만 바꿔주면 문제없이 8버전으로 업그레이드가 가능합니다.
docker-compose.yaml 수정
버전 태그만 변경하여 docker-compose restart 합니다.
version: '3'
services:
jira:
image: atlassian/jira-software:8.20.18
container_name: jira
depends_on:
- jira-db
ports:
- "8080:8080"
volumes:
- /var/atlassian/application-data/jira:/var/atlassian/application-data/jira
jira-db:
image: mysql:8.0
container_name: jira-db
volumes:
- /root/jira-db:/var/lib/mysql
# 테스트를 위해 신규 DB 설정
#- /root/jira-db-config:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: "admin"
character set 및 collation 값 변경
Jira 9.x 버전대로 업그레이드 하면서 UTF8MB4를 필수적으로 사용해야합니다.
기존 사용하던 UTF8은 호환되지 않습니다.
MySQL에서 쿼리문을 통해 기존 설정된 값을 확인합니다.
use <DB-NAME>;
# DB 캐릭터 셋 및 콜레이션 확인
SELECT @@character_set_database, @@collation_database;
# 테이블 콜레이션 확인
SELECT TABLE_SCHEMA
, TABLE_NAME
, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES;
# 컬럼 콜레이션 확인
SELECT TABLE_NAME
, COLUMN_NAME
, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS;
이제 Character Set 및 Collate 값을 utf8mb4로 변경해줍시다.
아래 명령어는 MySQL 내부에서 직접 쿼리문을 날려 데이터베이스의 Character Set 및 Collate 값을 변경합니다.
쿼리문 실행이 완료되었다면 아래 파일들을 생성합니다.
- table-change.sql
특정 데이터베이스 내의 테이블을 utf8mb4와 utf8mb4_bin 로 변환하는ALTER TABLE
문 입니다.
- column-change.sql
특정 데이터베이스 내의 VARCHAR 데이터 형식의 열에 대해 utf8mb4와 utf8mb4_bin 로 변환하는ALTER TABLE
문 입니다.
- non-varchar.sql
특정 데이터베이스 내의 VARCHAR 이외의 데이터 형식 열에 대해 utf8mb4와 utf8mb4_bin 로 변환하는ALTER TABLE
문 입니다.
파일 생성이 완료되었다면 Linux 쉘의 mysql
명령어로 sql 파일을 실행하여 Character Set 및 Collate 값을 변경합니다.
mysql -u <DB-GRANT-USER> -p <DB-NAME> < table-change.sql
mysql -u <DB-GRANT-USER> -p <DB-NAME> < column-change.sql
mysql -u <DB-GRANT-USER> -p <DB-NAME> < non-varchar.sql
만일 에러가 난다면
mysql> ALTER TABLE AO_1FA2A8_SCRUM_POKER_SESSION CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ERROR 3780 (HY000): Referencing column 'SESSION_ID' and referenced column 'ISSUE_KEY' in foreign key constraint 'fk_ao_1fa2a8_scrum_poker_vote_session_id' are incompatible.
mysql> ALTER TABLE AO_1FA2A8_SCRUM_POKER_VOTE CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
ERROR 3780 (HY000): Referencing column 'SESSION_ID' and referenced column 'ISSUE_KEY' in foreign key constraint 'fk_ao_1fa2a8_scrum_poker_vote_session_id' are incompatible.
와 같이 외래 키 값에 대한 오류가 발생한다면 .sql 파일 내부에 아래 내용을 삽입 후 다시 sql 파일을 실행합니다.
SET FOREIGN_KEY_CHECKS=0;
-- 여기에 쿼리문을 넣고 위아래가 이처럼 동일해야합니다
SET FOREIGN_KEY_CHECKS=1;
Jira Version Upgrade(8.20.18 -> 9.4.14 / LTS)
MySQL 버전 업그레이드 이후 Jira 시작 전 MySQL 업그레이드 사항을 적용해야합니다.
기존 Jira에 설정 되어있던 DB 버전 정보를 변경합니다.
dbconfig.xml 수정
여기서 변경할 부분은 <database-type> 및 <driver-class> 입니다.
mysql57
-> mysql8
->
com.mysql.jdbc.Drivercom.mysql.cj.jdbc.Driver
JDBC Connector 다운로드
JDBC 커넥터는 여기에서 다운로드 할 수 있습니다.
(본 가이드에서는 8.0.33 버전의 JDBC 커넥터를 사용합니다.)
docker-compose.yaml 파일 수정
Jira 이미지 태그를 변경하여 9.4.14 버전으로 시작합니다.
version: '3'
services:
jira:
image: atlassian/jira-software:9.4.14
container_name: jira
depends_on:
- jira-db
ports:
- "8080:8080"
volumes:
- /var/atlassian/application-data/jira:/var/atlassian/application-data/jira
jira-db:
image: mysql:8.0
container_name: jira-db
volumes:
- /root/jira-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "admin"
Jira 시작
업그레이드를 위해서 docker-compose.yaml 파일을 수정하여 재기동 합니다.
docker-compose up -d
JDBC Connector 복사
docker cp 명령어로 다운로드 받은 JDBC 커넥터를 Jira Engine 디렉토리에 넣고 재기동 시켜줍니다.
docker cp mysql-connector-java-8.0.22.jar <container-id>:/opt/atlassian/jira/lib/
docker restart <container-id>
추가로
Jira 8.x 버전에서 9.x 버전으로 업그레이드 시 Index 버전이 변경됨에 따라 Index Rebuild(FULL)를 수행해야합니다.
Jira Issue가 상당히 많을 경우 Index Rebuild 시간을 최소화 하기 위한 솔루션은 아래 게시글을 참고하시면 됩니다.
Member discussion