기계적 인조 인간

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

What is MySQL? | How to Create Database and Tables in MySQL | MySQL Tutorial For Beginners | Edureka

What is MySQL? | How to Create Database and Tables in MySQL | MySQL Tutorial For Beginners | Edureka

차례:

Anonim

기본적으로 MySQL 서버는 로컬 호스트에서만 연결을 수신하므로 동일한 호스트에서 실행되는 응용 프로그램에서만 액세스 할 수 있습니다.

그러나 일부 상황에서는 원격 위치에서 MySQL 서버에 액세스해야합니다. 예를 들어 로컬 시스템에서 원격 MySQL 서버에 연결하거나 응용 프로그램이 데이터베이스 서버와 다른 컴퓨터에서 실행되는 다중 서버 배포를 사용하는 경우. 한 가지 옵션은 SSH 터널을 통해 MySQL 서버에 액세스하는 것이고 다른 하나는 원격 연결을 허용하도록 MySQL 서버를 구성하는 것입니다.

이 가이드에서는 MySQL 서버에 대한 원격 연결을 허용하는 데 필요한 단계를 진행합니다. MariaDB에도 동일한 지침이 적용됩니다.

MySQL 서버 구성

첫 번째 단계는 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 구성 파일의 위치는 배포판에 따라 다릅니다. 우분투와 데비안에서 파일은 /etc/mysql/mysql.conf.d/mysqld.cnf 에 있고 CentOS와 같은 Red Hat 기반 배포에서는 파일이 /etc/my.cnf 있습니다.

텍스트 편집기로 파일을여십시오.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address 시작하는 행을 검색하고 해당 값을 MySQL 서버가 청취해야하는 IP 주소로 설정하십시오.

기본적 127.0.0.1 값은 127.0.0.1 로 설정되어 있습니다 (localhost에서만 나타남).

이 예에서는 값을 0.0.0.0 으로 변경하여 모든 IPv4 인터페이스에서 수신하도록 MySQL 서버를 설정 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

skip-networking 포함하는 행이 있으면 해당 행의 시작 부분에 # 을 추가하여 삭제하거나 주석 처리하십시오.

MySQL 8.0 이상에서는 bind-address 지시문이 없을 수 있습니다. 이 경우에는 부분.

완료되면 MySQL 서비스를 다시 시작하여 변경 사항을 적용하십시오. sudo 권한을 가진 루트 또는 사용자 만 서비스를 다시 시작할 수 있습니다.

데비안 또는 우분투에서 MySQL 서비스를 다시 시작하려면 다음을 입력하십시오.

sudo systemctl restart mysql

CentOS와 같은 RedHat 기반 배포에서 서비스 실행을 다시 시작하십시오.

sudo systemctl restart mysqld

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

다음 단계는 원격 사용자에게 데이터베이스에 대한 액세스를 허용하는 것입니다.

다음을 입력하여 MySQL 서버에 루트 사용자로 로그인하십시오.

sudo mysql

mysql -uroot -p

MySQL 셸 내부에서 GRANT 문을 사용하여 원격 사용자에게 액세스 권한을 부여하십시오.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

어디:

  • database_name 은 사용자가 연결할 데이터베이스의 이름입니다. user_name 은 MySQL 사용자의 이름입니다. ip_address 는 사용자가 연결할 IP 주소입니다. 사용자가 모든 IP 주소에서 연결할 수있게하려면 % 를 사용하십시오. user_password 는 사용자 비밀번호입니다.

예를 들어 IP가 10.8.0.5 인 클라이언트 시스템에서 비밀번호가 my_passwd foo 라는 사용자에게 데이터베이스 dbname 에 대한 액세스 권한을 부여하려면 다음을 실행하십시오.

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

방화벽 구성

마지막 단계는 원격 시스템에서 포트 3306 (MySQL 기본 포트)의 트래픽을 허용하도록 방화벽을 구성하는 것입니다.

IP 테이블

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는 우분투의 기본 방화벽 도구입니다. 인터넷의 모든 IP 주소 (매우 안전하지 않은)에서 액세스를 허용하려면 다음을 실행하십시오.

sudo ufw allow 3306/tcp

특정 IP 주소에서의 액세스를 허용하십시오.

sudo ufw allow from 10.8.0.5 to any port 3306

방화벽

FirewallD는 CentOS의 기본 방화벽 관리 도구입니다. 인터넷의 모든 IP 주소 (매우 안전하지 않은)에서 액세스를 허용하려면 다음을 수행하십시오.

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

특정 포트의 특정 IP 주소에서 액세스 할 수 있도록 새 FirewallD 영역을 만들거나 풍부한 규칙을 사용할 수 있습니다. mysqlzone 이라는 새 영역을 mysqlzone .

sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

변경 사항 확인

원격 사용자가 MySQL 서버에 연결할 수 있는지 확인하려면 다음 명령을 실행하십시오.

mysql -u user_name -h mysql_server_ip -p

여기서 user_name 은 액세스 권한을 부여한 사용자 이름이고 mysql_server_ip 는 MySQL 서버가 실행되는 호스트의 IP 주소입니다.

모든 것이 올바르게 설정되면 원격 MySQL 서버에 로그인 할 수 있습니다.

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 서버에 대한 원격 연결을 허용하려면 다음 단계를 수행해야합니다.

  1. 모든 또는 특정 인터페이스에서 수신하도록 MySQL 서버를 구성합니다. 원격 사용자에게 액세스 권한을 부여합니다. 방화벽에서 MySQL 포트를 엽니 다.
MySQL MariaDB