Asked Mar 19th, 3:07 AM 149 0 4
  • 149 0 4
0

Database connection successful but Unknown database in migrate

Share
  • 149 0 4

Em test kết nối database connection successful . Nhưng khi chạy migrate nó lại không hiểu tên của database đấy . Cổng 3306 bị trùng nên đổi sang 3360 , em test php thuần thì kết nối được đến db thành công nhưng khi chạy migrate ra lỗi Unknown database .
Đây là file .env của em .

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3360
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=1
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3360'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            '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'),
            ]) : [],
        ],
Dao Thai Son @dao.thai.son
Mar 19th, 3:08 AM

Bạn bổ sung thêm file .env nữa đi

0
| Reply
Share

4 ANSWERS


Answered Mar 19th, 3:22 AM
Accepted
+2

Bạn thử chạy mysql và show databases xem có db nào tên laravel chưa?

mysql -uroot -p
>> show databases;

Nếu chưa có bạn tạo một db mới tên laravel nhé

CREATE DATABASE db_name;
Share
Mar 19th, 7:42 AM

Cảm ơn bạn nhé mình đã làm được rồi . Bạn có thể giải thích cho thêm về mysql -uroot -p được không

+1
| Reply
Share
Hải Hà @HaiHaChan
Mar 19th, 8:30 AM

@trunk

mysql -u <user> -p

Đây chỉ đơn giản là command để login mysql bằng terminal thôi mà. Trong đó

  • -u là option cho user, thường thì dùng quyền của root cho đơn giản
  • option -p là có sử dụng password

Bạn xem thêm ở đây nhé: http://g2pc1.bu.edu/~qzpeng/manual/MySQL Commands.htm

0
| Reply
Share
Mar 19th, 8:33 AM

@HaiHaChan Vậy nó có liên quan gì đến mysql trên phpmyadmin k vậy ạ . Tại nãy mình tạo database xong k thấy ở phpmyadmin . Trước giờ mình cứ test trên phpmyadmin nên mới nó mới báo lỗi

0
| Reply
Share
Hải Hà @HaiHaChan
Mar 19th, 9:16 AM

@trunk phpmyadmin hỗ trợ giao diện thay vì dùng terminal thôi mà bạn

0
| Reply
Share
Mar 19th, 9:20 AM

@HaiHaChan Hóa ra là mình test thì test ở webserver apache của xampp . Hóa ra migrate nó chạy ở bên mysql của local.@HaiHaChan

+1
| Reply
Share
Answered Mar 19th, 3:11 AM
+1

Có thể bạn đang gặp các trường hợp:

  1. Bạn chưa tạo database đấy. bạn thử tạo lại database xem sao.

  2. Bạn sửa tên db trong .env nhưng chưa clear cache -> bạn thử chạy

php artisan config:clear
Share
Mar 19th, 3:15 AM

Em tạo db đấy rồi , test kết nối thành công rồi ạ . Nhưng k chạy được migrate

0
| Reply
Share
Phạm Tuấn Anh @phamtuananh760
Mar 19th, 3:47 AM

@trunk Bạn thử restart server xem. có thể bạn set tên db trong khi server đang chạy

0
| Reply
Share
Answered Mar 19th, 6:19 AM
+1

đổi DB_HOST trong .env sang mysql đi bạn ơi

DB_HOST=mysql

Share
Mar 19th, 6:20 AM

Cũng hổng được luôn à

0
| Reply
Share
Mar 19th, 6:25 AM

Cổng 3306 bị trùng ra sao? bình thường bạn có thể để nguyên port 3306 và tạo nhiều DB mà tại sao lại phải đổi? thử dùng cái này xem sao

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3360'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],
0
| Reply
Share
Mar 19th, 6:38 AM

Mình cài xampp trên ubuntu nó bị trùng cổng 3306 k chạy nên mình đổi sang 3360 . Project khác thì k chạy migrate vẫn dùng đc . Sang đến laravel này thì không chạy được . Dùng cả

    try {
        DB::connection()->getPdo();
        if(DB::connection()->getDatabaseName()){
            echo "Yes! Successfully connected to the DB: " . DB::connection()->getDatabaseName();
            die;
        }else{
            die("Could not find the database. Please check your configuration.");
        }
    } catch (\Exception $e) {
        die($e->GetMessage());
    }
});

Vẫn kết nối thành công nhưng lại k migrate đc

0
| Reply
Share
Mar 19th, 6:59 AM

Chờ chút mình cài xampp tét xem sao. Mình cũng dùng Ubuntu. Bạn dùng Ubuntu sao ko chuyển dùng Docker cho tiện.

0
| Reply
Share
Mar 19th, 7:01 AM

Docker cũng lỗi cổng chắc giờ cài lại ubuntu cho nhanh 😦(

0
| Reply
Share
Mar 19th, 7:51 AM

mình vừa cài xampp trên ubuntu thử, một phát ăn luôn mà ko hiểu sao bạn ko dc nhỉ.
Khi bạn mở laravel site trên trình duyệt thì nó báo lỗi gì ko?
Lúc nẫy mình có chỉ bạn đổi DB_HOST=mysql, cái này ko đúng, dùng cho docker nhé.
Bạn đổi lại DB_HOST=localhost giúp mình.
Thử tắt mysql trên local xem sao:
sudo service mysql stop
sau đó đổi lại xampp config mysql port về 3306 với laravel app mysql về 3306 xem sao
Mà khuyên thật bạn chuyển dùng Docker cho đỡ dính conflict. xampp dù gì nó cũng chạy thẳng trên local nên kiểu gì cũng ko phải đầu lại phải tai với các service khác cài trên local.
show cho cái ảnh cho trực quan.
Screenshot from 2020-03-19 16-57-07.png

0
| Reply
Share
Mar 19th, 8:27 AM

@Aki mình tìm ra rồi phải tạo database ở mysql -uroot -p . Mỗi tội mysql -uroot -p nó lại k liên quan đến mysql server của mình nên giờ mở db ra kiểu gì . Mà cái docker mình cũng lỗi nhưng chắc để hôm khác lên hỏi sau

0
| Reply
Share
Mar 19th, 8:51 AM

đây có nghĩa là bạn đang chạy webserver apache của xampp nhưng lại dùng mysql của local (kiểu râu ông nọ cắm cằm bà kia ấy).
Nếu muốn xem DB thì tải MySQL Workbench về cài zô.
sau đó tạo connect tới port 3360 là xem dc
Screenshot from 2020-03-19 17-45-16.png

0
| Reply
Share
May 11th, 6:38 AM

@Aki mình sang cài docker cũng bị lỗi tương tự là k biết migrate nó chạy vào đâu , lần này k cài mysql command từ đầu nữa mà vẫn bị .

0
| Reply
Share
May 18th, 6:09 AM

bạn có dùng docker compose ko? vì port 3306 mặc định của local mysql nên nếu ko đổi sang port khác thì nó sẽ ko chạy dc đâu. Docker compose file kiểu như vầy

version: '3'
services:
  ubuntusv:
    container_name: ubuntusv
    build: ./server
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./www:/var/www"
    tty: true
    links:
      - mysql
  mysql:
    container_name: mysql-ubuntu
    image: mysql:5.7
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --init-connect="SET NAMES utf8" --innodb_file_per_table=1 --innodb_file_format=BARRACUDA
    environment:
      MYSQL_ROOT_PASSWORD: password bạn muốn đặt
    ports:
      - "port bạn muốn đặt:3306"

Cái port trước dấu hai chấm của mysql bạn muốn đổi thành gì cũng dc, miễn là ko phải 3306. Thông thường để dễ nhớ thường đặt kiểu 13306 chả hạn. Ở Laravel .env thì config cái đoạn Database như sau:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=tên database của bạn
DB_USERNAME=tên đăng nhập mysql (nếu ko có thiết lập gì thì thường là root)
DB_PASSWORD=pasword đăng nhập mysql. Thuông thường nếu bạn dùng docker compose để cài đặt develop enviroment thì cái pass này chính là pass ở chỗ MYSQL_ROOT_PASWORD trong docker compose file

Và nhớ là làm như mình hướng dẫn ở phía trên, dùng MySQL workbench để tạo 1 MySQL connection với port mà bạn đã thiết lập ở Docker compose file.
Sau đó tạo 1 database với tên là tên bạn đã thiết lập ở .env file.

Hoặc bạn có thể post file Docker, file .env của laravel lên đây để mình check giúp bạn

0
| Reply
Share
Answered Mar 19th, 3:16 AM
0

Mình nghĩ có thể có do config trong .env, bạn thử show lên đây được không (dùng markdown nhé)

```ten-ngon-ngu

<code>

```

Hoặc bạn thử lên phpmyadmin tạo 1 db với tên như bạn đã config rồi chạy migrate xem, do local của bạn chưa có db đấy nên ko chạy đc migrate

Share