我在app.mydomain.com(服务器1)上建立了一个应用程序,在support.mydomain.com(服务器2)上有一个支持票务系统。 如何在我的laravel应用程序中建立两个数据库之间的连接?两者都在使用Laravel Forge和Digital Ocean。
我看了this post on SO看起来不错,但我收到了“连接超时错误”。我相信它与Forge在连接数据库时需要SSH密钥文件(id_rsa.pub)有关吗? Source here
我尝试将其添加到database.php:
//Server/Site 1
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'support',
'username' => 'user',
'password' => 'mysecretpassword',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
//Server/Site 2
'mysql2' => array(
'driver' => 'mysql',
'host' => '123.456.789.101',
'port' => '3306',
'database' => 'app',
'username' => 'forge',
'password' => 'mysecretpassword',
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
),
然后将其添加到我的模型中:
protected $connection = 'mysql2';
答案 0 :(得分:6)
当您使用Forge配置服务器时,出于安全原因,MySQL配置会限制外部连接。只有同一服务器上的应用程序才能访问您的数据库
因为你使用伪造它比我之前建议的更容易。如果您使用伪造品配置了两台服务器,请转到forge -> networking -> server network
,然后选中can connect to
复选框并点击更新。
之后,您需要使用从digitalocean获取的专用网络IP更新DB_HOST=
mysql2连接。
现在,为了以安全的方式允许外部连接,有几件事要做:
/etc/mysql/my.cnf
和udpate bind-address
由于您使用的是数字海洋,如果您的服务器位于同一数据中心,您应该能够使用您的Droplet的专用网络IP地址。这是更安全的解决方案,服务器之间的任何连接都不会离开数据中心基础设施。记得重新启动mysql。
转到Forge -> Networking -> New Firewall Rule
并为端口3306添加新规则和您的site1的IP地址,如果可能,再次为私有IP。
使用ssh连接到site1打开mysql控制台并添加新用户
CREATE USER 'some-username'@'site1_ip' IDENTIFIED BY 'some_password';
GRANT ALL PRIVILEGES on your_database.* TO 'some-username'@'site1_ip';
FLUSH PRIVILEGES;
有关详细信息,请参阅本教程,它解决了与您https://www.digitalocean.com/community/tutorials/how-to-set-up-a-remote-database-to-optimize-site-performance-with-mysql
类似的问题希望这有帮助!