我有一个正在运行的 VPSapache
和mysql
服务器。基本上,我从也托管在同一台服务器上的网站更新我的数据库,这就是为什么当我通过PHP
我用来127.0.0.1
建立连接的文件连接到数据库时,我可以成功连接并插入行。
然而,最近,我尝试通过php
服务器外部且驻留在不同 VPS 上的脚本连接并将行插入到我的数据库,但出现了以下错误。
( ! ) Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in C:\wamp64\www\test.php on line 13
我希望我的mySql
服务器也能接受来自本地主机外部的连接。
答案1
您可以使用以下命令授予用户所有所需的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
IDENTIFIED BY 'your_pass'
WITH GRANT OPTION;
FLUSH PRIVILEGES;`
%
表示所有主机,这样指定的用户可以从任何 IP 地址访问数据库。如果您有自己的 IP 地址,则可以指定自己的 IP 地址。
如果你有防火墙,不要忘记在 VPS 上添加例外。如果你使用防火墙,ufw
则可以执行以下操作:
sudo ufw allow 3306/tcp
sudo service ufw restart
最后,如果您使用 Ubuntu,不要忘记my.cnf
在您的系统上进行编辑/etc/mysql/my.cnf
。使用您最喜欢的文本编辑器打开文件:例如 nano:sudo nano /etc/mysql/my.cnf
然后添加以下内容:
[mysqld]
bind-address= your-server-ip-address
#skip-networking
保存文件并退出。然后别忘了运行
sudo systemctl restart mysql
你可以使用这个 php 脚本测试你的工作
<?php
$dbname = 'dbname';
$dbuser = 'db_user';
$dbpass = 'db_pass';
$dbhost = 'your-server-ip-address';
try {
$connection = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser,
$dbpass);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
}
catch(PDOException $e)
{
echo "Connection failed: " . $e->getMessage();
}