programing

PyMySQL이 로컬 호스트의 MySQL에 연결할 수 없음

linuxpc 2023. 9. 8. 21:13
반응형

PyMySQL이 로컬 호스트의 MySQL에 연결할 수 없음

PyMy를 사용하여 로컬 호스트의 MySQL에 연결하려고 합니다.SQL:

import pymysql
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')

(Python 2.7과 Python 3.2 둘 다) 오류가 발생합니다.

socket.error: [Errno 111] 연결이 거부되었습니다.

pymysql.err.작동 오류: (2003, "'localhost'(111)의 MySQL 서버에 연결할 수 없습니다.)

명령이나 phpMyAdmin을 사용하여 연결할 수 있기 때문에 내 sqld가 실행되고 있다고 확신합니다.또한 거의 동일한 코드로 파이썬 2에서 MySQLdb를 사용하여 연결할 수 있습니다.

import MySQLdb
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost')

파이마이에 문제가 있는 것 같습니다.MySQL보다는 SQL 쪽인데 어떻게 해결해야 할지 모르겠어요.

두 가지 추측:

  1. 달려.mysqladmin variables | grep socket소켓이 있는 위치에 도달하고 다음과 같이 연결을 설정합니다.

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
    
  2. 달려.mysqladmin variables | grep port포트가 3306인지 확인합니다.그렇지 않은 경우 다음과 같이 포트를 수동으로 설정할 수 있습니다.

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX)
    

변화하는 것 같습니다.localhost로.127.0.0.1최소한 내 환경설정에서 오류를 수정합니다.만약 그렇지 않다면, 저는 오류를 찾을 것입니다.tcp sockets connection그리고 물론, 그것을 버그로 게시합니다.pymysql버그 트랙

대체하여 문제를 해결하였습니다.localhost와 함께127.0.0.1암호를 아래와 같이 내 MYSQL 데이터베이스 암호로 변경합니다.

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    passwd = 'XXXXXXXXX',
    db = 'mysql'
)

저는 같은 질문을 받았고 저의 해결책은 다음과 같습니다.

  1. 달려.ssh -fN -L 3307:mysql_host:3306 ssh_user@ssh_host내 터미널에서
  2. 그런 다음 ssh 비밀번호를 입력합니다.
  3. conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost')

데이터베이스가 링크를 직접 지원하지 않기 때문에 이 오류가 발생합니다.

소켓은 왜 작동하는지 TCP는 안되는지 물었더니 답이 왔습니다.bind-address인에/etc/my.cnf올바르게 설정되지 않았습니다.소켓 메소드는 정상적으로 작동하지만 TCP 메소드는 그렇지 않기 때문에 이것 또한 당신의 문제가 될 수 있습니다.

도커라이즈드 플라스크-sqalchemy에서 로컬 호스트 MySQL을 연결하려고 하거나 pymysql을 사용하는 분들은 이 스레드를 조사해 보세요. 매우 유용합니다. 로컬 호스트 MySQL 데이터베이스를 도커 컨테이너와 연결하는 방법

효과가 있었습니다.

import pymysql

db = pymysql.connect(host="localhost",port=8889,user="root",passwd="root")
cursor=db.cursor()
cursor.execute("SHOW DATABASES")
results=cursor.fetchall()
for result in results:
    print (result)

포트 #를 찾으려면 터미널의 mysql로 이동하고 다음을 입력합니다.

SHOW VARIABLES WHERE Variable_name = 'hostname';
SHOW VARIABLES WHERE Variable_name = 'port';

AWS에서도 이와 같은 문제가 발생했습니다. 보안 그룹이 연결을 차단하고 있었습니다.일시적으로 모든 연결과 부일라를 열었어요!연결됐어요!

연결을 차단할 수 있는 FW 또는 호스트 기반 FW 유형이 있습니까?내 암호인 줄 알았는데 다 잘 됐어요.연결 중인 포트도 확인합니다.

도커를 사용하는 경우 다음을 사용해야 할 수 있습니다.host.docker.internal에 대신에localhost.

저는 이렇게 견적 없이 포트를 사용하여 문제를 해결할 수 있었습니다.

port = 3306,

포트도 연결에 추가해야 합니다.이것을 시도해 보면 효과가요.

pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name")

언급URL : https://stackoverflow.com/questions/6885164/pymysql-cant-connect-to-mysql-on-localhost

반응형