어떤 이유로 서버에 대한 단순 연결을 설정할 수 없습니다. 기본 설정을 사용하여 Node.JS와 함께 최신 MySQL Community 8.0 데이터베이스를 설치했습니다.
이것은 내 node.js 코드입니다
으아악다음은 명령 프롬프트에서 발견된 오류입니다.
으아악다음과 같은 내용을 읽었습니다. https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
하지만 여전히 문제를 해결하는 방법을 잘 모르겠습니다.
요약
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
然后刷新权限
mysql2
(而不是mysql
)并使用它 -npm我 mysql2
和mysql = require('mysql2');
.무슨 일이 있었나요?
먼저 무슨 일이 일어났는지 알아내야 합니다.
MySQL 8은 플러그형 인증 방법을 지원합니다. 기본적으로
caching_sha2_password
的密码,而不是我们的旧mysql_native_password
(source)라는 이름 중 하나가 사용됩니다. 분명히 다중 핸드셰이크를 사용하는 암호화 알고리즘은 24에서 사용되는 일반 비밀번호 전달보다 더 안전합니다. 년!이제 문제는 Node 코드에서 이를 설치하고 사용하는 Node
mysqljs
(使用npm i mysql
패키지가 MySQL 8에 대한 이 새로운 기본 인증 방법을 아직 지원하지 않는다는 것입니다. 문제는 여기에 있습니다: https://github.com/mysqljs/mysql/issues/1507 a> 2019년 7월 현재, 3년이 지난 후에도 여전히 열려 있습니다.2019년 6월 업데이트: 지금 이 문제를 해결할 수 있는 새로운 PR이 mysqljs a>에 있습니다!
2020년 2월 업데이트: 분명히 mysqljs 버전 3에 포함될 예정입니다.
2020년 7월 업데이트: 아직 (적어도 2020년 4월 기준) 에는 없지만 에서는 node-mysql2이 인증 전환 요청을 지원한다고 주장합니다.
node-mysql2
이 효과가 있다면 아래에 댓글을 남겨주세요. 나중에 직접 테스트해 보겠습니다.2021년 4월 업데이트: 문제는 여전히 존재하는 것 같습니다. 불과 3일 전에 누군가가 포크를 만들어 구현했지만 아직 공식적으로 mysql.js 패키지에는 없습니다. 또한 아래 댓글을 보면 mysql2 패키지가 제대로 작동하고 인증 전환을 제대로 지원하는 것으로 보입니다.
현재 옵션
옵션 1) [권장하지 않음] 인증을 위해 이전 "mysql_native_password"를 사용하려면 "MySQL"을 다운그레이드하세요
이것은 모두가 여기에서 제안하는 것입니다(예: 위의 가장 좋은 답변). 인증하려면
으아악mysql
并运行一个查询,说明root
可以使用旧的mysql_native_password
방법만 입력하면 됩니다.좋은 소식은 삶이 더 쉬워지고 질문 없이 Sequel Pro와 같은 오래된 도구를 계속 사용할 수 있다는 것입니다. 하지만 문제는 더 안전한 것(아래를 읽어 보세요)을 활용하는 것이 아니라는 것입니다.
옵션 2) [메...] "Node" 패키지를 MySQL Connecter X DevAPI로 교체
MySQL 이것은 X 프로토콜 통신을 위한 지원 처럼 작동합니다. )
안타깝게도 우리 모두가 익숙하고 의존했던 기존
X DevAPI Tutorialcaching_sha2_password
身份验证的超级按钮。 (只需确保您使用端口33060
패키지에서 벗어났습니다. 보너스는 이제 귀하의 앱이 더 안전해지고 우리의 오랜 친구가 제공하지 않는 수많은 새로운 기능을 활용할 수 있다는 것입니다!을 확인해 보세요. 편리하게 사용할 수 있는 새롭고 멋진 기능이 많이 포함되어 있다는 것을 알게 될 것입니다. 기술 업그레이드와 함께 제공되는 학습 곡선의 대가를 지불하면 됩니다. :)
typescriptmysql
추신. 불행하게도 이 XDevAPI 패키지에는 아직 TypeScript가 이해하는 유형 정의가 없으므로를 사용하면 문제가 발생합니다. 나는 dts-gen과 dtsmake를 사용해 .d.ts를 생성했지만 성공하지 못했습니다. 그러니 이 점을 명심하시기 바랍니다.
옵션 3) [권장] "mysql.js"를 "mysql2.js" 패키지로 교체
위에서 언급했듯이 mysql 패키지(NPM 패키지 링크)에는 여전히 이 문제가 발생합니다(2021년 4월 기준). 하지만 mysql2 패키지(NPM 패키지 링크)는 그렇지 않습니다. 따라서 다음은 아마도 쉬운 대답이 될 것입니다!
으아아아참고,
mysql2
是流行的mysql
的一个分支,但它的受欢迎程度(4 月份mysql2
每周下载量为 62 万次) 2020 年)已接近原始软件包(2021 年 4 月mysql
주당 720K 다운로드), 전환하는 것이 합리적으로 보입니다!MYSQL Workbench에서 다음 쿼리를 실행하세요
更改用户 'root'@'localhost' 通过 mysql_native_password BY 'password' 进行识别;
어디
root
사용자가 있나요?localhost
귀하의 URL로 그리고password
비밀번호그런 다음 다음 쿼리를 실행하여 권한을 새로 고칩니다.
刷新权限;
이 작업을 수행한 후 node를 사용하여 연결을 시도합니다.
이 방법이 작동하지 않으면
@'localhost'
부분 없이 시도해 보세요.