인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김형님의 프로필 이미지
김형

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

mysql 데이터베이스 연결 안되는 문제 Unable to connect to the database

해결된 질문

작성

·

3.3K

3

yarn start:dev 실행 하고 나면 아래와 같이 나오면서 에러가 뜨고 있어요

 

ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...

아래 코드도 정상적으로 기입 했는데, 계속 접속 오류로 연결이 되지가 않습니다.

import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
import { TypeOrmModule } from '@nestjs/typeorm'
import { BoardsModule } from './apis/boards/boards.module'
import { Board } from './apis/boards/entities/board.entity'

@Module({
  imports: [
    BoardsModule,
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'src/commons/graphql/schema.gql',
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'test1234',
      database: 'myproject03',
      entities: [Board],
      synchronize: true,
      logging: true,
    }),
  ],
  // controllers: [AppController],
  // providers: [AppService],
})
export class AppModule {}

 

현재 brew 확인시 Mysql 서버도 정상적으로 켜져 있는것을 확인 할 수 있어요

디비버에서도myproject03 이라고 정확하게 만들었습니다.

선생님의 강의하고 다른부분을 못 찾았는데,

데이터 베이스가 연결이 안될 때는 어느부분을 더 점검 해 봐야 할지요?

 

 

 

 

 

답변 2

4

김형님의 프로필 이미지
김형
질문자

자체 셀프 해결 방법

호스트 부분을 로컬호스트에서 127.로 시작하는 숫자로 변경 했더니 정상동작하네요.

보통 127.0.0.1 써서 오류나는 글들이 대부분이라 로컬을 숫자로 변경해야겠다는 생각을 전혀 하지 못했었는데, 혹시나 하고 바꿔봤더니 정상 작동되었습니다.

숫자로 실행했더니 된다는 것은 많이 당황스러운 부분인데, 이해는 전혀 안되는데 일단 실행은 되었습니다..

host: 'localhost' > host: '127.0.0.1'

저도 해당 문제 발생했었는데,

저기 위에 에러났을 때 메세지 보면

Error: connect ECONNREFUSED ::1:3306

해당 부분이 있어요. 이 부분에서 ::1는 IPv6의 localhost를 의미한다고 합니다(정확하진 않아요).

localhost가 ::1에 매핑 되어있어서 그런다고 합니다.

우리는 IPv4를 사용해야하는데 mysql 설정에 localhost가 ::1에 매핑되어 있을 가능성이 있습니다.

mysql 설정 파일 찾는 방법은

cd / <- 루트 디렉터리로 이동한 뒤에
find . -name 'my.cnf' <- mysql 설정 파일을 찾아야되여
찾다보면 mysql/.../my.cnf를 나타내는 경로가 나오는데
(
제 기준(2020 intel mac)
  /usr/local/etc/my.cnf
  /usr/local/Cellar/mysql/8.0.31/.bottle/etc/my.cnf
  둘 중에 하나인데 잘 기억은 안나네요..
)
여기 들어가서 확인해보면 아마 ::1로 바인딩 되어있을 확률이 있습니다.
김형님의 프로필 이미지
김형
질문자

힌트가 될만한 좋은 정보를 주셔서 감사드려요

위 안내주신 경로 들어가보니 제 기준으로는

아래와 같이 나와서 ::1 이런부분은 찾을 수 없었지만

127.0.0.1 / 이런식으로 되어 있는 것으로 보아 숫자로 인식이 되었던거 같아요

# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1

풀리지 않았던 부분에 있어서 더 깊이 있는 생각을 할 수 있게 안내 주셔서 다시한번 감사드려요!

 

혹시라도 나중에 같은 에러가 나시는 분들을 위해 남깁니다.

제가 어제 포맷하고 다시 찾아보니 my.cnf파일이 아니라 hosts파일이었습니다.

기존 리눅스는 /etc/hosts로 경로가 설정되어있지만 혹시라도 맥에서 변경하실 분들은 한 번 찾아 보시는 것도 좋아보입니다.

find / -name hosts 2>/dev/null

저는 /private/etc/hosts에 존재했습니다.

거기서 맨 아래 ::1로 되어있는 부분을 주석 처리 하면 됩니다.

https://superuser.com/questions/744972/connecting-to-mysql-from-127-0-0-1-instead-of-from-localhost

김형님의 프로필 이미지
김형
질문자

감사합니다! 참고 할께요 ㅎ

2

저도 동일한 이슈를 겪었으며 해당 질문에서 힌트를 얻어 짧게나마 설명을 덧붙인 제 경험을 공유하고 싶습니다.
같은 이슈를 겪은 다른 분들도 본 글을 통해 에러를 해결하셨으면 좋겠습니다 :)

https://dnyou.tistory.com/3

김형님의 프로필 이미지
김형

작성한 질문수

질문하기