当前位置: 主页 > Linux安装教程 > 常见问题 >

Linux上mysql开启远程连接方法_解决MySQL不允许远程访问的方法

时间:2016-03-26 12:06来源:未知 作者:Linux先生 举报 点击:
新安装的MySQL是默认不开户远程访问权限的,也就不能外部连接MySQL。这样对想远程调用MySQL的数据很不方便。下面我们来看下如何设置允许远程连接MySQL数据库。
还没有安装Mysql的可以参考怎么在阿里云Linux主机上安装mysql
一般来说mysql安装时都是关闭远程连接的,但是如果一台电脑需要多个网站连接,而这些网站又不是自己服务器上,那么就需要把mysql数据库的远程开启,开启mysql远程登录的用户都是存储在mysql数据库中的user表中。默认情况下,Mysql为了安全起见是不支持远程访问和连接的。不过有的时候,工作需要你要从家里或者网页来访问Mysql,本文就介绍下怎么在Linux系统上给Mysql创建一个远程连接的账户,支持远程访问.


任务: MySQL服务远程访问权限

你需要执行下面的这些命令,让Mysql运行支持远程连接.

步骤# 1: 登录到SSH 

首先通过ssh登录到Mysql数据库服务器去,然后使用root进入Mysql:

ssh user@server1.cyberciti.biz
### login as the root using su or sudo ##
su
#sudo -s

或者直接使用ssh登录

ssh root@server1.cyberciti.biz

步骤# 2: E编辑my.cnf文件

连接成功之后,我们就来编辑Mysql的配置文件:my.cnf 

  • 如果你的系统是Debian Linux 那文件位置是:/etc/mysql/my.cnf .
  • 如果你的系统是 Red Hat Linux/Fedora/Centos Linux 那文件位置是: /etc/my..
  • 如果你的系统是 FreeBSD 那文件位置是: /var/db/mysql/my.cnf .

然后我们就编辑/etc/my.cnf, 执行:
# vi /etc/my.cnf

步骤 # 3: 打开编辑后,我们找到这行(vi里面,先按下esc,然后输入/[mysqld],再enter,即可查找,按n可以看下一个):

[mysqld] 

然后把跳过的IP设置好,让帮到的IP为你自己要进入连接的IP,

bind-address=YOUR-SERVER-IP

比如,你的MySQL 服务器IP是 65.55.55.2 ,那修改后大概是这样:

[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
language        = /usr/share/mysql/English
bind-address    = 65.55.55.2
# skip-networking
....
..
....

这里的,

  • bind-address: 绑定的IP
  • skip-networking : 不再监听TCP/IP 连接. 所有的Mysql交互都要通过Unix sockets. 如果你只想本地请求的话强烈建议开启,因为我们现在是开启远程连接,所以在这里我们就给注释掉,在前面加上#号就可以了.

步骤# 4 保存文件重启Mysql服务

如果是Debian / Ubuntu Linux系统,输入下面的命令重启Mysql服务
# /etc/init.d/mysql restart
如果是RHEL / CentOS / Fedora / Scientific Linux系统,输入下面的命令重启Mysql服务
# /etc/init.d/mysqld restart
如果是FreeBSD系统,输入下面的命令重启Mysql服务
# /usr/local/etc/rc.d/mysql-server stop
# /usr/local/etc/rc.d/mysql-server start

或者
# /usr/local/etc/rc.d/mysql-server restart

步骤# 5 给远程IP授权

连接到Mysql
$ mysql -u root -p mysql

那我们就授权给新的数据库

我们想远程IP为202.54.10.20,通过Mysql用户bar访问数据库foo,那我们需要在Mysql(mysql> prompt)下输入:

mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';

那怎么给已存在的库授权呢?

加入你需要从远程IP202.54.10.20通过Mysql用户webadmin访问webdb库,那命令就是这样的了

mysql> update db set Host='202.54.10.20' where Db='webdb';
mysql> update user set Host='202.54.10.20' where user='webadmin';

步骤# 6: 退出MySQL

退出Mysql,使用:mysql> exit

步骤# 7: 打开防火墙3306端口

我们需要打开iptables或者BSD的pf防火墙3306 TCP端口

通用Mysql3306端口的iptables(vi /etc/sysconfig/iptables)防火墙规则

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

或者你只允许web那台服务器(IP为10.5.1.3)可以访问:

/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT

或者只允许局域网192.168.1.0/24段访问

/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT

 最后重启防火墙使配置生效(RHEL / CentOS):
# service iptables save
#或者是
# /etc/init.d/iptables restart

下面是一个简单的FreeBSD / OpenBSD / NetBSD pf 防火墙规则(vi /etc/pf.conf)

通用BSD系统打开3306端口:

pass in on $ext_if proto tcp from any to any port 3306

或者只允许web服务器(IP为10.5.1.3)等访问

pass in on $ext_if proto tcp from 10.5.1.3 to any port 3306  flags S/SA synproxy state

步骤# 8: 测试远程连接

从你自己的机器上测试连接:
$ mysql -u webadmin –h 65.55.55.2 –p
参数说明,

  • -u webadmin: webadmin 是Mysql的用户名
  • -h IP或者主机名: 65.55.55.2 是MySQL的IP或正式主机域名
  • -p :弹出输入密码窗口

还可以使用telnet或nc命令来测试3306连接:
$ echo X | telnet -e X 65.55.55.2 3306
或NC
$ nc -z -w1 65.55.55.2 3306
输出结果:

Connection to 65.55.55.2 3306 port [tcp/mysql] succeeded!
推荐内容