我希望使用其IPv6地址连接到远程MySQL实例(Google Cloud SQL实例)。
我正在使用PHP PDO:
$db = new \PDO('mysql:host=<ipv6-address>;port=3306;dbname=<database-name>',
'<username>',
'<password>'
);
但它始终失败并显示以下异常消息:
PDOException:SQLSTATE [HY000] [2002]无主机路由
从终端我可以连接到MySQL实例,没有任何问题,如下所示:
mysql --host=<ipv6-address> --user=<username> --<password>
任何帮助都将非常感激。
由于
答案 0 :(得分:3)
阅读此https://www.saotn.org/php-mysql-and-ipv6-still-slow/会产生以下想法:
通常情况下,IPv6优先于IPv4(可配置),用户留下响应缓慢的网站和数据库操作,只是因为连接到PHP中的IPv6地址被拒绝,并且连接被拒绝未正确处理,使得回退到IPv4变慢。需要mysql.connect_timeout秒
注意:来源似乎可信
此外,这是一个很好的阅读:http://dev.mysql.com/worklog/task/?id=798
应该支持MySQL支持IPv6工作 (“Internet协议版本6”) 这意味着:
- 用户可以使用IPv6连接。 这部分是连接器问题</ strong> - 存储用户地址信息,例如,在mysql.user中,可以是IPv6格式的 - 建议的新数据类型CIDR和INET允许使用WL#2037“添加CIDR和INET数据类型”中描述的IPv6格式 - 像inet_ntoa()这样的函数需要修订
答案 1 :(得分:-1)
尝试将此用于您的PDO连接并查看它是否有效。
$dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);
如果失败,您可以更好地使用try...catch
来准确查看错误
<?php
try {
$dbh = new PDO('mysql:host=<ipv6-address>;port=<port>;dbname=<dbname>', <dbusername>, <dbpassword>);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>