Database connection successful but Unknown database in migrate
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'),
]) : [],
],
4 CÂU TRẢ LỜI
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;
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
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
@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
@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
Có thể bạn đang gặp các trường hợp:
-
Bạn chưa tạo database đấy. bạn thử tạo lại database xem sao.
-
Bạn sửa tên db trong .env nhưng chưa clear cache -> bạn thử chạy
php artisan config:clear
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
@trunk Bạn thử restart server xem. có thể bạn set tên db trong khi server đang chạy
Cũng hổng được luôn à
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,
],
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
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.
Docker cũng lỗi cổng chắc giờ cài lại ubuntu cho nhanh (
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.
@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
đâ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
@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ị .
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
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
Nhở hỗ trợ lỗi này khi chạy file: Warning: mysqli_connect(): (HY000/1049): Unknown database 'db_qllct' in C:\xampp\htdocs\QLLCT\connect\connectdb.php on line 3 Kết nối không thành côngUnknown database 'db_qllct'
Bạn bổ sung thêm file
.env
nữa đi