我在deepin上(基于debian)安装了mysql后,发现只能从本机登陆而不能远程登陆。例如mysql安装在192.168.1.104上,使用root用户登陆,

远程登陆的命令是:

$mysql -h 192.168.1.104 -u root -p

返回的错误是cannot connect,而不是access denied话,就说明没有还没有去验证用户名密码就已经被拒绝了。

而使用:

$mysql -h localhost -u root -p

却是可以登陆的。

检查一下,使用

sudo netstat -apn | grep mysql

发现127.0.0.1:3306端口上有监听(listen)

------------ 问题解决 -------------------

在baidu上搜索“mysql开启远程连接”到的前几篇文章(包括一篇百度经验),其实都只说了其一,没说其二!

先说一下其一:

1)本地使用root登陆mysql

$mysql -u root -p

2)输入密码后登陆成功,为了不把root暴露,增加一个用户deepin,密码pswd

mysql>CREATE USER 'deepin'@'localhost' IDENTIFIED BY 'pswd';

3) 授予deepin完全权利。如果不想授权太多,可以去查一下grant命令,这儿不细说了;

GRANT ALL PRIVILEGES ON *.* TO 'deepin'@'%' IDENTIFIED BY 'pswd' WITH GRANT OPTION;

4)刷新生效:

mysql>flush privileges;

再说其二:

恩,百度上能搜到的教程到此为止了,可是你发现还是不能远程连接!你又百度搜索其他文章,发现所有的文章大同小异都是差不多的!你已经被百度坑了有没有。。。

由于谷歌被墙,用bing.com英文搜索到一篇,真正有用的,链接先贴出来:

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

简单来说是需要修改my.cnf配置文件。我是debian系统,my.cnf打开my.cnf:

$sudo vim /etc/mysql/my.cnf

这儿与上面文章有点儿不同,文章里说找[mysqld]这个配置位置,可是my.cnf里没有。不过按照现在的配置文件喜欢多个文件互相include的风格,看到my.cnf里面有这么两句:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

大概这两个目录里都是mysql的配置文件吧!下面正式开始了:

1)在mysql.conf.d/目录里发现mysqld.cnf,就是这个了:

$sudo vim /etc/mysql/mysqld.cnf

2)先看看有没有skip-networking的配置项,没有就好,有就删掉或者用#注释掉

3) 最关键的就是修改bind-address,默认是:

bind-address = 127.0.0.1

改为服务器的实际ip,如192.168.1.104

bind-address = 192.168.1.104

最后看起来像是这样:

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
bind-address    = 192.168.31.104
# skip-networking

4)重启mysql,在我的设备上是这样重启:

$ sudo  /etc/init.d/mysql restart

至此OK。

 

标签: none 阅读量: 1239

添加新评论