MySQL配置远程访问(bind-address)的一大误区

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中使用减号'-'和下划线'_'都生效。
posted @ 2021-11-30 17:13  追赶大神的脚步  阅读(18513)  评论(0编辑  收藏  举报