在Linux环境下开启数据库远程连接,需先修改数据库配置文件(如MySQL的my.cnf、PostgreSQL的postgresql.conf),将bind-address设为0.0.0.0或指定IP;创建具有远程访问权限的用户(如MySQL的'GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'password');开放防火墙端口(如MySQL默认3306,PostgreSQL默认5432),注意事项:务必限制允许远程访问的IP,避免使用弱密码;关闭SELinux或调整策略;测试连接时注意网络可达性,确保数据库服务正常运行,同时需考虑数据库版本差异,避免配置错误导致服务异常。
在Linux服务器部署数据库后,常需从远程客户端(如管理工具、应用程序)进行访问,开启远程连接需同时修改数据库配置、防火墙规则及用户权限,本文以MySQL和PostgreSQL为例,详细讲解操作步骤及安全注意事项。
前置准备:确认数据库服务状态
开启远程连接前,需确保数据库服务已在Linux服务器正常运行,以MySQL和PostgreSQL为例,使用以下命令检查状态:
- MySQL:
systemctl status mysql(或mysqld,取决于安装方式) - PostgreSQL:
systemctl status postgresql
若服务未运行,可通过systemctl start mysql/postgresql启动,并设置开机自启:systemctl enable mysql/postgresql。

修改数据库配置文件
数据库默认仅允许本地连接(bind-address=127.0.0.1或listen_addresses=localhost),需修改配置以监听远程IP。
MySQL(以8.0为例)
- 配置文件位置:通常为
/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/my.cnf,可通过mysql --help | grep "Default options"查找)。 - 修改步骤:
用编辑器(如vi)打开文件,找到bind-address参数,将其值修改为:0.0.0:允许任意IP连接(不推荐,存在安全风险);服务器IP:仅允许指定服务器IP(如168.1.100)。
示例:bind-address = 0.0.0.0
- 保存退出:执行
wq(vi编辑器)。
PostgreSQL(以13为例)
- 配置文件位置:通常为
/etc/postgresql/13/main/postgresql.conf(版本号可能不同,通过find / -name postgresql.conf查找)。 - 修改步骤:
打开文件,找到listen_addresses参数,默认为localhost,修改为:- 允许任意IP连接;
'服务器IP':仅允许指定IP。
示例:listen_addresses = '*'
- 保存退出:
wq。
配置数据库用户远程访问权限
修改配置后,需为数据库用户授予远程连接权限(避免直接使用root/admin等高权限用户)。
MySQL
- 登录数据库:
mysql -u root -p(输入root密码)。 - 创建远程用户(可选):若需新用户,执行:
CREATE USER 'remote_user'@'%' IDENTIFIED BY '强密码';
remote_user:用户名;- 允许任意IP连接(可替换为具体IP,如
'192.168.1.101'); '强密码':需包含大小写字母、数字及特殊字符。
- 授权:授予指定数据库的远程访问权限(如
test_db):GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%';
- 刷新权限:
FLUSH PRIVILEGES;
PostgreSQL
- 登录数据库:
sudo -u postgres psql(以postgres超级用户登录)。 - 修改pg_hba.conf:该文件控制客户端认证,路径为
/etc/postgresql/13/main/pg_hba.conf(与postgresql.conf同目录)。
打开文件,添加以下规则(允许任意IP以md5加密方式连接):host all all 0.0.0.0/0 md5
host:使用TCP连接;all:所有数据库;all:所有用户;0.0.0/0:任意IP(可替换为168.1.0/24等网段);md5:密码加密方式(推荐,避免明文传输)。
- 创建远程用户(可选):
CREATE USER remote_user WITH PASSWORD '强密码';
- 授权:授予所有数据库权限(谨慎使用):
GRANT ALL PRIVILEGES ON DATABASE test_db TO remote_user;
配置Linux防火墙
Linux防火墙(如iptables、firewalld、ufw)默认会拦截远程端口,需开放数据库端口(MySQL默认3306,PostgreSQL默认5432)。
firewalld(CentOS/RHEL 7+)
- 检查防火墙状态:
systemctl status firewalld(若未启动,执行systemctl start firewalld)。 - 永久开放端口:
# MySQL(3306端口) firewall-cmd --permanent --add-port=3306/tcp # PostgreSQL(5432端口) firewall-cmd --permanent --add-port=5432/tcp
- 重新加载防火墙:
firewall-cmd --reload
iptables(CentOS/RHEL 6及以下)
- 开放端口:
# MySQL iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # PostgreSQL iptables -A INPUT -p tcp --dport 5432 -j ACCEPT
- 保存规则:
service iptables save
ufw(Ubuntu/Debian)
- 检查防火墙状态:
ufw status(若未启用,执行ufw enable)。 - 开放端口:
# MySQL ufw allow 3306/tcp # PostgreSQL ufw allow 5432/tcp
重启数据库服务使配置生效
修改配置文件和防火墙后,需重启数据库服务以加载新配置:
- MySQL:
systemctl restart mysql - PostgreSQL:
systemctl restart postgresql
测试远程连接
使用客户端工具(如Navicat、DBeaver)或命令行测试连接:
- 命令行测试(MySQL):
mysql -h 服务器IP -u remote_user -p(输入密码后若能登录成功,则配置成功)。 - 命令行测试(PostgreSQL):
psql -h 服务器IP -U remote_user -d test_db(输入密码后若进入数据库,则配置成功)。
安全注意事项
- 限制访问IP:避免直接使用允许任意IP,建议仅开放可信IP(如
168.1.0/24),降低安全风险。 - 使用强密码:数据库用户密码需包含大小写字母、数字及特殊字符,避免弱密码。
- 关闭root远程访问:MySQL默认禁止root远程登录,PostgreSQL默认仅允许本地连接,无需额外关闭。
- 定期更新数据库:及时修复漏洞,避免利用已知漏洞攻击。
- 启用SSL/TLS加密:对于生产环境,建议配置数据库SSL加密,防止数据传输被窃听(MySQL需配置
ssl-ca等参数,PostgreSQL需修改ssl配置)。
开启Linux数据库远程连接需完成“修改数据库配置→配置用户权限→开放防火墙端口→重启服务”四步,核心是确保数据库监听远程IP、用户有远程访问权限、防火墙允许端口通信,操作时务必注意安全,避免因配置不当导致服务器被入侵。
文章版权声明:除非注明,否则均为XMSDN - MSDN原版系统镜像 | 纯净ISO系统下载原创文章,转载或复制请以超链接形式并注明出处。


