본문 바로가기

카테고리 없음

windows 환경에서 python mysql 접속문제 해결

이번 경우는 아래의 코드처럼 pandas의 DataFrame객체를 mysql db에 삽입하는 과정에서 발생한 에러였다.

engine = create_engine('mysql+mysqlconnector://'+MYSQL_USER+':'+MYSQL_PASSWORD+'@'+MYSQL_HOST_IP+':'+MYSQL_PORT+'/'+MYSQL_DATABASE, echo=False)
df = pd.read_csv("./test.csv")
with engine.connect() as conn, conn.begin():
    df.to_sql('Table1', conn, if_exists='replace')

에러 내용은 개략적으로 아래와 같다. 

MySQLdb._exceptions.OperationalError: (2059, <NULL>)

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2059, <NULL>)

위와 같은 형태로 나타나는 에러의 본질적인 문제는 같다. 에러가 어디서 발생했는지 에러 스택을 출력하다보니 이렇게 사람에 따라 다른 부분을 볼 수 있어서 검색의 용이성을 위해 둘다 가져다 놓았다.

Windows에서 mysql을 기본 설정으로 설치하다보면 암호 저장의 보안을 강화하는 옵션으로 설치하게 된다. 이 부분의 변경이 필요하다.

MySQL Command Line Client을 실행한 후 다음의 명령어를 입력해보자.

1
2
use mysql;
select user,host,plugin from user;

 

위 명령어를 입력하게 되면 다음과 같은 방식으로 계정이 생성된 것을 확인할 수 있다.

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

여기서 바로 'caching_sha2_password'이라는 sha암호화가 문제의 근원이다.

이 부분을 해결하기 위해서는 암호화없는 일반적인 형태로 계정 속성을 변경해야 한다. 마찬가지로 MySQL Command Line Client 에서 아래 명령어를 수행해주자.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword'

이제 다시 입력해보면 

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+

위와 같이 변경된 것을 확인할 수 있다.

이 상태로 기존의 파이썬 코드를 재실행시키면 정상 동작 한다. 별 것 아닌 '다음' 버튼 클릭 하나가 또 한번 애를 먹였다. 젠장할.

출처: https://gentlesark.tistory.com/85?category=870367 [삵 izz well:티스토리]