我创建了用户user@'%'
,密码为'password'
。但是我无法连接:
mysql_connect('localhost:3306', 'user', 'password');
我创建了用户user@'localhost'
,为什么能连接成功?难道'%'不是代表任何主机吗?
我创建了用户user@'%'
,密码为'password'
。但是我无法连接:
mysql_connect('localhost:3306', 'user', 'password');
我创建了用户user@'localhost'
,为什么能连接成功?难道'%'不是代表任何主机吗?
为了远程连接,您必须在my.cnf中将MySQL绑定端口3306到您机器的IP地址。然后,您必须在本地主机和“%”通配符上创建用户,并授予所有数据库的权限。请参见以下内容:
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 以允许远程连接。
mysql.default_port = <private instance port>
设置在我的php.ini中,然后在整个过程中都使用了127.0.0.1
作为我的数据库主机名。 - spex0.0.0.0
不是必需的。只需要知道远程访问将通过哪个接口的IP地址即可。 - stackprotector按照以下步骤操作(在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)
在控制台上运行service mysql restart
以重启mysql服务。
为远程连接创建一个安全密码的用户。要执行此操作,请在mysql中运行以下命令(如果您是Linux用户,则可以通过运行mysql
进入mysql控制台,如果您为root设置了密码,则运行mysql -p
):
GRANT ALL PRIVILEGES ON *.* 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
希望它能帮助到你
code
mysql_connect('localhost:3306', 'user', 'password'); code
- user2333586我曾使用一个已存在的用户,该用户的密码是使用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的新的解决了问题。