如何启用对 MySQL 数据库服务器的远程访问?
任务:MySQL 服务器远程访问
您需要输入以下命令来允许远程连接到 mysql 服务器。
步骤 1:使用 SSH 登录(如果服务器位于您的数据中心之外)
首先,通过 ssh 登录到远程 MySQL 数据库服务器。您可能需要以 root 用户身份登录到 MySQL 服务器:
ssh user@server1.example.com ### login as the root using su or sudo ## su # or use sudo ## sudo -i
或者如果允许,直接以 root 用户身份登录:
ssh root@server1.example.com
步骤#2:编辑my.cnf文件
连接后,您需要使用文本编辑器(如 vi)编辑 MySQL 服务器配置文件 my.cnf:
- 如果您使用的是Debian/Ubuntu Linux,则文件位于/etc/mysql/my.cnf位置。
- 如果您使用的是Red Hat Linux/Fedora/Centos Linux,则文件位于/etc/my.cnf位置。
- 如果您使用的是FreeBSD,则需要创建一个文件/var/db/mysql/my.cnf位置。
编辑/etc/my.cnf,运行:
# vi /etc/my.cnf
步骤#3:打开文件后,找到如下行
[mysqld]
确保 skip-networking 行被注释(或删除行)并添加以下行
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 连接。与 mysqld 的所有交互都必须通过 Unix 套接字进行。对于仅允许本地请求的系统,强烈建议使用此选项。由于您需要允许远程连接,因此应从 my.cnf 中删除此行或将其置于注释状态。
步骤# 4 保存并关闭文件
如果您使用的是 Debian / Ubuntu Linux,请键入以下命令重新启动 mysql 服务器:
# /etc/init.d/mysql restart
或者
# systemctl restart mysql
如果您使用的是 RHEL / CentOS / Fedora / Scientific Linux,请键入以下命令重新启动 mysql 服务器:
# /etc/init.d/mysqld restart
或者
# systemctl restart mysqld
如果您使用的是 FreeBSD,请键入以下命令重新启动 mysql 服务器:
# /usr/local/etc/rc.d/mysql-server restart
或者
# service mysql-server restart
步骤 #5 授予远程 IP 地址访问权限
连接到mysql服务器:
$ mysql -u root -p mysql
授予对新数据库的访问权限
如果您想要为用户 bar 和远程 IP 202.54.10.20 添加一个名为 foo 的新数据库,那么您需要在 mysql> 提示符下输入以下命令:mysql> CREATE DATABASE foo;
mysql> GRANT ALL ON foo.* TO bar@'202.54.10.20' IDENTIFIED BY 'PASSWORD';
如何授予对现有数据库的访问权限?
假设您始终从远程 IP 202.54.10.20 为用户 webadmin 的名为 webdb 的数据库建立连接,要授予对此 IP 地址的访问权限,请在 mysql> 提示符下输入以下命令输入现有数据库:
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
输入 exit 命令退出 mysql:mysql> exit
步骤#7:打开端口3306
您需要使用 iptables 或 BSD pf 防火墙打开 TCP 端口 3306。
打开 Linux iptables 防火墙的示例 iptables 规则
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT
或者仅允许来自位于 10.5.1.3 的 Web 服务器的远程连接:
/sbin/iptables -A INPUT -i eth0 -s 10.5.1.3 -p tcp --destination-port 3306 -j ACCEPT
或者仅允许来自您的 LAN 子网 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
FreeBSD / OpenBSD / NetBSD pf 防火墙规则示例 ( /etc/pf.conf )
使用以下命令在基于 BSD 的系统上打开端口 #3306:
pass in on $ext_if proto tcp from any to any port 3306
或者仅允许来自位于 10.5.1.3 的 Web 服务器的访问:
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 地址或主机名 (FQDN)
- -p :提示输入密码
您还可以使用 telnet 或 nc 命令连接到端口 3306 进行测试:
$ echo X | telnet -e X 65.55.55.2 3306
或
$ nc -z -w1 65.55.55.2 3306
示例输出:
Connection to 65.55.55.2 3306 port [tcp/mysql] succeeded!