【问题标题】:Connect to remote database (EC2 instance) using PHP/Codeigniter?使用 PHP/Codeigniter 连接到远程数据库(EC2 实例)?
【发布时间】:2012-09-06 19:02:16
【问题描述】:

我已经在我的 Mac 上设置了 MNPP(XAMPP 的 Nginx 版本),但不知道如何连接到不是 localhost 的数据库。我想连接到一个 EC2 实例上的 MySQL 数据库。

我正在使用 Codeigniter/PHP,以下配置有效:

$db['default']['hostname'] = "localhost"; 
$db['default']['password'] = "";

以下内容有效:

$db['default']['hostname'] = "mysite.com"; //the name of my EC2 instance
$db['default']['password'] = "my_password";

我可以使用 MySQL GUI、Sequel Pro、上面的配置和我的 EC2 SSH 密钥 (~/.ssh/mysite.pem) SSH 到这个 EC2 数据库,但我无法通过我的本地主机上的 PHP 应用程序以编程方式完成它。

我是否需要更改 my.cnf 文件或其他任何地方的任何内容才能使其正常工作?

【问题讨论】:

    标签: php mysql codeigniter ssh amazon-ec2


    【解决方案1】:

    确保您的主机正在侦听 TCP 3306。

    您还需要为新主机上的用户设置数据库权限。

    在您的远程数据库上,运行:

    GRANT ALL ON foo.* TO username@'your-ip-address-here' IDENTIFIED BY 'PASSWORD';
    

    your-ip-address-here 替换为本地主机的公共IP,并将用户名和密码替换为您各自的值。

    这将允许您的应用程序通过 MySQL 与远程主机进行通信。这些应用程序不直接支持 SSH 隧道。

    或者,您可以创建一个 SSH 隧道,例如将您的 localhost:3307 桥接到 remotehost:3306,然后在您的应用程序中,您仍然可以使用 localhost,但将 mysql 端口更改为 3307

    【讨论】:

    • 谢谢,我刚刚做了这个和几个类似的组合:mysql> GRANT ALL ON mysiteDB.* TO root@'%' IDENTIFIED BY ''; Query OK, 0 rows affected (0.00 sec)。每次我得到“0行受影响”这似乎不正确。我是否需要随后刷新权限或重新启动 mysql 或其他什么?
    • 刷新权限是个好主意,但我在使用 '%' 作为主机时从来没有运气,总是不得不手动指定 IP。执行SELECT User,Host FROM mysql.user 并查看您当前托管的用户是什么样的。根据您获得的内容,插入另一个用户,将您的特定远程主机作为主机,然后将您的新用户授予数据库,将替换应用于上面的命令,这会很痛苦。
    • Here's the result 输入SELECT User,Host FROM mysql.user
    • 假设您的应用程序是条目 ip-10-196-37-212。 GRANT ALL ON dbname.* TO root@ip-10-196-37-212`由password标识。成功执行此操作后,应该会影响 1 行
    • 在您希望应用程序与之通信的数据库上。 (EC2)
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2023-03-20
    • 2011-12-27
    • 2016-10-29
    • 2018-10-15
    • 2021-02-25
    • 2017-06-22
    • 2016-09-28
    相关资源
    最近更新 更多