在Linux服务器上连接数据库,核心流程就是安装客户端工具、获取连接参数、使用命令行或图形化工具完成认证与访问,具体操作取决于数据库类型和你的权限配置。
连接前的准备工作:先搞清楚这三个基础问题
很多人在Linux服务器上连数据库失败,不是因为命令敲错,而是准备工作没做足,动手之前,先确认三件事:
- 数据库类型:MySQL、PostgreSQL、Redis还是MongoDB?不同数据库的客户端工具和连接语法完全不同。
- 监听地址与端口:数据库是否允许外部连接?默认绑定的是127.0.0.1还是0.0.0.0?防火墙是否放行了对应端口?
- 认证方式与账号权限:你的用户名是否允许从当前服务器IP登录?密码认证还是密钥认证?
以最常见的MySQL为例,检查数据库监听状态的命令是:
netstat -tlnp | grep 3306
如果显示0.0.1:3306,说明只允许本机访问,需要在数据库服务器上修改配置文件或使用SSH隧道,否则远程连接必然超时,这个细节是Linux服务器连接数据库教程里最容易忽略的坑。
命令行直连:最可靠、最通用的方式
命令行工具是Linux服务器连接数据库的基石,无论你后续是否使用图形界面,掌握命令行连接方法都能保证在任何环境下完成操作。
MySQL / MariaDB 使用mysql客户端
大多数Linux发行版默认不带mysql客户端,需要先安装,CentOS/RHEL系用yum install mysql,Debian/Ubuntu系用apt install default-mysql-client,安装完成后,连接命令如下:
mysql -h 数据库服务器IP -P 3306 -u 用户名 -p
输入密码后进入交互式界面。-h指定主机,-P指定端口,-u指定用户,如果是本机连接,-h可以省略,执行show databases;可验证连接是否成功。
有些场景下需要一条命令直接执行SQL并退出,适合脚本调用:
mysql -h 192.168.1.10 -u root -p'密码' -e "select version();"
注意密码直接写在命令行存在安全隐患,生产环境建议使用~/.my.cnf配置文件或环境变量。
PostgreSQL 使用psql客户端
PostgreSQL的客户端工具叫psql,安装命令是apt install postgresql-client或yum install postgresql,连接方式:
psql -h 数据库IP -p 5432 -U 用户名 -d 数据库名 -W
-d指定要连接的数据库,-W强制提示输入密码,连接成功后提示符变为postgres=#,PostgreSQL默认使用peer认证(本机)或scram-sha-256认证(远程),如果遇到认证失败,优先检查pg_hba.conf文件里的规则。
Redis 使用redis-cli
Redis连接最简单,因为它默认没有用户概念,只有密码(如果有的话):
redis-cli -h 192.168.1.20 -p 6379 -a 你的密码
-a参数直接带密码会出现在进程列表中,更安全的做法是先不提供密码,进入后执行auth 你的密码,Redis 6.0以上还支持ACL用户,redis-cli --user 用户名 --pass 密码。
MongoDB 使用mongosh
新版MongoDB的shell工具是mongosh,旧版是mongo,连接带认证的实例:
mongosh "mongodb://用户名:密码@192.168.1.30:27017/数据库名"
注意密码中如果包含特殊字符,需要URL编码,MongoDB连接串格式较复杂,建议先用mongosh --help确认参数。
图形化工具与远程管理:Web界面和桌面客户端
命令行虽然强大,但日常排查数据或查看表结构时,图形界面效率更高,Linux服务器本身通常不装桌面环境,但你可以从本地电脑访问服务器上的数据库,或者用Web版管理工具。
在Linux服务器上安装Web版数据库管理面板
最主流的是Adminer和phpMyAdmin(针对MySQL),以及pgAdmin的Web模式,以Adminer为例,它是一个单PHP文件,部署非常轻量:
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O /var/www/html/adminer.php
前提是服务器已经装了Nginx或Apache以及PHP环境,部署完成后,浏览器访问http://服务器IP/adminer.php,选择数据库类型,输入目标库的连接信息即可,这种方式特别适合内网环境下的临时管理,省去在每台服务器上敲命令的麻烦。
从本地电脑用Navicat或DBeaver远程连接
如果你的Linux服务器数据库允许远程访问,那么本地电脑上的图形客户端是最高效的选择,DBeaver是开源的,支持几乎所有数据库,Navicat更适合深度使用MySQL的用户。
连接前,务必在服务器防火墙放行端口,以CentOS的firewalld为例:
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload
同时修改数据库配置文件绑定地址为0.0.0,并重启数据库服务,不过行业共识认为,直接暴露数据库端口到公网风险极高,稳妥做法是使用SSH隧道:
ssh -L 3306:127.0.0.1:3306 用户名@服务器IP
这条命令把本地3306端口转发到服务器的内部数据库端口,然后本地客户端连接0.0.1:3306即可,无需在防火墙放行数据库端口,安全性提升一个量级。
连接故障排查:最常见的报错和处理方法
连接数据库失败时,错误信息往往已经指了方向,以下是Linux服务器连接数据库实战中最高频的几种情况。
报错:Access denied for user
身份认证失败,可能原因有:
- 用户名或密码错误,重新确认。
- 该用户不允许从当前主机登录,MySQL的用户由
用户名@主机组成,例如'test'@'192.168.1.%'只允许特定网段,用管理员账号执行select user,host from mysql.user;查看授权。 - 密码插件不兼容,例如MySQL 8.0默认使用
caching_sha2_password,旧客户端可能不认识,需要改用mysql_native_password。
报错:Can’t connect to MySQL server
网络不通或服务未启动,按顺序排查:
ping 数据库IP telnet 数据库IP 3306
如果telnet不通,检查防火墙规则和云安全组,如果telnet通但客户端仍然报错,检查数据库bind-address配置和skip-networking选项。
报错:Connection timed out
多数情况下是防火墙拦截或跨网段路由问题,特别是从本地电脑远程连接时,云服务器厂商的安全组策略经常是漏网之鱼,部分机房会屏蔽非标准端口,如果数据库端口不在常见范围内,建议先改为默认端口测试。
安全加固:连接数据库时不能忽视的细节
Linux服务器连接数据库不只是把命令敲通,安全意识同样重要,近年来数据泄露事件频发,连接环节是攻击者最常盯上的入口。
- 禁用root远程连接:数据库管理员账号仅限本机登录,日常使用最小权限账号。
- 使用SSL加密连接:MySQL支持
--ssl-mode=REQUIRED,PostgreSQL通过sslmode=require强制加密,防止数据在传输中被窃听。 - 限制连接来源IP:在数据库层面只允许应用服务器的IP段访问,避免暴露到整个公网。
- 定期更换密码并启用密码策略:复杂程度至少包含大小写字母和数字,长度12位以上。
常见问题解答(FAQ)
Linux服务器连接数据库时如何确认数据库端口是否开放?
使用telnet 数据库IP 端口命令测试,如果显示Connected to则端口开放,也可以使用nc -zv 数据库IP 端口,结果更清晰,如果telnet未安装,用yum install telnet或apt install telnet补装。curl -v telnet://数据库IP:端口也是可行替代方案。
连接MySQL数据库时出现“Host is not allowed to connect to this MySQL server”怎么处理?
这是用户主机限制导致的,用数据库root账号在本机登录后执行:
GRANT ALL PRIVILEGES ON . TO '目标用户'@'来源IP' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
也可以修改现有用户的主机限制,执行UPDATE mysql.user SET host = '192.168.1.%' WHERE user = '目标用户';然后重启MySQL服务,注意来源IP可以写成IP段通配符,但不要直接使用放行所有主机,否则存在较大安全风险。
在Linux服务器上连接PostgreSQL报错“password authentication failed”但密码明明没错,原因是什么?
最常见的原因是远程连接时使用了错误的认证方式,PostgreSQL的pg_hba.conf中,默认对本地连接使用trust或peer认证,对远程连接使用scram-sha-256密码认证,如果配置行里写了md5,而数据库密码是以scram格式存储的,就会认证失败,检查pg_hba.conf中对应IP段的认证方法,改为scram-sha-256,然后执行SELECT pg_reload_conf();重载配置,如果数据库中该用户设置了password_encryption = md5,密码可能被加密为md5格式,而新版本psql默认发送scram认证,两者不匹配也会导致同样的报错。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/789940.html


