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 쪽인데 어떻게 해결해야 할지 모르겠어요.
두 가지 추측:
달려.
mysqladmin variables | grep socket
소켓이 있는 위치에 도달하고 다음과 같이 연결을 설정합니다.pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock")
달려.
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'
)
저는 같은 질문을 받았고 저의 해결책은 다음과 같습니다.
- 달려.
ssh -fN -L 3307:mysql_host:3306 ssh_user@ssh_host
내 터미널에서 - 그런 다음 ssh 비밀번호를 입력합니다.
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
'programing' 카테고리의 다른 글
상대 레이아웃에서 버튼의 layout_align_parent_right 속성을 프로그래밍적으로 설정하는 방법은 무엇입니까? (0) | 2023.09.08 |
---|---|
파이썬에서 메모리 뷰의 포인트는 정확히 무엇입니까? (0) | 2023.09.08 |
2002 Bitnami's WordPress Multi-tier 스택에서 MariaDB 데이터베이스 가져오기/내보내기 시도 시 코드 오류 발생 (0) | 2023.09.08 |
다중 행 텍스트에 타원 적용 (0) | 2023.09.08 |
ORA-01219: 데이터베이스가 열리지 않음: 고정 테이블/뷰에서만 쿼리가 허용됨 (0) | 2023.09.08 |