MySQL 데이터베이스 서버에 원격 연결을 허용하는 방법

MySQL 데이터베이스 서버에 원격 연결을 허용하는 방법

2022-05-31 last update

8 minutes reading mysql mariadb
기본적으로 MySQL 서버는 localhost로부터의 연결만 정탐합니다. 이것은 같은 호스트에서 실행되는 프로그램만 접근할 수 있음을 의미합니다.그러나 일부 경우에는 MySQL 서버에 원격 위치에서 액세스할 필요가 있습니다.예를 들어 로컬 시스템이나 다중 서버 배포에서 원격 MySQL 서버에 연결해야 할 수도 있습니다. 이 서버는 데이터베이스 서버와 다른 컴퓨터에서 실행됩니다.한 가지 선택은 액세스MySQL server through SSH Tunnel
다른 하나는 원격 연결을 사용하도록 MySQL 서버를 구성하는 것입니다.이 문서에서는 MySQL 서버에 원격 연결을 허용하는 데 필요한 절차를 설명합니다.같은 설명도 MariaDB에 적용된다.

ySQL 서버 구성

첫 번째 단계는 MySQL 서버를 수신 기기의 특정 IP 주소 또는 모든 IP 주소로 설정하는 것입니다.만약 MySQL 서버와 클라이언트가 전용 네트워크를 통해 통신할 수 있다면, 가장 좋은 선택은 MySQL 서버를 전용 IP에서만 탐지하도록 설정하는 것이다.그렇지 않으면 공용 네트워크를 통해 서버에 연결하려면 MySQL 서버를 스캔 컴퓨터의 모든 IP 주소로 설정합니다.이를 위해서는 MySQL 구성 파일을 편집하고 bind-address 옵션의 값을 추가하거나 변경해야 합니다.단일 IP 주소와 IP 범위를 설정할 수 있습니다.주소가 0.0.0.0인 경우 MySQL 서버는 모든 호스트 IPv4 인터페이스에 연결합니다.IPv6를 시스템에 구성한 경우 0.0.0.0 대신 를 사용합니다.MySQL 구성 파일의 위치는 릴리스에 따라 다릅니다.Ubuntu 및 Debian에서는 파일::이, Red Hat 기반 릴리스(예: CentOS)에서는 파일/etc/mysql/mysql.conf.d/mysqld.cnf이 있습니다.text editor를 사용하여 파일 열기
:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
/etc/my.cnf로 시작하는 행을 검색하고 그 값을 MySQL 서버가 수신해야 할 IP 주소로 설정합니다.기본적으로 이 값은 bind-address (localhost에서만 정탐) 로 설정됩니다.이 예에서, 우리는 값을 127.0.0.1 mysqld로 변경하여, MySQL 서버를 모든 IPv4 인터페이스를 탐지하는 것으로 설정할 것입니다.cnf
bind-address           = 0.0.0.0
# skip-networking
에 포함된 줄이 있으면 삭제하거나 줄에 0.0.0.0 을 추가하여 주석을 달십시오.ySQL 8.0 이상 버전에서는 skip-networking 명령이 없을 수 있습니다.이 경우 # 섹션에 추가합니다.완료되면 변경 사항을 적용하기 위해 MySQL 서비스를 다시 시작합니다.루트 사용자 또는 sudo 사용자만
권한은 서비스를 다시 시작할 수 있습니다.Debian 또는 Ubuntu에서 MySQL 서비스를 다시 시작하려면 RedHat 기반 릴리스(예: CentOS)에
sudo systemctl restart mysql
를 입력하여 서비스를 다시 시작하십시오.
sudo systemctl restart mysqld

원격 컴퓨터에서 사용자 액세스 권한 부여

다음 단계는 원격 사용자가 데이터베이스에 접근할 수 있도록 하는 것입니다.루트 사용자로 MySQL 서버에 로그인하려면 다음과 같이 입력하십시오.
sudo mysql
오래된 컴퓨터 MySQL 인증 플러그인을 루트 사용자로 로그인하면 다음 명령을 실행하고 알림이 나타날 때 비밀번호를 입력하십시오. (adsbygoogle=window.adsbygoogle | []).푸시({});
mysql -uroot -p
MySQL 셸 내부에 bind-address 문 togrant access 사용
원격 사용자에게 전송합니다.
GRANT ALL ON database_name.* TO [email protected]'ip_address' IDENTIFIED BY 'user_password';
:
  • [mysqld]는 사용자가 연결할 데이터베이스의 이름입니다.
  • GRANT는 MySQL 사용자의 이름입니다.
  • database_nameIP address
    사용자가 에서 연결됩니다.user_name를 사용하여 사용자가 모든 IP 주소에서 연결할 수 있습니다.
  • ip_address는 사용자 암호입니다.
  • 예를 들어, IP % 클라이언트 컴퓨터에서 user_password 및 암호 dbname 사용자에게 데이터베이스 foo 에 대한 액세스 권한을 부여하려면
    GRANT ALL ON dbname.* TO [email protected]'10.8.0.5' IDENTIFIED BY 'my_passwd';

    방화벽 구성

    마지막 단계는 원격 컴퓨터가 포트 my_passwd (MySQL 기본 포트) 에서 통신할 수 있도록 방화벽을 구성하는 것입니다.

    규칙

    사용 중인 경우 iptables
    다음 명령은 방화벽으로서 인터넷의 모든 IP 주소에서 MySQL 포트에 액세스할 수 있도록 합니다.이것은 매우 안전하지 않다.
    sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT
    특정 IP 주소에서 액세스할 수 있음:
    sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

    UFW 회사

    UFW
    Ubuntu의 기본 방화벽 도구입니다.인터넷에서 IP 주소에 대한 액세스를 허용하려면(매우 안전하지 않음):
    sudo ufw allow 3306/tcp
    특정 IP 주소에서 액세스를 허용하려면:
    sudo ufw allow from 10.8.0.5 to any port 3306

    방화벽 D

    FirewallD
    CentOS의 기본 방화벽 관리 도구입니다.인터넷에서 IP 주소에 액세스할 수 있도록 허용하려면 (매우 안전하지 않음) 를 입력하십시오.
    sudo firewall-cmd --permanent --zone=public --add-port=3306/tcpsudo firewall-cmd --reload
    특정 포트에서 IP 주소에 액세스할 수 있도록 하려면 새 FirewallD 영역을 만들거나 풍부한 규칙을 사용할 수 있습니다.10.8.0.5라는 새 영역을 만듭니다.
    sudo firewall-cmd --new-zone=mysqlzone --permanentsudo firewall-cmd --reloadsudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcpsudo firewall-cmd --reload

    변경 사항 확인

    원격 사용자가 MySQL 서버에 연결할 수 있는지 확인하려면 다음 명령을 실행하십시오.
    mysql -u user_name -h mysql_server_ip -p
    여기서 3306 은 사용자가 액세스 권한을 부여한 사용자의 이름이고, mysqlzone 는 MySQL 서버가 실행 중인 호스트의 IP 주소입니다.모든 설정이 올바르면 원격 MySQL 서버에 로그인할 수 있습니다.다음 오류가 발생하면 port 3306 is not open
    , 또는 MySQL 서버가 아닙니다listening on the IP address
    .
    ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"
    
    다음 오류는 로그인하려는 사용자가 원격 MySQL 서버에 액세스할 수 있는 권한이 없음을 나타냅니다.
    "ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server" 
    

    결론

    기본적으로 가장 유행하는 소스 데이터베이스 서버 MySQL은localhost에서만 수신 연결을 탐지합니다.MySQL 서버에 원격 연결을 허용하려면
  • MySQL 서버를 모든 또는 특정 인터페이스로 구성합니다.
  • 에게는 원격 사용자 액세스 권한이 부여됩니다.
  • 방화벽의 MySQL 포트를 엽니다.