Mysql 允许远程访问 有更新!

  |   0 评论   |   19 浏览

因为 Mysql 安装后 root 用户默认只能从本地连接,所以我之前一直都是用的 ssh 隧道,这样比较安全,连接是建立在加密的 ssh 隧道上面,而且 Mysql 禁止除本地以外的所有机器访问。但是这样太麻烦了,每次都要先与服务器之间建立隧道,然后再连接 Mysql,感觉没什么必要。

用户授权

例如想让 root 用户可以从任何机器连接,可以使用 grant 关键字,grant 关键字也可以新建用户。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges; -- 使操作立即生效

意思是新建一个用户 root@%
ALL PRIVILEGES ON *.* 表示授予新建的这个用户在所有数据库所有表上拥有所有权限, “*.*” = 数据库.表
% 表示可以从任何机器连接
123456 是密码,
WITH GRANT OPTION 表示新建的这个用户也可以给其他用户授权。

监听所有地址

上面的操作完了,使用新建的用户连接发现还是不能连接到数据库。调查一番后发现原来 Mysql 安装完之后默认只监听本地地址的,即 127.0.0.1。

root@iZ28gl3fldgZ:~# netstat -apn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      3311/mysqld  

默认监听 127.0.0.1 是配置在 /etc/mysql/mysql.conf.d/mysqld.cnf 中。

[mysqld]
#
# * Basic Settings
#
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
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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 (在这里)
#
# * Fine Tuning
#
key_buffer_size         = 16M
max_allowed_packet      = 16M

我们只需要在 /etc/mysql/my.cnf 将其覆盖掉就好了。

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

[mysqld]
bind-address = 0.0.0.0

注意:不要漏掉了 [mysqld],因为我被坑过。

然后重启 Mysql,一切大功告成。

systemctl restart mysql.service

评论