MySQL에서 PostgreSQL로의 마이그레이션 가이드라인#
모든 플랜 에서 사용 가능
self-hosted 배포
Mattermost v8.0부터 PostgreSQL 는 플랫폼의 성능과 기능을 향상시키기 위한 Mattermost의 선택된 데이터베이스입니다. MySQL 데이터베이스에서 마이그레이션에 관심이 있는 커뮤니티 구성원을 지원하는 것의 중요성을 인식하여, 우리는 지침과 모범 사례를 제공하기 위한 사전 조치를 취했습니다.
MySQL에서 PostgreSQL로 자동 마이그레이션 - 마이그레이션 프로세스를 간소화하고 잠재적인 문제를 완화하며 원활한 전환을 촉진하기 위한 포괄적인 지침 세트와
migration-assist도구입니다.MySQL에서 PostgreSQL로 수동 마이그레이션 - 조직에 마이그레이션 프로세스를 담당할 데이터베이스 관리자가 있거나
migration-assist도구가 자동화하는 내용을 배우고 싶은 경우에 좋은 옵션입니다.
자주 묻는 질문#
Mattermost가 MySQL 지원을 중단하는 이유는 무엇인가요?#
Mattermost는 개발을 간소화하고 더 효율적이고 최적화된 기능을 제공하는 데 집중하기 위해 MySQL 데이터베이스 지원을 중단하기로 결정했습니다. 일반적으로 더 발전되고 기업 환경에 더 적합한 것으로 간주되는 PostgreSQL만 지원함으로써 Mattermost는 복잡성을 줄이고, 성능을 개선하며, 제품을 향상시키기 위한 리소스를 더 잘 할당할 수 있습니다. 이러한 변경은 모든 Mattermost 배포에 대해 더 일관되고 견고하며 확장 가능한 데이터베이스 상호 작용을 보장하는 데 도움이 됩니다.
Mattermost를 업그레이드하기 전에 PostgreSQL로 마이그레이션하는 것이 권장되나요?#
네. PostgreSQL로 마이그레이션하기 전에 Mattermost 서버 v8.x 이상으로 업그레이드하는 것도 권장합니다.
migration-assist를 Mattermost 서버에서 실행할 수 있나요?#
기술적으로는 가능합니다. migration-assist 도구는 Mattermost 서버에서 실행할 수 있습니다. 하지만 성능 문제를 피하기 위해 별도의 서버에서 도구를 실행하는 것이 권장됩니다. 마이그레이션 프로세스가 프로덕션 환경에 영향을 미치지 않도록 MySQL 데이터베이스의 복사본에 대해 마이그레이션을 실행하는 것이 좋습니다.
PostgreSQL 서버의 크기는 어느 정도여야 하나요?#
PostgreSQL 서버의 크기는 초기에는 MySQL 서버와 동일해야 합니다. PostgreSQL 서버의 성능을 모니터링하고 필요에 따라 리소스를 조정하는 것이 좋습니다.
migration-assist 서버를 실행하는 서버의 크기는 어느 정도여야 하나요?#
도구 자체는 가볍고 대형 서버가 필요하지 않습니다. 기본 구성의 경우 2개의 CPU 코어와 16GB RAM이 있는 서버면 충분합니다. 그러나 MySQL 데이터베이스의 크기, 다운타임 제한 및 pgloader 의 구성에 따라 리소스를 조정해야 할 수 있습니다.
Mattermost가 pgloader를 번들로 제공하나요, 아니면 별도로 설치해야 하나요?#
Mattermost는 Mattermost 서버에 pgloader를 번들로 제공하지 않습니다. pgloader를 별도로 설치해야 합니다. 자세한 내용은 install pgloader 문서를 참조하세요.
Boards, Playbooks, Calls 외에 다른 플러그인용 마이그레이션이 있나요?#
NPS-plugin과 같은 다른 플러그인용 마이그레이션을 개발 중입니다. 업데이트를 기다려주세요.
이 프로세스들은 AWS RDS 데이터베이스를 지원하나요?#
네, 이 프로세스들은 AWS RDS 데이터베이스를 지원합니다. 하지만 마이그레이션 프로세스가 데이터베이스에 접근할 수 있도록 보안 그룹 설정을 조정해야 할 수 있습니다.
Mattermost는 MariaDB를 지원하나요? 지원하지 않는다면 그 이유는 무엇인가요?#
Mattermost는 MariaDB를 지원하지 않습니다. 이 결정의 주요 이유는 단일 데이터베이스 기술에 집중하여 개발과 유지보수를 간소화하기 위함입니다. PostgreSQL을 표준화함으로써 Mattermost는 최적화된 기능, 향상된 성능, 그리고 더 집중된 엔지니어링 노력을 제공할 수 있습니다. PostgreSQL은 견고성, 고급 기능, 기업용 적합성으로 잘 알려져 있어 Mattermost의 선택된 데이터베이스가 되었습니다.
MariaDB는 MySQL과 상당 부분 호환되지만, 추가적인 복잡성과 잠재적인 불일치를 초래하며, Mattermost 개발팀은 데이터베이스 지원을 제한함으로써 이를 피하고자 합니다.
문제 해결#
MySQL의 지원되지 않는 인증#
MySQL v8 인증으로 인한 오류가 발생하는 경우, 이는 pgloader의 알려진 문제 와 관련이 있을 수 있습니다. 해결책은 MySQL 구성에서 기본 인증 방법을 mysql_native_password 로 설정하는 것입니다. 이를 위해 mysql.cnf 파일에 default-authentication-plugin=mysql_native_password 값을 추가하세요. 또한 사용자가 이 인증 방법을 사용하도록 업데이트하는 것을 잊지 마세요.
ALTER USER '<mysql_user>'@'%' IDENTIFIED WITH mysql_native_password BY '<mysql_password>';
pgloader 명령 실행 중 오류#
pgloader 명령 실행 중 오류가 발생하면 두 데이터베이스에 모두 접근 가능한지, 사용자가 데이터베이스에 접근할 수 있는 필요한 권한을 가지고 있는지 확인하세요. pgloader 명령 실행 중에 오류가 있는 경우 마이그레이션을 계속하지 마세요.
참고
경험이 있는 사용자의 경우, 처음부터 마이그레이션을 다시 시작하지 않고도 pgloader 를 실행할 수 있습니다. 이 경우 테이블의 문제를 수동으로 수정하고, 해당 테이블에 특화된 구성으로 pgloader 명령을 실행해야 합니다. 또한 스키마 이름이 public 으로 되돌아갔는지, search_path 가 복원되었는지(또는 구성에서 필요한 절을 제거했는지) 확인하세요.
다음 섹션에서는 pgloader 명령 실행 중 발생할 수 있는 일반적인 오류를 해결하는 방법을 자세히 설명합니다:
JSON 유형에 대한 잘못된 입력 구문#
다음과 유사한 오류 메시지가 표시되는 경우:
ERROR Database error 22P02: invalid input syntax for type json
MySQL 데이터베이스의 데이터가 유효한 JSON 형식이 아닙니다. MySQL 데이터베이스의 데이터를 유효한 JSON 형식으로 업데이트하여 이 문제를 해결할 수 있습니다. 어떤 행이 문제를 일으키는지 확인하려면 다음 쿼리를 실행하세요(여기서 <table_name> 과 <column_name> 은 pgloader 출력에 표시된 실제 테이블과 열 이름으로 대체해야 함):
SELECT * FROM <table_name> WHERE JSON_VALID(<column_name>) = 0;
위의 쿼리를 사용하여 MySQL 데이터베이스의 데이터를 찾고 유효한 JSON 형식으로 업데이트할 수 있습니다. 데이터를 업데이트한 후 pgloader 명령을 다시 실행할 수 있습니다.
열 또는 테이블을 찾을 수 없음#
다음과 유사한 오류 메시지가 표시되는 경우:
pgloader failed to find column
PostgreSQL 데이터베이스에 열이나 테이블이 없습니다. 올바른 버전의 Postgres 스키마를 생성했는지 확인하여 이 문제를 해결할 수 있습니다. 스키마를 다시 생성한 후 pgloader 명령을 다시 실행할 수 있습니다.
ECASE 표현식을 통과함#
다음과 유사한 오류 메시지가 표시되는 경우:
ERROR mysql: 76 fell through ECASE expression.
이는 pgloader의 알려진 문제 입니다. 소스에서 pgloader 를 컴파일하거나 docker 이미지로 pgloader 를 실행하여 이 문제를 해결할 수 있습니다. 자세한 내용은 install pgloader 를 참조하세요.
참고
또한 pgloader가 마이그레이션 중에 나머지 테이블을 계속 마이그레이션하고 하나 이상의 테이블을 건너뛰는 경우가 있을 수 있습니다. 이러한 경우 테이블의 문제를 식별하고 깨끗한 데이터베이스로 pgloader 명령을 다시 실행하기 전에 수정하는 것이 좋습니다. 오류에 대한 자세한 정보를 얻기 위해 --debug 플래그로 pgloader 명령을 실행할 수 있습니다.
Mattermost가 PostgreSQL 데이터베이스에 연결할 수 없음#
Mattermost가 PostgreSQL 데이터베이스에 연결할 수 없는 문제가 발생하는 경우, PostgreSQL 서버가 실행 중이고 데이터베이스에 접근할 수 있는지 확인하세요. pgloader 명령 실행 중에 오류가 발생한 경우 스키마 이름을 public 으로 되돌리거나 search_path 를 복원하는 데 실패할 수 있습니다. 다음 명령을 실행하여 스키마 이름을 수동으로 public 으로 되돌리고 search_path 를 복원할 수 있습니다:
ALTER SCHEMA <schema_name> RENAME TO public;
또한 데이터베이스 사용자가 public 스키마에 기본적으로 접근할 수 있는 필요한 설정이 있는지 확인하세요. 다음 명령을 실행하여 이를 수행할 수 있습니다:
ALTER USER <user> SET SEARCH_PATH TO 'public';
SELECT pg_catalog.set_config('search_path', '"$user", public', false); -- should give access for the session
다음 명령을 실행하여 기본 search_path 를 확인할 수 있습니다:
SELECT boot_val FROM pg_settings WHERE name='search_path';
지원 문의#
Mattermost 배포에 맞춤화된 지침을 찾는 Mattermost 고객은 Mattermost Expert 에 문의하여 지침을 받을 수 있습니다.