我user@'%'
用password 'password
. 但我无法连接:
mysql_connect('localhost:3306', 'user', 'password');
当我创建用户user@'localhost'
时,我能够连接。为什么?'%' 不是来自任何主机吗?
我user@'%'
用password 'password
. 但我无法连接:
mysql_connect('localhost:3306', 'user', 'password');
当我创建用户user@'localhost'
时,我能够连接。为什么?'%' 不是来自任何主机吗?
为了远程连接,您必须让 MySQL 将端口 3306 绑定到 my.cnf 中您机器的 IP 地址。然后,您必须在 localhost 和 '%' 通配符中创建用户,并授予对所有 DB 的权限。见下文:
my.cnf(Windows 上的 my.ini)
#Replace xxx with your IP Address
bind-address = xxx.xxx.xxx.xxx
然后:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';
然后:
GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
FLUSH PRIVILEGES;
根据您的操作系统,您可能必须打开端口 3306 以允许远程连接。
按照说明进行操作(Windows 中不需要步骤 1 到 3):
/etc/mysql/my.cnf (Mysql 5.5)
/etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)
bind-address=127.0.0.1
在配置文件更改中查找bind-address=0.0.0.0
(您可以将绑定地址设置为您的接口 IP 之一或像我一样使用 0.0.0.0)
重启在控制台运行的mysql服务:
service mysql restart
为远程连接创建一个具有安全密码的用户。为此,请在 mysql 中运行以下命令(如果您是 linux 用户以访问 mysql 控制台运行mysql
并且您为 root 运行设置密码mysql -p
):
授予所有特权。TO 'remote'@'%' IDENTIFIED BY 'safe_password' WITH GRANT OPTION;`
现在您应该有一个具有远程连接功能的用户名user
和密码。safe_password
用户是什么数据库?看这个例子
mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
所以回到你的问题“%”运算符表示您网络中的所有计算机。
就像 aspesa 节目一样,我也确信您必须创建或更新用户。查找所有 mysql 用户:
SELECT user,password,host FROM user;
设置好用户后,您应该能够像这样连接:
mysql -h localhost -u cmsuser -p
希望能帮助到你
我使用了一个使用 mysql_navtive_password 密码的现有用户
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
而不是
CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';
因此无法连接。删除一个旧的并在没有 mysql_native_password 的情况下创建一个新的就可以了
另一种方法是使用 MySql Workbench。转到管理 -> 用户和权限 -> 并在“限制到主机匹配”(来自主机)属性中将“localhost”更改为您不会授予远程访问权限的用户或使用“添加帐户按钮”创建新用户(添加帐户按钮) %' 在这个属性上而不是 localhost。