Linux mysql开启远程访问

默认情况下远程访问会出现 Can’t connect to MySQL server on ‘192.168.10.18′ (10061) 错误


是因为,mysql的默认配置为了增强安全性,禁止了非本机的访问,在ubuntu中是这样,debian中也是。禁止的方式以前是在my.cnf中有一句
skip-network
现在则变成了:
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. 

bind-address = 127.0.0.1 是只监听本机地址。所以,如果要开放局域网内的访问,需要注释掉这一句,或者改成: bind-address = 0.0.0.0    

1)修改 bind-address = 127.0.0.1  为  bind-address = 0.0.0.0

# vim /etc/mysql/my.cnf


2)修改完成后重启mysql服务

# sudo /etc/init.d/mysql restart


这样改完3306端口就开始监听了,但是mysql的权限还没有打开root远程登陆。mysql默认是不允许远程连接的,因为有很大的安全隐患。
需要手动增加可以远程访问数据库的用户。

3)本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%"

#mysql -uroot -ppassword 
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql>FLUSH PRIVILEGES;

注:红色部分改为自己的用户名密码


修改完这些就可以远程访问了。

补充:

今天按照这个方法遇到了点问题补充一下
MySQL> update user set host='%' where user = 'root';
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
然后查看了下数据库的host信息如下:
MySQL> select host from user where user = 'root';
+-----------------------+
| host |
+-----------------------+
| % |
| 127.0.0.1 |
| localhost.localdomain |
+-----------------------+
3 rows in set (0.00 sec)
host已经有了%这个值,所以直接运行命令:
复制代码 代码如下:


MySQL>flush privileges;


再用MySQL administrator连接...成功!!
posted @ 2016-11-20 16:49  haxianhe  阅读(445)  评论(0编辑  收藏  举报