MySQL연동 하는 부분으로 들어가며 4일 동안 개고생했던 에러가 생겼는데
Error 1045: Access denied for user 'root'@'localhost' (using password: YES)
위의 에러였다.
내 MySQL을 연동하는 부분이
func NewHandler() (HandlerInterface, error) {
db, err := dblayer.NewORM("mysql", "root:123456@/gomusic")
if err != nil {
return nil, err
}
return &Handler{
db: db,
}, nil
}
이 부분이였는데 형식에 맞게 썼음에도 자꾸 저 에러를 벹어내는 것이 였다.
그렇다고 mysql에 접속이 안되는 것도 아니였고,
root라는 계정과 localhost 주소가 틀린것도 아니였다.
그래서 커뮤니티에 물어 봤는데 여러가지 답변이 나왔다.
1. db가 local에 있는 서버가 아니라면 외부접속 허용이 되어있는지 확인 해봐야 할 거 같습니다.
2. mysql.Open을 사용한게 아니면 프로토콜에 정의해주셔아 되는데 그게 안되어 있는것 같은데
여기 확인해 보시겠나요?
3. 인스톨 시에 설정한 root 패스워드면 아마 로그인 후에 다시 패스워드를 재설정해야 할 겁니다. 초기설정 패스워드로 로그인 한 root는 사용가능한 명령어가 거의 없어요.. 화면에 로그인은 되지만, DDL로 테이블을 만들거나 하는 명령어가 실행이 안 될 겁니다.
였다.
1번의 경우 내가 외부에 DB를 올려놓고 쓰는게 아니기 때문에 확인할 필요가 없었다.
2번의 경우 책 안에 있는 소스가 mysql.Open를 쓰는게 아니였기 때문에 gorm.io/docs/connecting_to_the_database.html?fbclid=IwAR0U7FfbzgWDPpIJNZTNuxGiz-W94t54pO3_vHh0oRF7XI4BmPCzWKCjLZo
에서 기가 막힌 삽질을 하기 시작했다.
어떻게 바꾸든 에러명은 똑같았다.
Error 1045: Access denied for user 'root'@'localhost' (using password: YES)
여기서 나는 코드를 수정했는데 왜 오류가 같은지에 대해 의문을 갖기 시작했다.
그래서 코드의 흐름을 살펴봤는데
main함수에는 딱 저거 뿐이다. 그래서
func main() {
log.Println("Main log....")
log.Println(rest.RunAPI("localhost:8000"))
}
RunAPI를 타고 들어가보니
func RunAPI(address string) error {
h, err := NewHandler()
if err != nil {
return err
}
return RunAPIWithHandler(address, h)
}
이렇게 되어 있었고, 저 두 함수를 타고 가니
func NewHandler() (HandlerInterface, error) {
return NewHandlerWithParams("mysql", "root:123456@tcp(localhost:3306)/gomusic")
}
func NewHandlerWithParams(dbtype, conn string) (HandlerInterface, error) {
db, err := dblayer.NewORM(dbtype, conn)
if err != nil {
return nil, err
}
return &Handler{
db: db,
}, nil
}
이렇게 되어 있었다. 왠지 타고 들어간 순으로 프로그램이 실행되는 거 같았고
DB연결 부분에서 문제가 있는 거 같았다.
그 후 3번째 의견을 따라 비밀번호를 변경해보기로 했다. 내가 MySQL을 설치한지가 오래 되었기 때문에 Install 했을 때 비밀번호 였었는지 아니였었는지 가물가물했다.
비밀번호를 변경한 과정은 다음과 같다.
1. root 유저로 MySQL에 접속한다.
mysql -u root
2. mysql 데이터베이스를 사용한다.
비밀번호를 설정하는 데이터베이스는 mysql 이므로 이 데이터베이스로 이동한다.
USE mysql;
3. root 유저 비밀번호를 NULL로 변경한다.
비밀번호를 NULL로 변경하는 이유는 MySQL 서버를 정상적으로 다시 실행했을 때(승인 생략 옵션 없이) 비밀번호 없이 바로 접속하기 위함이다.
비밀번호를 설정하면 위에서 살펴본 것처럼 해쉬화를 하지 않으므로 오류가 뜬다.
--skip-grant-tables와 같이 승인 생략 옵션을 통해 MySQL을 실행하면 ALTER 명령어를 사용할 수 없는 명령어라는 오류로 인해 비밀번호를 변경할 수 없다.
UPDATE user SET authentication_string=null WHERE User='root';
4. 변경된 권한을 설정한다.
FLUSH PRIVILEGES;
5. MySQL을 나간다.
EXIT
6. MySQL에 다시 접속한다.
비밀번호가 설정되어 있지 않으므로 둘 중 아무거나 상관없이 접속할 수 있다.
mysql -u root mysql -u root -p
7. 비밀번호를 변경한다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'root';
그 후 코드를 다음과 같이 바꿔주었다.
func NewHandler() (HandlerInterface, error) {
return NewHandlerWithParams("mysql", "root:'root'@tcp(localhost:3306)/gomusic")
}
이 부분 만 수정해 주었다.
그 후 실행을 했더니 정상적으로 동작하게 되었다 ㅠㅠㅠㅠㅠㅠ
'이것저것 > 일상' 카테고리의 다른 글
[바미] 갤럭시 워치 도착!! (언박싱) (0) | 2021.05.07 |
---|---|
[바미] 드디어 질러보는 갤럭시 워치ㅎ.ㅎ (0) | 2021.05.04 |
[바미] Golang Korea 사은품 당첨! (0) | 2021.04.16 |
[바미] 군침이 싹~ 도는 영상으로 짧고 강하게 웃겨 드립니다. 루피 군침이 싹도노 (0) | 2021.01.30 |
[바미] 오픈 프로필 등록 방법 (0) | 2021.01.18 |