MySQL 설치 문제 해결

plans-img 모든 플랜 에서 사용 가능

deployment-img self-hosted 배포판

Mattermost 서버를 실행하기 전에 먼저 데이터베이스를 설치하고 구성해야 합니다. Mattermost를 시작하려면 /opt/mattermost 디렉터리로 이동하고 다음 명령을 입력하세요: sudo -u mattermost bin/mattermost . Mattermost 서버가 데이터베이스에 연결할 수 없는 경우 시작하지 못합니다. 이 섹션은 처음으로 Mattermost를 시작할 때 발생할 수 있는 MySQL 데이터베이스 문제에 대해 다룹니다.

Note

  • 특정 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이 실행되고 있지 않다면, 해당 배포판에 대한 설치 지침을 검토하십시오.

Warning

이 섹션에서 사용된 일부 명령은 데이터베이스를 변경합니다. 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 데이터베이스가 존재하는지 확인하려면 *root*로 MySQL에 로그인하여 mysql -u root -p 명령을 실행하세요. 입력 요청이 나타나면 암호를 입력한 후 show databases; 명령을 실행하세요. 이 명령은 모든 데이터베이스를 표시합니다. 다음과 유사한 내용을 볼 수 있어야 합니다:

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

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

mattermost 데이터베이스가 존재하지 않는 경우 *root*로 MySQL에 로그인하여 다음 명령을 사용하여 mattermost 데이터베이스를 만드세요: create database mattermost; .

잘못된 이름으로 데이터베이스를 만든 경우, 해당 데이터베이스를 삭제하려면 다음 명령을 사용하세요: :samp: drop database {misnamed}; .

데이터베이스를 생성한 후에 /opt/mattermost 디렉터리로 이동하고 다음 명령을 입력하여 Mattermost 서버를 다시 시작해 보세요: sudo -u mattermost bin/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 데이터베이스 사용자를 만들어야 합니다.

samp

create user ‘mmuser’@’%’ identified by ‘{mmuser-password}’; .

mmuser-password 값은 선택한 암호의 자리 표시자입니다. % 대신 IP 주소를 지정했을 수도 있습니다.

Note

MySQL 사용자는 사용자 이름과 MySQL에 액세스하는 호스트에 의해 완전히 정의됩니다. 이러한 요소들은 @ 기호로 구분됩니다. % 문자는 사용자가 어떤 IP 주소에서도 MySQL에 액세스할 수 있음을 나타내는 와일드 카드입니다. 만약 생성한 사용자가 특정 IP 주소(예: 10.10.10.2 )에서 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가 존재하는지 확인

이 사용자가 존재하는지 확인하려면 *root*로 MySQL에 로그인하세요: mysql -u root -p .

입력 요청이 나타나면 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에 로그인하여 다음 명령을 사용하여 이 사용자를 만드세요:

samp

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"

오류를 수정하면 Mattermost 서버를 다시 시작하십시오. /opt/mattermost 디렉터리로 이동하고 다음 명령을 입력하여 Mattermost 서버를 재시작하십시오: sudo -u mattermost bin/mattermost .

사용자 비밀번호

Mattermost는 “mmuser”의 잘못된 비밀번호를 사용하면 실패합니다. 잘못된 비밀번호는 다음과 같은 오류 메시지가 표시됩니다:

   [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"

비밀번호가 정확한지 확인하십시오. 잘못된 부분을 수정하면 Mattermost 서버를 다시 시작하십시오. /opt/mattermost 로 이동하고 다음 몤령을 입력하여 Mattermost 서버를 다시 시작하십시오: sudo -u mattermost bin/mattermost .

비밀번호가 확실하지 않은 경우

“mmuser” 비밀번호가 정확한지 확실하지 않은 경우 명령을 사용하여 “mmuser”로 MySQL에 로그인을 시도하십시오. mysql -u mmuser -p 명령을 입력하면 비밀번호를 묻힙니다. 로그인에 실패하면 올바른 비밀번호를 사용하지 않는 것입니다.

새 데이터베이스 설치에서 알 수없는 암호의 가장 쉬운 해결책은 기존 “mmuser”를 제거하고 해당 사용자를 다시 만드는 것입니다. MySQL로 “root”로 로그인한 다음 다음 명령을 입력하여 이를 수행할 수 있습니다.

  • drop user mmuser;

  • flush privileges;

  • create user 'mmuser'@'%' identified by '{mmuser-password}';

“mmuser”를 다시 만든 경우에는 :ref: mysql_grants 에서 제공된 지침을 따라 “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

Note

오류 메시지를 주의 깊게 살펴보세요. 오류 메시지에 표시된 사용자 이름은 “config.json” 파일의 DataSource 요소에서 식별 된 사용자입니다. 예를 들어, 오류 메시지가 “Access denied for user ‘muser’@’%‘“라면 “config.json” 파일에서 사용자를 “muser”로 잘못 식별했다는 것을 알 수 있습니다.

사용자 “mmuser”이 “mattermost” 데이터베이스에 액세스 할 수 있는지 확인하려면 “mmuser”로 MySQL에 로그인하고 다음 명령을 입력하십시오. show databases; . 이 사용자가 “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”에 대한 모든 권한을 부여하십시오.

Mattermost 서버를 다시 시작하려면 /opt/mattermost 디렉터리로 이동하고 다음 명령을 입력하여 Mattermost 서버를 다시 시작하십시오: sudo -u mattermost bin/mattermost .

서버가 SYSTEM 시간대로 설정 됨

Mattermost v7.7 이전을 사용하는 고객은 시스템 시간대로 설정된 서버에서 MySQL을 사용하는 경우이 문제가 발생할 수 있습니다. 이러한 오류는 서버가 SYSTEM 시간대로 설정되어 있고 명명된 시간대를 지원하지 않는 경우 발생할 수 있습니다. 이러한 오류는 서버에 “timezone” 테이블을로드하여 수정할 수 있습니다. 시간대 테이블을로드하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오:

Note

이 문제는 Mattermost v7.8에서 해결되었습니다.

최대 허용 패킷

Go MySQL 드라이버는 “maxAllowedPacket” 크기를 MySQL 5.7에서 MySQL 8.0으로의 서버 측 기본 값 변경에 맞추어 4MiB에서 64MiB로 변경했습니다.

“max_allowed_packet” 설정이 64MiB가 아닌 경우 새 연결이있을 때 서버 측 값 자동으로 가져 오기위한 성능 오버 헤드가있는 옵션 인 maxAllowedPacket 의 추가 매개 변수로 MySQL 구성 DSN을 업데이트하십시오. 대체로, 성능 오버 헤드가있을 수 있으므로 0 의 값을 설정하십시오.