MySQL配置远程访问(bind-address)的一大误区
看到网上很多人说了bind-address=192.168.1.100,并且关闭skip-networking。可以实现在192.168.1.100主机上对mysql的远程访问。我想说,我试了,This is bullshit!
一、我本机操作,尝试了多次都是无法启动MySQL,报错如下:
[root@localhost ~]# service mysql restart
ERROR! MySQL server PID file could not be found!
Starting MySQL... ERROR! The server quit without updating PID file (/tmp/mysqld/mysqld.pid).
[root@localhost ~]#
如果说是得用设置的那个主机远程连接重启的话,那好我也尝试了,依旧报错如上。
首先bind-address的官方解释如下:
--bind-address=ip_address
#Use specified network interface to connect to MySQL Server(在具有多个网络接口的计算机上,使用此选项选择用于连接 MySQL 服务器的接口。)
#注解:假如一个服务器上配置了多个网卡,即存在配置多个ip的情况下,可以用bind-address选择监听某个接口(ip)。只有通过被监听的接口,才能访问mysql。
总结一下,bind-address的设置有以下三种情况:
- bind-address=127.0.0.1 #只允许本机访问。
- bind-address=某个网卡的ip #例如bind-address=192.168.1.101,只能通过ip为192.168.1.101的网卡访问。
- bind-address=0.0.0.0 #此规则是系统默认配置,监听所有网卡,即允许所有ip访问。
二、仅允许本机访问数据库
如果想设置为本机访问数据库,那么/etc/my.cnf里可以这么设置:
bind-address=127.0.0.1
skip-networking=1
skip-networking的默认值是0(关闭状态)。如果想查看skip-networking的值,可以通过mysql>show variables like 'skip_networking';
来查看,前提是登录连接上了mysql。
三、远程访问数据库
1、前提得在防火墙开启对应端口开放
firewall设置命令如下:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#开放端口
firewall-cmd --reload
#重启防火墙生效
iptables设置命令如下:
[root@v01-svn-test-server online]# iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
[root@v01-svn-test-server online]# service iptables status
2、关闭skip_networking
编辑/etc/my.cnf:
skip-networking=0
3、设置user表中对应账户的host值
mysql>grant all privileges on *.* to root@'192.168.1.100' identified by '123456';
mysql>flush privileges;
#说明:@'192.168.1.100'只是允许这台主机进行访问,如果设置为'%'则是所有主机可以登录访问,设置为'localhost'则是只允许本机访问。
附加说明:在mysql的配置文件my.cnf中,'-'有时候同'_'均可以生效。例如:“skip-networking”,在数据表中是“skip_netwroking”,而在my.cnf中使用减号'-'和下划线'_'都生效。