【问题标题】:Connect to remote database on amazon server连接到亚马逊服务器上的远程数据库
【发布时间】:2018-05-28 16:34:08
【问题描述】:

我正在开发 Laravel5.4 应用程序,它有自己的数据库。对于某些业务,我需要连接到亚马逊服务器上的另一个远程数据库以读取一些数据并插入一些数据,但所有尝试都失败了。我试过了:

.env.php:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db1
DB_USERNAME=root
DB_PASSWORD=root

DB_EXT_CONNECTION=mysql
DB_EXT_HOST=xx.xx.xx.xx
DB_EXT_PORT=3306
DB_EXT_DATABASE=db2
DB_EXT_USERNAME=root
DB_EXT_PASSWORD=root

配置/数据库.php:

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            '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' => '',
            'strict' => true,
            'engine' => null,
        ],

    //External Database Credentials
    'ext_mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_EXT_HOST', '127.0.0.1'),
        'port' => env('DB_EXT_PORT', '3306'),
        'database' => env('DB_EXT_DATABASE', 'forge'),
        'username' => env('DB_EXT_USERNAME', 'forge'),
        'password' => env('DB_EXT_PASSWORD', ''),
        'unix_socket' => env('DB_EXT_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],

我在我的控制器中尝试:

$users = DB::connection('ext_mysql')->table('users')->get();
return $users;

但是,浏览器上的连接时间太长,最后给出'Connection time out'

有人可以帮忙吗?

【问题讨论】:

  • 我想第一个要问的问题是,你能使用mysql客户端连接到服务器吗?管理员、navicat、mysql 工作台?您的远程 mysql 服务器可能不接受远程连接。
  • 听起来远程 MySQL 数据库可能会阻止您的 IP 连接到它。确保外部数据库允许远程 MySQL 访问。
  • 如何检查外部数据库是否允许远程 MySQL 访问?

标签: php mysql laravel laravel-5 amazon-ec2


【解决方案1】:

您已经在 .env 文件中定义了外部数据库,前缀为 DB_EXT_,并且您尝试在 config/database.php 文件中访问为 DB_SRD。

更改您的 config/database.php 文件

'ext_mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_EXT_HOST', '127.0.0.1'),
    'port' => env('DB_EXT_PORT', '3306'),
    'database' => env('DB_EXT_DATABASE', 'forge'),
    'username' => env('DB_EXT_USERNAME', 'forge'),
    'password' => env('DB_EXT_PASSWORD', ''),
    'unix_socket' => env('DB_EXT_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
]

还要检查您的远程数据库是否支持来自外部 IP 地址的连接。

【讨论】:

  • 谢谢,对不起,EXT,我更新了我的问题,但它根本不起作用。如何检查远程数据库是否支持来自外部 IP 地址的连接?
  • 您使用的是哪个远程数据库?是RDS吗?
  • 这是亚马逊的默认数据库设置。
  • 您可以登录 AWS 控制台,转到 RDS console.aws.amazon.com/rds/home 并检查您的数据库实例的设置。查找并选择“公共可访问性”并将其设置为是。
【解决方案2】:

我需要连接到亚马逊服务器上的另一个远程数据库才能读取 一些数据

如果你的数据库在远程机器上,那么你需要使用hostname或者远程机器的ip地址。

我不知道env 方法,但我认为,你需要改变

'host' => env('DB_EXT_HOST', '127.0.0.1'),

'host' => env('DB_EXT_HOST', 'xxx.xxx.xxx.xx'),

'xxx.xxx.xxx.xx' 将是远程机器的 IP 地址。

【讨论】:

  • 是的,我做了,它在 .env 文件中找到,你可以在 hot 127.0.01 中看到的是默认 IP,但它是从 .env 读取的。作为@Niraj 的评论,MySQL DB 可能会阻止您的 IP 连接到它
猜你喜欢
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多