Mattermost MySQL 데이터베이스 설정

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

deployment-img self-hosted 배포판

Important

PostgreSQL은 우리의 선호하는 데이터베이스입니다. database software 문서에서 데이터베이스 버전 지원에 대한 자세한 내용을 확인하십시오.

Mattermost MySQL 데이터베이스 설정

Mattermost 서버에서 사용할 MySQL 데이터베이스를 설정하려면 다음을 수행하세요:

  1. 데이터베이스를 호스팅할 서버에 로그인하고 MySQL을 설치합니다.

  2. sudo mysql 을 실행하여 *root*로 MySQL에 로그인합니다.

  3. 다음 명령을 실행하여 Mattermost 사용자 *mmuser*를 만듭니다:

    mysql> create user 'mmuser'@'%' identified by 'mmuser-password'; .

  • mmuser-password 보다 안전한 암호를 사용하십시오.

  • %mmuser 가 네트워크의 모든 기기에서 연결할 수 있음을 의미합니다. 그러나 Mattermost를 호스팅하는 기기의 IP 주소를 사용하는 것이 더 안전합니다. 예를들어, IP 주소가 10.10.10.2 인 기기에 Mattermost를 설치했다면 다음 명령을 사용합니다: mysql> create user 'mmuser'@'10.10.10.2' identified by 'mmuser-password';

  1. 다음 명령을 실행하여 Mattermost 데이터베이스를 만듭니다: mysql> create database mattermost; .

  2. 다음 명령을 실행하여 사용자 mmuser 에게 액세스 권한을 부여합니다: mysql> grant all privileges on mattermost.* to 'mmuser'@'%'; .

Note

이 쿼리는 편리를 위해 방금 만든 MySQL 사용자에게 데이터베이스의 모든 권한을 부여합니다. 보다 안전한 처리가 필요하다면 Mattermost를 실행하는 데 필요한 권한만 부여하기 위해 다음 쿼리를 사용하십시오: mysql> GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE, REFERENCES ON mattermost.* TO 'mmuser'@'%';

  1. mysql> exit 를 실행하여 MySQL에서 로그아웃합니다. 데이터베이스가 설치되고 초기 설정이 완료되면 Mattermost 서버를 설치할 수 있습니다.

Note

MySQL을 별도로 설치한 경우, /etc/mysql/mysql.conf.d/mysqld.cnf 파일을 열고 bind-address = 127.0.0.1# 기호로 주석 처리한 후 데이터베이스 서버를 다시 시작하십시오.

데이터베이스 백업

데이터베이스 버전에 따라 표준 절차를 사용하여 Mattermost 데이터베이스를 백업합니다. MySQL 백업 문서 을 온라인에서 확인할 수 있습니다. 페이지의 선택기를 사용하여 MySQL 버전을 선택하십시오.

Mattermost 업그레이드

Mattermost v7.1은 새로운 열과 해당 인덱스의 스키마 변경을 도입합니다. 스키마 변경에 대한 테스트 결과는 다음과 같습니다: 12M Posts, 2.5M Reactions - ~1min 34s (인스턴스: 8코어, 16GB RAM PC).

업그레이드 전에 다음 SQL 쿼리를 실행하여 Reactions 테이블에 잠금을 설정할 수 있습니다.

ALTER TABLE Reactions ADD COLUMN ChannelId varchar(26) NOT NULL DEFAULT "";

UPDATE Reactions SET ChannelId = COALESCE((select ChannelId from Posts where Posts.Id = Reactions.PostId), '') WHERE ChannelId="";

CREATE INDEX idx_reactions_channel_id ON Reactions(ChannelId) LOCK=NONE;

이 기간 동안 게시된 사용자 반응은 데이터베이스에 반영되지 않을 것입니다. 이는 완전히 하위 호환성이 유지됩니다.

연결 콜레이션 및 테이블 콜레이션이 다르면 Illegal mix of collations 오류가 발생할 수 있습니다. 이 오류를 해결하려면 연결과 테이블에 동일한 콜레이션을 설정하십시오. 연결, 데이터베이스, 테이블, 열에는 서로 다른 콜레이션이 있으며, 데이터베이스 관리자는 서로 다른 객체에 대해 서로 다른 콜레이션 수준을 설정할 수 있습니다.

고가용성 구성 설정 권장 사항

MySQL의 경우 고성능을 위해 다음 구성 옵션을 권장합니다:

  • innodb_buffer_pool_size : 총 RAM의 ~70%로 설정합니다.

  • innodb_log_file_size : 256MB로 설정합니다. 이를 늘리면 쓰기 집중적인 작업에 도움이 됩니다. 복구 시간이 더 오래 걸릴 수 있습니다.

  • innodb_flush_log_at_trx_commit : 2입니다. 이로 인해 최대 1초까지 트랜잭션 데이터가 손실될 수 있습니다.

  • max_heap_table_size : 64MB

  • tmp_table_size : 64MB

안전한 데이터 저장을 위한 암호화

안전한 데이터 저장은 메시지를 위해 하드웨어 및 소프트웨어 디스크 암호화 솔루션을 통해 Mattermost 데이터베이스에 적용됩니다. 이 데이터베이스는 인프라 내에서 고유한 서버에 있습니다. 디스크 수준의 암호화 옵션에 대한 자세한 내용은 MySQL 데이터베이스 문서를 참조하십시오.

데이터베이스용 소켓 사용

$ mysql -u root -p
CREATE DATABASE mattermostdb;
CREATE USER mmuser IDENTIFIED BY 'mmuser_password';
GRANT ALL ON mattermostdb.* TO mmuser;

Mattermost는 /etc/webapps/mattermost/config.json 에 구성되어 있으며, 문자열은 따옴표로 묶어야 합니다.

  • DriverNamemysql 로 설정합니다.

  • DataSourcemmuser:mmuser_password@unix(/run/mysqld/mysqld.sock)/mattermostdb?charset=utf8mb4,utf8 로 설정합니다.

데이터베이스에서의 Mattermost 구성

Mattermost 설치의 활성 구성의 단일 정보원으로서 데이터베이스를 사용할 수 있습니다. 이로써 Mattermost 바이너리는 기본 config.json 파일을 읽는 대신 데이터베이스 내 구성 설정을 읽게 됩니다.

mysql://mmuser:really_secure_password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s

환경 파일 생성

Note

고가용성 클러스터에서 Mattermost를 실행하는 경우, 이 단계는 클러스터 내 모든 서버에서 수행되어야 합니다.

/opt/mattermost/config/mattermost.environment 파일을 만들어 데이터베이스 연결 문자열을 MM_CONFIG 환경 변수로 설정합니다. 예시:

MM_CONFIG='mysql://mmuser:mostest@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s'

Note

데이터베이스 연결 문자열 내의 작은 따옴표는 \' 를 사용하여 이스케이프 처리해야 합니다. 예시: MM_CONFIG='mysql://mmuser:it\'s-a-password!@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s'

MM_CONFIG='mysql://mmuser:it\'s-a-password!@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s'

마지막으로, 다음 명령을 실행하여 Mattermost 디렉터리의 권한을 확인합니다.

sudo chown -R mattermost:mattermost /opt/mattermost

Mattermost systemd 파일 수정

먼저 다음 명령을 사용하여 mattermost.service 파일을 찾습니다:

sudo systemctl status mattermost.service

출력의 두 번째 줄에 실행 중인 mattermost.service 의 위치가 표시됩니다.

Loaded: loaded (/lib/systemd/system/mattermost.service; enabled; vendor preset: enabled)

다음 텍스트를 *root*로 편집하여 이 파일을 수정하여 ExecStart 로 시작하는 줄 바로 위에 아래 텍스트를 추가합니다:

EnvironmentFile=/opt/mattermost/config/mattermost.environment

아래는 EnvironmentFile 줄이 추가된 완전한 mattermost.service 파일입니다:

[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=notify
EnvironmentFile=/opt/mattermost/config/mattermost.environment
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=mysql.service

검색에 관한 기술적인 참고 사항

기본적으로 Mattermost는 MySQL에 포함된 전체 텍스트 검색 지원을 사용합니다. 제품 메뉴 |product-list|를 선택한 다음 Mattermost 정보 를 선택하여 사용 중인 데이터베이스를 확인하십시오.

  • 보통 검색 결과에서 stop words는 필터링됩니다. 적용 가능한 stop words의 전체 목록은 MySQL 데이터베이스 문서를 참조하십시오.

  • 해시태그 또는 점을 포함하는 최근 사용자 언급은 검색 결과를 반환하지 않습니다.

  • 와일드카드 검색을 수행하기 위해 밑줄 _ 기호를 사용하지 않으십시오. 대신 별표 * 기호를 사용하십시오.

  • MySQL에서 검색에서 제외되는 stop words에는 다음과 같은 단어가 포함됩니다: "a", "about", "an", "are", "as", "at", "be", "by", "com", "de", "en", "for", "from", "how", "i", "in", "is", "it", "la", "of", "on", "or", "that", "the", "this", "to", "was", "what", "when", "where", "who", "will", "with", "und", "the", "www" .

중국어, 한국어, 일본어 검색 수행

중국어, 한국어, 일본어 검색을 위한 최상의 경험은 특별한 설정이 적용된 MySQL 5.7.6 이상 사용하는 것입니다. 자세한 내용은 중국어, 일본어 및 한국어 검색 문서 를 참조하십시오.

검색어의 끝에 와일드카드 * 를 추가하여 이 설정 없이도 검색을 수행할 수 있습니다.

Bitnami에서 자체 호스트 Mattermost 배포로 마이그레이션

MySQL 데이터베이스가 포함된 Bitnami에서 자체 호스트 Mattermost 설치로의 마이그레이션을 계획 중이라면, 마이그레이션 가이드의 이 노트를 확인하세요: Bitnami에서 마이그레이션하기 .

Mattermost v6.0을 v5.38으로 다운그레이드

INSERT INTO Systems (Name,Value) VALUES ('Version','5.38.0') ON DUPLICATE KEY UPDATE Value = '5.38.0';

CREATE INDEX idx_status_status ON Status (Status);
DROP INDEX idx_status_status_dndendtime ON Status;
CREATE INDEX idx_channelmembers_user_id ON ChannelMembers (UserId);
DROP INDEX idx_channelmembers_channel_id_scheme_guest_user_id ON ChannelMembers;
DROP INDEX idx_channelmembers_user_id_channel_id_last_viewed_at ON ChannelMembers;
CREATE INDEX idx_threads_channel_id ON Threads (ChannelId);
DROP INDEX idx_threads_channel_id_last_reply_at ON Threads;
CREATE INDEX idx_channels_team_id ON Channels (TeamId);
DROP INDEX idx_channels_team_id_type ON Channels;
DROP INDEX idx_channels_team_id_display_name ON Channels;
CREATE INDEX idx_posts_root_id ON Posts (RootId);
DROP INDEX idx_posts_root_id_delete_at ON Posts;

ALTER TABLE CommandWebhooks ADD COLUMN ParentId varchar(26);
UPDATE CommandWebhooks SET ParentId = '';
ALTER TABLE Posts ADD COLUMN ParentId varchar(26);
UPDATE Posts SET ParentId = '';

ALTER TABLE Users MODIFY Timezone text;
ALTER TABLE Users MODIFY NotifyProps text;
ALTER TABLE Users MODIFY Props text;
ALTER TABLE Threads MODIFY Participants longtext;
ALTER TABLE Sessions MODIFY Props text;
ALTER TABLE Posts MODIFY Props text;
ALTER TABLE Jobs MODIFY Data text;
ALTER TABLE LinkMetadata MODIFY Data text;
ALTER TABLE ChannelMembers MODIFY NotifyProps text;

Note

최종 v6.0 업그레이드 쿼리의 역순 는 이 다운그레이드 쿼리에서 의도적으로 제외되었습니다. 결과가 하위 호환성을 유지하므로 쿼리를 실행하면 다운그레이드 프로세스가 불필요하게 지연됩니다.