$con = mysqli_connect('<remote server ip address>','root','*******','CSV_DB',);
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
我有一个简单的程序连接到我使用phpmyadmin创建的mysql服务器,但每次尝试连接时都会收到“无法连接”消息。
我知道这可能是一些不同的问题,但我真的在寻找有关如何排除故障的建议。
当我以root身份ssh到服务器时,我可以使用终端访问服务器,一切都很好。但是这个连接使用相同的用户名/密码/ db / etc而我似乎无法登录。另外,mysqli_error永远不会打印 - 不确定原因。
答案 0 :(得分:1)
这是一个快速检查列表,用于启用MySQL的远程连接,但首先阅读(6)。如果我遗漏了任何内容,请随时编辑。
1)您的远程用户通过使用适当的user,host
条目创建的帐户进行连接(查看select user,host from mysql.user order by 1,2
的输出)。如果没有,请查看CREATE USER
和/或GRANT
命令。检查用户的SHOW GRANTS
输出。
2)你已经完成flush privileges;
(有人说这是不必要的,其他人则说是这样)。
3a)通过查看This Document中的信息(或对于Windows,可能在C:\ProgramData\MySQL\MySQL Server 5.NNN
路径下方)查找下面3b)中引用的mysql配置文件。它因Linux的发行版而异。
3b)您修改并保存my.ini
(Windows)或my.cnf
(Linux),并将bind-address
更改为远离127.0.0.1
或localhost
, 0.0.0.0
。您已经创建和了解以下行:#skip-networking
。它看起来与此类似:
[mysqld]
bind-address=0.0.0.0
#skip-networking
4)重启mysql守护进程。这是如何根据发行版而变化的。
5)防火墙问题。确保端口(默认为3306
)对外界开放(实际上可能只是您的内部网)。这包括任何其他防火墙层,例如AWS EC2安全组,或类似的,如果有的话。
6)了解与此相关的安全风险。除非您知道将mysql服务器暴露给远程连接,否则不要执行此操作。
7)请使用上面1.中列出的select
语句进行频繁的安全评估,包括审核这些用户的SHOW GRANTS
。不要不必要地过度授予用户使用通配符。相反,为用户提供最低限度的权限,让他们完成工作。
8)经常通过常规日志和错误日志检查失败的连接尝试,如下所述。
对于入站,您可以查看常规查询日志。
select @@general_log; -- a 1 indicates it is turned on for capture
select @@general_log_file; -- the file that it logs to
如果设置已打开,则所有查询都可以记录到General Query Log。检查&#34; connect&#34;的日志,尤其是Access denied for user
以查看失败的尝试。定期(不是每隔几年)这样做。我每天至少做两次。请注意,您显然可以通过外部程序自动执行报告。外面的世界将磅您的服务器进入,如下图所示。这是现实;为自己做好准备。
查看The Error Log的手册页,注意警告级别和基于您的版本的详细程度设置。
我建议按日期创建备份副本(如此命名)并在备份后删除日志文件以在备份后重新开始。日志文件的大小可以快速增长,尤其是常规日志。不要忘记您是否已开启或关闭设置以进行记录。
您可以使用这两个日志来确定您的连接尝试是否在此处的步骤中通过了防火墙。