MySQL添加用户进行远程访问


148

我创建的用户user@'%'使用password 'password。但是我无法连接:

mysql_connect('localhost:3306', 'user', 'password');

创建user时user@'localhost',我可以连接。为什么?'%'不是来自任何主机吗?


请注意,user @ localhost和user @%的密码以及特权通常不同。
Jose Manuel Gomez Alvarez

Answers:


377

为了远程连接,您必须使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才能允许远程连接。


1
这帮助我使用了WebFaction私有MySQL实例。我按照您的CREATE USER和GRANT ALL步骤执行,mysql.default_port = <private instance port>在php.ini中进行设置,然后127.0.0.1在整个数据库主机名中使用
spex 2013年

很有用。只是一个评论。my.cnf可能包含另一个配置文件,因此相关行可能在其他地方。在my.cnf中寻找以!include开头的行,如果bind-address不在my.cnf中,则它可以位于该包含的文件中。
tru7

my.cnf文件在哪里?
弗拉基米尔·德斯波托维奇

7
不要忘了冲洗;)
volkovmqx

4
为什么同时使用localhost和%?
晚上

21

按照说明进行操作(Windows中不需要步骤1至3):

  1. 找到mysql配置进行编辑:

    /etc/mysql/my.cnf(MySQL 5.5)

    /etc/mysql/conf.d/mysql.cnf(MySQL 5.6+)

  2. bind-address=127.0.0.1在配置文件更改中查找bind-address=0.0.0.0(您可以将绑定地址设置为接口ip之一,或者像我一样使用0.0.0.0)

  3. 重新启动在控制台上运行的mysql服务: service restart mysql

  4. 创建一个具有安全密码的用户以进行远程连接。为此,请在mysql中执行以下命令(如果您是Linux用户,则要进入mysql控制台运行mysql,并且您为root run设置了密码mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`
    

现在,您应该拥有一个名称为user和的用户,safe_password并且具有远程连接功能。


2
更改对我有用的bind-address = 0.0.0.0 ... 和授予特权
zwitterion

12

用户是什么DB?看这个例子

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 gmeier -p

希望能帮助到你


通常,对于所有数据库。我只想连接,而不是选择数据库。codemysql_connect('localhost:3306','user','password'); code
user2333586

您使用的是什么操作系统,Windows,Linux?
apesa

视窗。沼泽服务器。
user2333586

您将需要确保IP地址绑定到端口3306。在Windows中,您可以使用netstat -n查看绑定到IP的端口。如果看到127.0.0.1:3306,则您将无法通过除本地主机以外的任何设备进行连接
apesa 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.