一般来说mysql安装时都是关闭远程连接的,但是如果一台电脑需要多个网站连接,而这些网站又不是自己服务器上,那么就需要把mysql数据库的远程开启,开启mysql远程登录的用户都是存储在mysql数据库中的user表中。默认情况下,Mysql为了安全起见是不支持远程访问和连接的。不过有的时候,工作需要你要从家里或者网页来访问Mysql,本文就介绍下怎么在Linux系统上给Mysql创建一个远程连接的账户,支持远程访问.
任务: MySQL服务远程访问权限
你需要执行下面的这些命令,让Mysql运行支持远程连接.
步骤# 1: 登录到SSH
首先通过ssh登录到Mysql数据库服务器去,然后使用root进入Mysql:
或者直接使用ssh登录
步骤# 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!