MaraiDB 서버의 서비스 포트를 변경하려면, 먼저 SELinux 활성화 여부를 확인합니다.
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
위와 같이 "sestatus" 명령을 실행하였을 때, "SELinux status"가 "enabled"된 상태라면, MariaDB의 변경 대상 포트에 대한 설정을 추가해야만 합니다.
다음과 같이 SELinux에 신규 변경할 MariaDB 포트를 추가합니다.
$ semanage port -l | grep mysqld_port_t
mysqld_port_t tcp 1186, 3306, 63132-63164
$ semanage port -a -t mysqld_port_t -p tcp 16033
$ semanage port -l | grep mysqld_port_t
mysqld_port_t tcp 16033, 1186, 3306, 63132-63164
CentOS에서 제공하는 기본 방화벽(firewalld)를 사용하고 있다면, 외부에서 MariaDB의 변경된 포트로 접근이 가능하도록 다음과 같이 방화벽 설정을 추가합니다.
$ firewall-cmd --permanent --zone=public --add-port=16033/tcp
success
$ firewall-cmd --reload
success
다음과 같이 MariaDB 설정 파일에서 서비스 포트 번호를 변경 후, "mariadb" 서비스를 재시작(systemctl restart mariadb)하면 변경된 포트로 서비스가 시작됩니다.
$ vi /etc/my.cnf.d/server.cnf
[mariadb]
port=16033
CentOS에서 MariaDB의 운영 포트를 변경하고, 서비스를 시작했을 때, 다음과 유사한 오류가 확인되면, 앞서 설정한 SELinux 설정을 확인해야 합니다.
$ journalctl -xe
7월 09 15:48:36 localhost.localdomain mysqld[6040]: 2019-07-09 15:48:36 0 [Note] Server socket created on IP: '::'.
7월 09 15:48:36 localhost.localdomain mysqld[6040]: 2019-07-09 15:48:36 0 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 13: Permission denied
7월 09 15:48:36 localhost.localdomain mysqld[6040]: 2019-07-09 15:48:36 0 [ERROR] Do you already have another mysqld server running on port: 16033 ?
7월 09 15:48:36 localhost.localdomain mysqld[6040]: 2019-07-09 15:48:36 0 [ERROR] Aborting
7월 09 15:48:38 localhost.localdomain systemd[1]: mariadb.service: main process exited, code=exited, status=1/FAILURE
7월 09 15:48:38 localhost.localdomain systemd[1]: Failed to start MariaDB 10.3.15 database server.
참고자료