Laravel (Lumen) 连接到同一网络上另一台服务器上的数据库
Laravel (Lumen) connect to database on another server on same network
我在一台服务器上有一个 Laravel 项目,在另一台服务器上有一个 Laravel Lumen 8 项目,它们都是虚拟机并且是彼此的克隆所以具有相同的硬件和 OS.
我有一个域,为了这个 Whosebug 的目的,我们称之为 foo.com,它通过 Cloudflare,两台服务器都是 ipv6 服务器,当通过 ssh 相互 ping 时,它们可以看到对方很好。
我遇到的问题是从另一台服务器上的 Lumen 项目连接到 MySQL (Maria DB) 数据库。
我试过使用:
- 数据库所在服务器的域
- ipv6域
- VM 的本地 ipv4 地址,因为两台服务器都存在于同一网络上,这是它们相互查看的方式
我正在使用 Tinker 和 运行:
测试连接
DB::connection()->getPdo();
由于某种原因我无法连接,这些是我遇到的组合和错误,想知道我遗漏了什么:
尝试 1
DB_CONNECTION=mysql
DB_HOST=local ipv4
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] No route to host
尝试 2
DB_CONNECTION=mysql
DB_HOST=ipv6 address
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] Invalid argument'
尝试 3
DB_CONNECTION=mysql
DB_HOST=api.foo.com
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] Connection timed out'
如何让我的 Lumen 项目连接到我在另一台服务器上的 Laravel 数据库,我很确定我已经尝试了这里的所有组合。
键入 VM 数据库的本地 IPv4。 (您可以尝试相互 ping 一台虚拟机,以确保虚拟机之间的连接正常)
我找到原因了。在 DB_HOST
的开头和结尾缺少方括号,例如:
DB_HOST=[my ipv6]
要在单独的服务器上连接 MySQL 数据库,我们必须检查以下内容:
- 两台服务器可以通过 ping 或 ssh 访问。
- MySQL可以监听专用VM或服务器的IP。
- Laravel或Lumen可以访问服务器IP地址
在这个答案中,我们假设网络是 192.168.1.0/24。 Lumen 服务器是 192.168.1.1 的服务器 A。 MySQL 服务器是 192.168.1.2 的服务器 B。
在我的配置中,我检查了两台服务器可以通过 ping 访问:
ping -c 4 192.168.1.2
服务器必须响应。
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.399 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.412 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.352 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.409 ms
--- 192.168.1.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3057ms
rtt min/avg/max/mdev = 0.352/0.393/0.412/0.024 ms
对于 IPv6,使用 ping 6
ping6 -c 4 abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
结果类似于 IPv4,
PING abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd(abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd) 56 data bytes
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=1 ttl=61 time=0.421 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=2 ttl=61 time=0.333 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=3 ttl=61 time=0.388 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=4 ttl=61 time=0.324 ms
--- 2001:19f0:5:241:a315:602c:64ce:d6c1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4096ms
rtt min/avg/max/mdev = 0.324/0.368/0.421/0.035 ms
如果结果不是这样,请确保您有连接或相同的网络。数字将根据实际结果进行更改。如果失败,请使用以下命令尝试 ssh:
ssh user@192.168.1.2
ssh user@[abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd]
如果您的服务器 B 无法通过 ssh 或 ping 访问,则说明您的服务器连接存在问题。
- 如果这两个能ping通,就可以确定你的MySQL服务器正在监听服务器的IP地址。您可以检查使用:
#IPv4
nmap -sT -O 192.168.1.2
#IPv6
nmap -sT -O -6 abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
结果将显示为:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-11 10:04 EST
Nmap scan report for 192.168.1.2
Host is up (0.00036s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
3306/tcp open mysql
MAC Address: AA:BB:CC:DD:EE:FF (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds
检查会话
PORT STATE SERVICE
3306/tcp open mysql
如果是监听,MySQL就是监听端口。否则,请更改 mysql 配置中的以下内容。我的是 /etc/mysql/my.cnf
.
port = 3306
#ipv4
bind-address = 192.168.1.2
#ipv6
bind-address = abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
注意:编辑配置需要 sudo 或 root 权限
更改并重新启动服务器后,请再次检查 nmap
以确保您的数据库服务器开始侦听。请确保防火墙已关闭以进行测试。
要禁用临时,sudo service firewalld stop
并重试。请参考您的发行版防火墙服务。 Lumen 和 MySQL 服务器都应出于测试原因而禁用。 不推荐用于生产服务器。
如果第 1 步和第 2 步运行良好。尝试使用 Laravel Tinker 或 mysql 客户端访问服务器。
mysql -h 192.168.1.2 -u root -p password
如果不是socks not found,如access denied,请参考MySQL或Mariadb手册
如果成功,请在您的 Laravel/Lumen 项目中设置您的 .env 文件。
#IPv4
DB_HOST=192.168.1.2
#IPv6
DB_HOST=[2001:19f0:5:241:a315:602c:64ce:d6c1]
DB_PORT=3306
希望对您有所帮助。在 Mariadb 工作过。
我在一台服务器上有一个 Laravel 项目,在另一台服务器上有一个 Laravel Lumen 8 项目,它们都是虚拟机并且是彼此的克隆所以具有相同的硬件和 OS.
我有一个域,为了这个 Whosebug 的目的,我们称之为 foo.com,它通过 Cloudflare,两台服务器都是 ipv6 服务器,当通过 ssh 相互 ping 时,它们可以看到对方很好。
我遇到的问题是从另一台服务器上的 Lumen 项目连接到 MySQL (Maria DB) 数据库。
我试过使用:
- 数据库所在服务器的域
- ipv6域
- VM 的本地 ipv4 地址,因为两台服务器都存在于同一网络上,这是它们相互查看的方式
我正在使用 Tinker 和 运行:
测试连接DB::connection()->getPdo();
由于某种原因我无法连接,这些是我遇到的组合和错误,想知道我遗漏了什么:
尝试 1
DB_CONNECTION=mysql
DB_HOST=local ipv4
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] No route to host
尝试 2
DB_CONNECTION=mysql
DB_HOST=ipv6 address
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] Invalid argument'
尝试 3
DB_CONNECTION=mysql
DB_HOST=api.foo.com
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=user
DB_PASSWORD=pass
PDOException with message 'SQLSTATE[HY000] [2002] Connection timed out'
如何让我的 Lumen 项目连接到我在另一台服务器上的 Laravel 数据库,我很确定我已经尝试了这里的所有组合。
键入 VM 数据库的本地 IPv4。 (您可以尝试相互 ping 一台虚拟机,以确保虚拟机之间的连接正常)
我找到原因了。在 DB_HOST
的开头和结尾缺少方括号,例如:
DB_HOST=[my ipv6]
要在单独的服务器上连接 MySQL 数据库,我们必须检查以下内容:
- 两台服务器可以通过 ping 或 ssh 访问。
- MySQL可以监听专用VM或服务器的IP。
- Laravel或Lumen可以访问服务器IP地址
在这个答案中,我们假设网络是 192.168.1.0/24。 Lumen 服务器是 192.168.1.1 的服务器 A。 MySQL 服务器是 192.168.1.2 的服务器 B。
在我的配置中,我检查了两台服务器可以通过 ping 访问:
ping -c 4 192.168.1.2
服务器必须响应。
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.399 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.412 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.352 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.409 ms
--- 192.168.1.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3057ms
rtt min/avg/max/mdev = 0.352/0.393/0.412/0.024 ms
对于 IPv6,使用 ping 6
ping6 -c 4 abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
结果类似于 IPv4,
PING abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd(abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd) 56 data bytes
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=1 ttl=61 time=0.421 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=2 ttl=61 time=0.333 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=3 ttl=61 time=0.388 ms
64 bytes from abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd: icmp_seq=4 ttl=61 time=0.324 ms
--- 2001:19f0:5:241:a315:602c:64ce:d6c1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4096ms
rtt min/avg/max/mdev = 0.324/0.368/0.421/0.035 ms
如果结果不是这样,请确保您有连接或相同的网络。数字将根据实际结果进行更改。如果失败,请使用以下命令尝试 ssh:
ssh user@192.168.1.2
ssh user@[abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd]
如果您的服务器 B 无法通过 ssh 或 ping 访问,则说明您的服务器连接存在问题。
- 如果这两个能ping通,就可以确定你的MySQL服务器正在监听服务器的IP地址。您可以检查使用:
#IPv4
nmap -sT -O 192.168.1.2
#IPv6
nmap -sT -O -6 abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
结果将显示为:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-02-11 10:04 EST
Nmap scan report for 192.168.1.2
Host is up (0.00036s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
3306/tcp open mysql
MAC Address: AA:BB:CC:DD:EE:FF (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds
检查会话
PORT STATE SERVICE
3306/tcp open mysql
如果是监听,MySQL就是监听端口。否则,请更改 mysql 配置中的以下内容。我的是 /etc/mysql/my.cnf
.
port = 3306
#ipv4
bind-address = 192.168.1.2
#ipv6
bind-address = abcd:abcd:abcd:abcd:abcd:abcd:abcd:abcd
注意:编辑配置需要 sudo 或 root 权限
更改并重新启动服务器后,请再次检查 nmap
以确保您的数据库服务器开始侦听。请确保防火墙已关闭以进行测试。
要禁用临时,sudo service firewalld stop
并重试。请参考您的发行版防火墙服务。 Lumen 和 MySQL 服务器都应出于测试原因而禁用。 不推荐用于生产服务器。
如果第 1 步和第 2 步运行良好。尝试使用 Laravel Tinker 或 mysql 客户端访问服务器。
mysql -h 192.168.1.2 -u root -p password
如果不是socks not found,如access denied,请参考MySQL或Mariadb手册
如果成功,请在您的 Laravel/Lumen 项目中设置您的 .env 文件。
#IPv4
DB_HOST=192.168.1.2
#IPv6
DB_HOST=[2001:19f0:5:241:a315:602c:64ce:d6c1]
DB_PORT=3306
希望对您有所帮助。在 Mariadb 工作过。