我在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。