2017-03-17 18 views
8

Goal

cục bộ trên tôi Mac OS, tôi đang cố gắng để kết nối với cơ sở dữ liệu dàn tôi đang chạy và lưu trữ trên Ubuntu VM của tôi.Connect để dàn dựng cơ sở dữ liệu từ một môi trường địa phương - Laravel 5


bước

Trong tôi config/database.php

'connections' => [ 

    'mysql'  => [ 
    'driver'  => 'mysql', 
    'host'  => env('DB_HOST'), 
    'database' => env('DB_DATABASE'), 
    'username' => env('DB_USERNAME'), 
    'password' => env('DB_PASSWORD'), 
    'unix_socket' => env('UNIX_SOCKET'), <---- Need it here 
    'charset'  => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix'  => '', 
    'strict'  => false, 
    ] 

], 

Trong .env của tôi, tôi có

DB_HOST=45.55.88.88 
DB_DATABASE=staging 
DB_USERNAME=john 
DB_PASSWORD=*** 
UNIX_SOCKET=/var/run/mysqld/mysqld.sock <---- I'm not sure what to put here 

Tôi không chắc chắn những gì để PUT như UNIX_SOCKET của tôi kể từ khi database.php cần nó.

tôi giữ lấy

SQLSTATE[HY000] [2002] No such file or directory 

Tôi tin rằng bởi vì con đường của tôi đến UNIX_SOCKET là sai.


Câu hỏi

Làm thế nào người ta sẽ đi về và cấu hình một cái gì đó như thế này?

Làm cách nào để tiếp tục và gỡ lỗi thêm?


Tôi đang mở cho bất kỳ đề xuất nào vào lúc này.

Bất kỳ gợi ý/đề xuất/trợ giúp nào về điều này sẽ được nhiều người đánh giá cao!


Cập nhật

Căn cứ vào câu trả lời @dparoli 's. Tôi cập nhật cấu hình cơ sở dữ liệu của mình không sử dụng UNIX_SOCKET nữa.

'connections' => [ 

    'mysql'  => [ 

     'driver'  => 'mysql', 
     'host'  => env('DB_HOST'), 
     'database' => env('DB_DATABASE'), 
     'username' => env('DB_USERNAME'), 
     'password' => env('DB_PASSWORD'), 
     'port'  => env('DB_PORT', '3306'), 
     'charset'  => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix'  => '', 
     'strict'  => false, 
    ] 

], 

bây giờ tôi đã

PDOException trong Connector.php dòng 49: SQLSTATE [HY000] [2002] Operation timed out


Tôi đã cố gắng tìm kiếm hơn vào cài đặt của staging VM

sshd_config của tôi

Sẽ /etc/ssh/sshd_config có chơi bất kỳ vai trò nào trong số này không? Có phải vì tôi đã vô hiệu hóa đăng nhập mật khẩu và chỉ cho phép đăng nhập qua khóa công khai không?

Tôi đã thử cả hai

PasswordAuthentication không

PasswordAuthentication có


netstat

Tôi chạy netstat -ln, tôi đã

Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  
tcp  0  0 0.0.0.0:5432   0.0.0.0:*    LISTEN  
tcp  0  0 127.0.0.1:17123   0.0.0.0:*    LISTEN  
tcp  0  0 0.0.0.0:11300   0.0.0.0:*    LISTEN  
tcp  0  0 0.0.0.0:3306   0.0.0.0:*    LISTEN  
... 

tôi thấy 0 0.0.0.0:3306 đó.


php.ini

max_execution_time = 60 

and 

memory_limit = 1000M 

/etc/mysql/my.cnf

# - "~/.my.cnf" to set user-specific options. 
# 
# One can use all long options that the program supports. 
# Run program with --help to get a list of available options and with 
# --print-defaults to see which it would actually understand and use. 
# 
# For explanations see 
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html 

# This will be passed to all mysql clients 
# It has been reported that passwords should be enclosed with ticks/quotes 
# escpecially if they contain "#" chars... 
# Remember to edit /etc/mysql/debian.cnf when changing the socket location. 
[client] 
port   = 3306 
socket   = /var/run/mysqld/mysqld.sock 

# Here is entries for some specific programs 
# The following values assume you have at least 32M ram 

# This was formally known as [safe_mysqld]. Both versions are currently parsed. 
[mysqld_safe] 
socket   = /var/run/mysqld/mysqld.sock 
nice   = 0 

[mysqld] 
# 
# * Basic Settings 
# 
user   = mysql 
pid-file  = /var/run/mysqld/mysqld.pid 
socket   = /var/run/mysqld/mysqld.sock 
port   = 3306 
basedir   = /usr 
datadir   = /var/lib/mysql 
tmpdir   = /tmp 
lc-messages-dir = /usr/share/mysql 
skip-external-locking 
# 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address = * 
# 
# * Fine Tuning 
# 
key_buffer    = 16M 
max_allowed_packet  = 16M 
thread_stack   = 192K 
thread_cache_size  = 8 
# This replaces the startup script and checks MyISAM tables if needed 
# the first time they are touched 
myisam-recover   = BACKUP 
#max_connections  = 100 
#table_cache   = 64 
#thread_concurrency  = 10 
# 
# * Query Cache Configuration 
# 
query_cache_limit  = 1M 
query_cache_size  = 16M 
# 
# * Logging and Replication 
# 
# Both location gets rotated by the cronjob. 
# Be aware that this log type is a performance killer. 
# As of 5.1 you can enable the log at runtime! 
#general_log_file  = /var/log/mysql/mysql.log 
#general_log    = 1 
# 
# Error log - should be very few entries. 
# 
log_error = /var/log/mysql/error.log 
# 
# Here you can see queries with especially long duration 
#log_slow_queries  = /var/log/mysql/mysql-slow.log 
#long_query_time = 2 
#log-queries-not-using-indexes 
# 
# The following can be used as easy to replay backup logs or for replication. 
# note: if you are setting up a replication slave, see README.Debian about 
#  other settings you may need to change. 
#server-id    = 1 
#log_bin      = /var/log/mysql/mysql-bin.log 
expire_logs_days  = 10 
max_binlog_size   = 100M 
#binlog_do_db   = include_database_name 
#binlog_ignore_db  = include_database_name 
# 
# * InnoDB 
# 
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. 
# Read the manual for more InnoDB related options. There are many! 
# 
# * Security Features 
# 
# Read the manual, too, if you want chroot! 
# chroot = /var/lib/mysql/ 
# 
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". 
# 
# ssl-ca=/etc/mysql/cacert.pem 
# ssl-cert=/etc/mysql/server-cert.pem 
# ssl-key=/etc/mysql/server-key.pem 



[mysqldump] 
quick 
quote-names 
max_allowed_packet  = 16M 

[mysql] 
#no-auto-rehash # faster start of mysql but no tab completition 

[isamchk] 
key_buffer    = 16M 

# 
# * IMPORTANT: Additional settings that can override those from this file! 
# The files must end with '.cnf', otherwise they'll be ignored. 
# 
!includedir /etc/mysql/conf.d/ 

____ 

quả

PDOException trong Connector.php dòng 49: SQLSTATE [HY000] [2002] Hoạt động hết thời gian

Làm cách nào để ngăn chặn điều đó?

Tôi có thể kiểm tra hoặc thử những gì khác?

+1

Tôi không nghĩ bạn có thể kết nối với máy chủ từ xa bằng ổ cắm unix. Những gì bạn có thể làm là thiết lập một đường hầm SSH và kết nối với localhost trên cổng tunnel. –

+0

Bạn đã kiểm tra quyền truy cập MySQL của mình chưa, thông tin đăng nhập người dùng bạn đã nhập có được phép từ máy chủ lưu trữ mà bạn đang cố gắng truy cập không? –

+0

@ChrisTownsend: Suy nghĩ tốt !!! Tôi đã thử và tôi đã nhận 'ERROR 2003 (HY000): Không thể kết nối với máy chủ MySQL trên '45 .55.88.88 '(60)' – ihue

Trả lời

1

Bạn đang cố gắng kết nối với một máy chủ khác thông qua một ổ cắm unix, điều này không thể gây ra ổ cắm, thường là chỉ hiển thị trực tiếp với hệ thống mà chúng được tạo.

Đối env dàn của bạn để làm việc bạn phải xóa bỏ dòng unix_socket cấu hình và thêm một cổng:

'port' => env('DB_PORT', '3306'), 

Và cấu hình mysql để nghe trên cổng đó.

+0

Tôi cập nhật cơ sở dữ liệu cấu hình cơ sở của tôi trên câu trả lời của bạn. Tôi đã nhận được ** SQLSTATE [HY000] [2002] Đã hết thời gian hoạt động ** Tôi cũng đã thêm các chi tiết trong bài đăng. – ihue

+0

Bạn phải cấu hình mysql để truy cập từ xa và mở cổng 3306 trong tường lửa hộp vm của mình: xem tại đây: http://stackoverflow.com/questions/38905581/connection-error-sqlstatehy000-2002-operation-timed-out và tại đây http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html – dparoli

+0

Tôi đã chạy 'netstat -ln' Tôi nhận được thông báo này để hiển thị' tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN ' – ihue

1

Điều này dường như chủ yếu là sự cố mạng giữa Máy chủ và Khách.

  • Đầu tiên, chúng ta hãy Host để nói chuyện với các Khách (VM)
    • Đăng nhập vào máy ảo (giả sử bạn đang sử dụng VirtualBox, máy ảo khác sẽ tương tự)
    • Run ifconfig và ghi lại các Địa chỉ IP. Nó sẽ giống như 10.0.2.5
    • Đến cửa sổ dụ VM -> Menu -> Card mạng:
      • bộ Adapter để NAT
      • Bấm vào "cổng chuyển tiếp" ở dưới cùng
      • Tạo kỷ lục mới (nhấp vào biểu tượng + phía bên tay phải)
      • Set Máy chủ IP = 127.0.0.1
      • đối với khách địa chỉ IP, hãy nhập giá trị mà bạn đã nhận trước đó (10.0.2.5 - IP của bạn có thể khác)
      • Trong cả hai trường hợp để sử dụng cổng 3306
    • Bấm vào nút OK hai lần và bạn nên ra khỏi màn hình các thiết lập và tất cả thực hiện
  • Xác minh bạn có thể kết nối với MySQL dụ thông qua dòng lệnh trên VM
    • Mở một terminal cửa sổ trên máy ảo
    • Chạy lệnh này mysql -hlocalhost -ujohn -p
    • Nhập mật khẩu khi được nhắc và bạn sẽ có thể kết nối. Nếu không, hãy thử như sau
      • mysql -h127.0.0.1 -ujohn -p
      • Nếu bạn vẫn không thể kết nối sau đó hãy chắc chắn rằng bạn có mật khẩu chính xác
    • Một khi bạn có thể kết nối địa phương, đó là thời gian để kết nối từ máy chủ (Mac)
  • Sử dụng lệnh sau:
    • mysql -h127.0.0.1 -ujohn -p
    • Nhập mật khẩu khi được nhắc
  • Nếu bạn vẫn không thể kết nối, hãy thử tắt tường lửa trên Guest/Ubuntu
1

gì bạn có thể thử nếu bạn có SSH truy cập vào các máy ảo (hoặc bất kỳ từ xa thực tế) sau đó bạn có thể thử chuyển tiếp cổng kết nối trên SSH:

ssh [email protected] -L 3307:localhost:3306 

Bây giờ cổng 3307 trên máy tính địa phương của bạn là hành động như cổng 3306 trên máy từ xa. Trong tệp cấu hình của bạn, bạn có thể truy cập

DB_HOST=localhost 
DB_PORT=3307 

Mặt khác của phương pháp này là bạn cần thiết lập phiên chạy và chạy khi bạn muốn sử dụng môi trường cục bộ của mình.

+0

Đó là một mẹo hay, nhưng tôi không chắc chắn, nếu tôi muốn tiếp tục thực hiện SSH của mình khi tôi muốn kết nối với mysql mọi lúc. – ihue

1

Hết thời gian hoạt động có thể do tường lửa gây ra.Bạn có thể khắc phục điều này bằng cách chạy các lệnh này trên máy ảo của bạn:

sudo ufw allow out 3306/tcp 
sudo ufw allow in 3306/tcp 

Nếu điều này không làm việc, kiểm tra xem có bất kỳ lưu lượng đến trên cổng 3306 bằng cách sử dụng lệnh này:

sudo tcpdump -i eth1 port 3306 

thay eth1 bằng giao diện mạng của bạn, bạn có thể tìm thấy bằng cách sử dụng lệnh này:

sudo ip link show 
Các vấn đề liên quan