Error기록 노트/PHP | Laravel

php artisan migrate 오류 : 1049 에러 / SQLSTATE[HY000] [1049] Unknown database 'root' (SQL: select * from information_schema.tables where table_schema = root and table_name = migrations and table_type = 'BASE TABLE')

에러노트 2022. 12. 5. 19:26

php artisan migrate 쓸 때마다 다양한 종류의 에러를 만나는 중입니다ㅋㅋㅋㅋㅋ

이번 1049에러의 경우, 초반에 설치 후 셋팅이 안잡혔을 경우에 나오는 에러입니다. 초반에 MySQL 설치 및 설정 후 그에 맞게 .env와 config/database.php의 기본 셋팅 값을 수정해주어야 합니다.

MySQL을 깔고 서치를 통해 기본 셋팅까진 다들 잘 따라하지만, 여기서 저를 포함해 많은 분들이 헷갈리는 부분이 있어 세세하게 정리해보았습니다.

우선 2가지 파일을 손보기 전에 위치를 한번 정리해서 알려드리겠습니다. 저처럼 VS Code를 사용하시는 분들은 상단 검색창에 바로 파일명을 검색하시면 되지만, 그렇지 않은 경우엔 폴더 위치를 통해 찾은 후 편집을 위해 관리자 권한으로 실행하시기 바랍니다.(특히 윈도우의 경우엔 꼭 관리자 권한으로 실행하셔야 합니다!!)

 

1. .env 파일 위치 및 수정사항

/Users/kimjeewoo/example-app/.env

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:ZrQeg2G7tGKbE138nZtVhC26IGh32/DcbiOfW/svcsE=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db //show datebases;목록 중 새로 만든 database명
DB_USERNAME=root       // MySQL 접속 시 mysql -u ____ -p 의 ____부분
DB_PASSWORD=          // MySQL 접속 시 비밀번호(없다면 그대로 넘어가기)

수정할 부분은 주석을 달아둔 부분입니다. 저는  처음에 DB_database 부분에 무얼 넣어야할지 몰라 헤매고 있었는데요.

알고보니 Mysql에서 아래 내용을 조회하였을 때 나오는 이름들이 바로 저기 들어갈 이름이더라구요.

mysql> show databases;

설치 후 새로 생성하지 않았다면  4개의 기본 datebases만 조회될 것 입니다.(기본 데이터 중 연습용을 두지 않는다고 하였다면 더 적을 수 있습니다. 문제가 되진 않으니 걱정하지 않으셔도 됩니다.)

저는 laravel_db를 생성하여 해당 database에 연결하였습니다.

데이터베이스를 생성하는 구문은 다음과 같으니, 새로 생성한 뒤 .env와 databases.php에 입력하시기 바랍니다.

mysql> CREATE DATABASE laravel_db; //laravel_db부분을 원하는 이름으로 작성하여 생성 후
mysql> commit; //db에서 commit은 습관적으로 하시길 추천드립니다.

2. config/database.php 파일 위치 및 수정사항

/Users/kimjeewoo/example-app/config/database.php

'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_db'), //위에서와 마찬가지로
            'username' => env('DB_USERNAME', 'root'),       //설정했던 대로
            'password' => env('DB_PASSWORD', ''),          //수정하시면 됩니다.
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

1 ,2번 모두 설정을 하였다면 저장해줍니다.

본인이 만든 라라벨 프로젝트 폴더 위치에서 우클릭하여 터미널 또는 파워셀을 켜줍니다. (맥북을 쓰고 있어 저는 앞부분이 %로 있지만 window나 터미널이 아닌 경우 등 환경에 따라 ~/~/~$의 형태로 경로값일 수 있습니다.)

vs code를 사용하는 경우 shift + control(mac은 ⌘) + P를 통해 위치를 찾거나, 새창을 열어 왼쪽 상단의 [폴더 열기]를 통해 해당 위치의 폴더를 열어준 후 우클릭>터미널을 열어줍니다.

저는 laravel프로젝트 명이 아래와 같이 "example-app"으로 설정되어 있습니다.

위치를 잘 찾으셨다면, 아래 문장을 순서대로 한 줄씩 입력합니다.

error-note-MacBookPro example-app% php artisan cache:clear   //캐시 삭제
error-note-MacBookPro example-app% php artisan config:clear  //config한번 정리해주고
error-note-MacBookPro example-app% php artisan migrate       //대망의 migrate 실행!

 

이 방법을 사용했음에도 에러의 번호가 여전히 1045라면 작성을 잘못하셨을 확률이 60%, localhost 설정 문제일 확률이 20%, 다른 번호의 에러로 발생했을 확률이 20% 입니다.

저는 localhost를 늘 기본값으로 셋팅해두어서 tomcat외에는 다 문제된 적이 없어서 해당 예시는 없지만, 기본값이 아닌 다른 값으로 셋팅하시어 충돌이 피하시거나 port번호가 중복되어 있진 않은지 확인해보시길 추천드립니다.

혹시 에러에 php version 관련하여 이야기가 나온다면 php버전이 laravel 배포 기준에 적합한지 확인해보시기 바랍니다.

$ php artisan -v

laravael 버전에 따라 php 버전도 최소 기준이 있기 때문에 배포기준에 맞지 않아 문제가 생겼을 수 있습니다.

 

여기까지 제가 만났던 migrate 에러에 관한 해결방법을 안내드렸습니다.

에러 번호만 다르고 하루종일 db를 만지는 경우도 있다보니 저처럼 곤혹을 치르지 않으시길 바라며 올려봅니다😂

오늘도 읽어주셔서 감사합니다!