MySQL 설치 문제 해결

Mattermost v11.11번역일: 2026-09-02원본 보기
중요
  • Mattermost v11부터 Mattermost는 데이터베이스 드라이버로서의 MySQL 지원을 완전히 중단했습니다. MySQL 지원은 코드베이스에서 완전히 제거되었으며, 제품은 잘못된 설정 오류를 발생시킵니다.
  • PostgreSQL이 권장 데이터베이스입니다. 데이터베이스 버전 지원에 대한 자세한 내용은 데이터베이스 소프트웨어 문서를, MySQL에서 PostgreSQL로 마이그레이션하는 방법은 MySQL에서 PostgreSQL로 마이그레이션 문서를 참고하세요.

Mattermost 서버를 실행하려면 먼저 데이터베이스를 설치하고 구성해야 합니다. /opt/mattermost 디렉터리로 이동한 뒤 sudo -u mattermost bin/mattermost 명령을 입력하면 Mattermost를 시작할 수 있습니다. Mattermost 서버가 데이터베이스에 연결하지 못하면 시작에 실패합니다. 이 섹션에서는 Mattermost를 처음 시작할 때 마주칠 수 있는 MySQL 데이터베이스 문제를 다룹니다.

참고

MySQL 설치 방법은 사용하는 Linux 배포판에 따라 다릅니다. 하지만 MySQL이 설치된 뒤의 구성 방법은 모든 배포판에서 동일합니다. 어느 배포판이든 mattermost 데이터베이스와 mattermost 데이터베이스 사용자를 만들어야 합니다. 이 데이터베이스 객체를 만들지 않거나, Mattermost 설정 파일 /opt/mattermost/config/config.json에서 잘못 참조하면 Mattermost는 실패합니다. 여기서 소개하는 문제 해결 팁은 바로 이런 문제들을 다룹니다.

진행하기 전에 MySQL 서버가 실행 중인지 확인하세요. mysqladmin -u root -p status 명령을 실행하면 확인할 수 있습니다. 비밀번호를 입력하라는 메시지가 표시되면 비밀번호를 입력합니다. MySQL이 실행 중이라면 다음과 같은 출력이 표시됩니다.

Uptime: 877134  Threads: 1  Questions: 9902  Slow queries: 0  Opens: 522
Flush tables: 1  Open tables: 371  Queries per second avg: 0.011

MySQL이 실행 중이 아니라면 해당 배포판의 설치 안내를 다시 확인하세요.

주의

이 섹션에서 사용하는 일부 명령은 데이터베이스를 변경합니다. Mattermost 설치가 실패한 경우에만 이 명령들을 사용하세요. 정상 동작 중인 Mattermost 설치의 MySQL 데이터베이스를 직접 조작하지 마세요.

mattermost 데이터베이스

설치 과정에서 생성되는 데이터베이스의 이름은 mattermost입니다. 이 데이터베이스를 만들지 않았거나 이름을 잘못 지정했다면, Mattermost 서버를 시작할 때 다음과 같은 오류가 표시됩니다.

[2017/09/20 17:11:37 EDT] [INFO] Pinging SQL master database
[2017/09/20 17:11:37 EDT] [ERROR] Failed to ping DB retrying in 10 seconds
err-Error 1044: Access denied for user 'mmuser'@'%' to database 'mattermost'

MySQL이 mattermost 데이터베이스에 대한 접근을 명시적으로 거부하고 있다는 점에 주목하세요. 이는 mattermost라는 이름의 데이터베이스를 만들지 않았거나, /opt/mattermost/config/config.json 파일에서 이 데이터베이스를 잘못 참조하고 있다는 뜻일 수 있습니다.

데이터베이스 존재 여부 확인

mattermost 데이터베이스가 존재하는지 확인하려면 mysql -u root -p를 실행해 root로 MySQL에 접속합니다. 비밀번호를 입력한 뒤 show databases; 명령을 실행합니다. 이 명령은 모든 데이터베이스를 표시합니다. 다음과 비슷한 출력이 나타나야 합니다.

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mattermost         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.03 sec)

mattermost 데이터베이스가 없는 경우

mattermost 데이터베이스가 없다면 root로 MySQL에 접속해 create database mattermost; 명령을 실행하여 mattermost라는 이름의 데이터베이스를 만듭니다.

실수로 잘못된 이름의 데이터베이스를 만들었다면 drop database misnamed; 명령으로 삭제할 수 있습니다.

데이터베이스를 만든 뒤에는 /opt/mattermost 디렉터리로 이동해 sudo -u mattermost bin/mattermost 명령을 입력하여 Mattermost 서버를 다시 시작해 보세요.

mattermost 데이터베이스가 있는 경우

mattermost 데이터베이스가 존재한다면, /opt/mattermost/config/config.json 파일에 데이터베이스 드라이버가 올바르게 정의되어 있는지 확인하세요. 텍스트 편집기로 이 파일을 열고 "DataSource" 값을 확인합니다. 값은 다음과 같아야 합니다.

"mmuser:*mmuser-password*@tcp(*host-name-or-IP*:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"

또한 (DataSource 요소 바로 위에 있는) DriverName 요소가 mysql로 설정되어 있는지도 확인하세요.

잘못된 부분을 수정했다면 /opt/mattermost 디렉터리로 이동해 sudo -u mattermost bin/mattermost 명령을 입력하여 Mattermost 서버를 다시 시작하세요.

데이터베이스 사용자

설치 과정에서 mysql 프롬프트에서 다음 명령을 실행해 MySQL 데이터베이스 사용자를 만들어야 합니다.

create user 'mmuser'@'%' identified by 'mmuser-password';

mmuser-password 값은 직접 선택한 비밀번호를 나타내는 자리표시자입니다. 와일드카드 % 대신 IP 주소를 지정했을 수도 있습니다.

참고

MySQL 사용자는 사용자 이름과 MySQL에 접속하는 호스트로 완전히 식별됩니다. 두 요소는 @ 기호로 구분됩니다. % 문자는 사용자가 어떤 IP 주소에서든 MySQL에 접속할 수 있음을 뜻하는 와일드카드입니다. 만든 사용자가 10.10.10.2처럼 특정 IP 주소에서 MySQL에 접속한다면 그에 맞게 조정하세요.

만든 사용자와 호스트 조합이 존재하지 않으면 다음과 같은 오류가 표시됩니다.

[2017/09/20 17:06:18 EDT] [INFO] Pinging SQL master database
[2017/09/20 17:06:18 EDT] [ERROR] Failed to ping DB retrying in 10 seconds
err-Error 1045: Access denied for user 'mmuser'@'localhost' (using password: YES)

mmuser 존재 여부 확인

이 사용자가 존재하는지 확인하려면 mysql -u root -p로 root로 MySQL에 로그인합니다.

MySQL을 설치할 때 만든 root 비밀번호를 입력합니다. mysql 프롬프트에서 select User, Host from mysql.user; 명령을 실행하세요. 다음과 비슷한 출력이 나타나야 합니다.

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| mmuser           | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

사용자가 없는 경우

'mmuser'@'%'가 존재하지 않으면 root로 MySQL에 로그인한 뒤 다음 명령을 실행해 이 사용자를 만듭니다.

create user 'mmuser'@'%' identified by 'mmuser-password';

사용자를 만든 뒤에는 이 사용자가 mattermost 데이터베이스에 대한 권한을 갖는지 확인하세요.

사용자가 있는 경우

mmuser 사용자가 존재한다면 /opt/mattermost/config/config.json 파일의 DataSource 요소가 잘못되었을 수 있습니다. 이 파일을 열고 DataSource를 검색하세요. 값은 다음과 같아야 합니다.

"mmuser:*mmuser-password*@tcp(*host-name-or-IP*:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"

잘못된 부분을 수정했다면 /opt/mattermost 디렉터리로 이동해 sudo -u mattermost bin/mattermost 명령을 실행하여 Mattermost 서버를 다시 시작하세요.

사용자 비밀번호

mmuser의 비밀번호가 잘못되면 Mattermost는 실패합니다. 비밀번호가 잘못된 경우 다음과 같은 오류 메시지가 표시됩니다.

[2017/09/20 17:09:10 EDT] [INFO] Pinging SQL master database
[2017/09/20 17:09:10 EDT] [ERROR] Failed to ping DB retrying in 10 seconds
err-Error 1045: Access denied for user 'mmuser'@'localhost' (using password: YES)

config.json의 비밀번호

/opt/mattermost/config/config.json 파일의 DataSource 요소가 mmuser의 비밀번호를 참조합니다. 이 파일을 열고 DataSource를 검색하세요. 값은 다음과 같아야 합니다.

"mmuser:*mmuser-password*@tcp(*host-name-or-IP*:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"

비밀번호가 올바른지 확인하세요. 잘못된 부분을 수정했다면 /opt/mattermost로 이동해 sudo -u mattermost bin/mattermost 명령을 실행하여 Mattermost 서버를 다시 시작하세요.

비밀번호를 확신할 수 없는 경우

mmuser의 비밀번호가 올바른지 확신할 수 없다면 mysql -u mmuser -p 명령으로 mmuser로 MySQL에 로그인해 보세요. 비밀번호를 입력하라는 메시지가 표시됩니다. 로그인에 실패한다면 올바른 비밀번호를 사용하고 있지 않은 것입니다.

데이터베이스를 새로 설치한 상태라면, 비밀번호를 모를 때 가장 간단한 해결책은 기존 mmuser를 삭제하고 다시 만드는 것입니다. root로 MySQL에 로그인한 뒤 다음 명령들을 실행하면 됩니다.

  • drop user mmuser;
  • flush privileges;
  • create user 'mmuser'@'%' identified by 'mmuser-password';

mmuser를 다시 만들었다면, 아래 mmuser에 권한 부여 섹션의 안내에 따라 이 사용자가 mattermost 데이터베이스에 대한 권한을 갖는지 확인하세요.

사용자 권한 부족

데이터베이스가 존재하고 사용자 이름과 비밀번호도 올바르다면, mmuser에게 mattermost 데이터베이스에 접근할 충분한 권한이 없을 수 있습니다. 이 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

[2017/09/20 17:20:53 EDT] [INFO] Pinging SQL master database
[2017/09/20 17:20:53 EDT] [ERROR] Failed to ping DB retrying in 10 seconds
err-Error 1044: Access denied for user 'mmuser'@'%' to database 'mattermost
참고

오류 메시지를 자세히 살펴보세요. 오류 메시지에 표시된 사용자 이름은 /opt/mattermost/config/config.json 파일의 DataSource 요소에 지정된 사용자입니다. 예를 들어 오류 메시지가 Access denied for user 'muser'@'%' ...로 표시된다면, config.json 파일에서 사용자를 muser로 잘못 지정했음을 알 수 있습니다.

mmuser로 MySQL에 로그인해 show databases; 명령을 실행하면 이 사용자가 mattermost 데이터베이스에 접근할 수 있는지 확인할 수 있습니다. 이 사용자에게 mattermost 데이터베이스를 볼 권한이 없다면 출력에 표시되지 않습니다.

+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 rows in set (0.00 sec)

mmuser에 권한 부여

mattermost 데이터베이스가 존재하는데 mmuser가 이를 볼 수 없다면, MySQL에서 나온 뒤 root로 다시 로그인하세요. grant all privileges on mattermost.* to 'mmuser'@'%'; 명령을 실행해 mmuser에게 mattermost에 대한 모든 권한을 부여합니다.

/opt/mattermost 디렉터리로 이동해 sudo -u mattermost bin/mattermost 명령을 입력하여 Mattermost 서버를 다시 시작하세요.

서버가 SYSTEM 타임존으로 설정된 경우

v7.7 이하를 사용하는 Mattermost 고객은 서버가 SYSTEM 타임존으로 설정되어 있고 명명된 타임존을 지원하지 않는 경우, MySQL을 사용하는 서버에서 오류가 발생하는 것을 볼 수 있습니다. 이 오류는 서버의 timezone 테이블을 채워 넣으면 해결됩니다. 타임존 테이블을 로드하는 방법에 대한 자세한 내용은 다음 문서를 참고하세요.

참고

이 문제는 Mattermost v7.8부터 해결되었습니다.

최대 허용 패킷 크기

Go MySQL 드라이버는 maxAllowedPacket 크기를 4MiB에서 64MiB로 변경했습니다. 이는 MySQL 5.7에서 MySQL 8.0으로 넘어오면서 바뀐 서버 측 기본값과 일치시키기 위한 것입니다.

max_allowed_packet 설정이 64MiB가 아니라면, MySQL 설정 DSN에 maxAllowedPacket 매개변수를 추가해 서버 측 값과 맞추세요. 또는 값을 0으로 설정하면 새 연결마다 서버 측 값을 자동으로 가져오지만 성능 부담이 발생합니다.