Unbuntu 20.04 서버에서 MySQL에 대한 원격 액세스를 허용하려면 어떻게 해야 합니까?

Unbuntu 20.04 서버에서 MySQL에 대한 원격 액세스를 허용하려면 어떻게 해야 합니까?

allstudentsAnswers20BE 테이블에서 학생들의 숙제와 온라인 수업 점수를 수집하는 작은 Python 스크립트가 있습니다.

이것은 나의 오래된 공유 웹 호스팅 웹페이지에서 훌륭하게 작동합니다.

새로운 Ubuntu 20.04 클라우드 서버에서 연결이 거부되었습니다. 저는 클라우드 서버를 운영해 본 경험이 없습니다.

UFW에서 포트 33060 및 3306을 허용했습니다.

집에 있는 IP는 고정되어 있지 않습니다.

Python 스크립트를 실행할 때 클라우드 서버에 연결하려고 하면 이 오류가 발생합니다.

pymysql.err.OperationalError: (1130, "183.206.16.30'은 이 MySQL 서버에 연결할 수 없습니다.")

netstat에서는 mysqld가 33060 및 3306을 수신하고 있다고 말하므로 방화벽 ufw에서 둘 다 허용했습니다.

SSH를 통해 클라우드 서버에 연결하여 다음을 실행했습니다.

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

라인 바인드 주소를 0.0.0.0으로 변경했습니다(*도 시도했습니다)

mysql을 다시 시작했습니다: sudo systemctl restart mysql

서버 측에서 설정이 필요한 다른 것이 있어야 합니다.

어떤 조언이라도 부탁드립니다. 이것이 작동하려면 정말 필요합니다.

다음 정보도 얻었습니다(내 클라우드 IP가 123.456.789.123이라고 가정).

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
123.456.789.123 3306 포트 [tcp/mysql]에 연결에 성공했습니다! pedro@ebs-105422:~$

이것은 mysqld가 3530을 수신하고 있다는 뜻인가요?? 아니면 mysqld의 PID인가요??

pedro@ebs-105422:~$ sudo netstat -tap | grep mysql tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* LISTEN 3530/mysqld
pedro@ebs-105422:~$

아래는 서버의 mysql에서 포트 3306을 확인하는 것입니다.

mysql> ('호스트 이름','포트')의 변수 이름이 있는 변수를 표시합니다.
+---------------+------------+
| 변수명 | 가치 |
+---------------+------------+
| 호스트 이름 | ebs-105422 |
| 포트 | 3306 | +---------------+------------+
2줄 세트 (0.01초)

mysql>

답변1

나는 그것을 알아 냈습니다. 이 답변은 동일한 문제가 있는 모든 사람에게 도움을 주기 위한 것입니다. 이 방법은 아마도 그다지 안전하지 않을 것입니다. 3306이 열려 있기 때문입니다. 그러나 a) 숙제만 남았습니다. b) 여전히 사용자 이름과 비밀번호가 필요합니다.

mysql에서 사용자를 생성할 때와 서버에서 ssh를 통해 생성할 때에도 다음과 같습니다.

'password'로 식별된 'peter'@'localhost' 사용자 생성;
some_db.*에 대한 모든 권한을 'peter'@'localhost'에 부여합니다.

원격 액세스를 원할 경우 사용자 데이터를 변경하거나 새 사용자를 만들어야 합니다.

사용자 'peter'@'localhost'를 'peter'@'%'로 이름 바꾸기;
somedb.*에 'peter'@'%'에 대한 모든 권한 부여;

여기 %는 분명히 모든 IP를 나타냅니다.

그런 다음 서버의 SSH를 통해서도 다음을 수행합니다.

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

다음과 같은 줄을 찾으세요.

바인드 주소 = 127.0.0.1

이것을 다음으로 바꾸세요

바인드 주소 = 0.0.0.0

nano를 종료하려면 ctrl X nano를 저장하고 싶은지 묻고 y를 누른 다음 /etc/mysql/mysql.conf.d/mysqld.cnf를 열었던 동일한 위치에 저장하려면 Enter를 누르세요.

그런 다음 (서버에서):

sudo systemctl mysql 재시작

그 후 내 Python은 Idle 셸에서 제대로 작동했습니다.

def mysqlRemoteAttn(clas): 
    # To connect remote MySQL database 
    conn = pymysql.connect( 
        host='123.456.789.123',
        port=3306,
        user='myusername',  
        password = 'mypassword', 
        db='allstudentsdb', 
        ) 
      
    cur = conn.cursor()

    sql = f"SELECT studentnr, attn_this_week FROM allstudents{clas}"
    cur.execute(sql)
    output = cur.fetchall()           
            
    # To close the connection 
    conn.close()
    return output

# get the attendance from the webpage MySQL
results = mysqlRemoteAttn(clas)

관련 정보