在linux中连接数据库服务器,核心操作路径是:确认网络连通性、安装对应数据库客户端、使用命令行工具完成认证连接。这个过程看似简单,但很多新手容易卡在端口不通、客户端缺失或权限配置上,下面将整个连接流程拆解成几个关键步骤,帮你在实际环境中快速上手。
准备工作:确认网络与端口状态
在敲任何连接命令之前,先确认Linux服务器和目标数据库服务器之间的网络是通的,不少连接失败案例都是因为防火墙拦住了端口,或者云安全组没放行规则。
检查网络连通性,优先使用telnet或nc命令测试数据库端口,比如目标数据库服务器的IP是168.1.100,端口是3306(MySQL默认端口),执行:
telnet 192.168.1.100 3306
如果端口开放,会显示连接成功的提示;如果卡住或提示超时,基本可以断定是网络或防火墙问题,部分最小化安装的Linux没有telnet,可以用nc -zv 192.168.1.100 3306替代。
行业共识认为,大多数连接失败问题集中在端口不可达和客户端版本不匹配,而不是用户名密码错误,建议在排查时先走一遍网络层验证,再纠结认证细节。
安装合适的数据库客户端工具
Linux下连接数据库,通常不需要安装完整的数据库服务端,安装客户端工具即可,不同数据库对应的客户端工具差异较大,这里分场景说明。
MySQL / MariaDB 客户端
在Debian/Ubuntu系系统上,安装命令如下:
sudo apt update sudo apt install mysql-client -y
在CentOS/RHEL系系统上,使用yum:
sudo yum install mysql -y
安装完成后,系统会提供mysql命令行工具,检查版本确认安装成功:
mysql --version
PostgreSQL 客户端
PostgreSQL的客户端工具是psql,在Ubuntu/Debian上安装:
sudo apt install postgresql-client -y
在CentOS上:
sudo yum install postgresql -y
Redis 客户端
Redis数据库使用redis-cli连接,安装方式:
sudo apt install redis-tools -y
或
sudo yum install redis -y
安装完客户端工具后,接下来就是真正的连接操作,有一个常被问到的场景是:在linux中怎么连接数据库服务器做日常管理,其实所有图形化管理工具(如Navicat、DBeaver)底层调用的都是这些命令行客户端的能力,掌握命令行操作是基本功。
核心连接命令与参数详解
连接数据库的命令不长,但参数信息量大,以下是最常用的连接方式。
连接MySQL数据库
基础连接命令格式:
mysql -h 数据库服务器IP -P 端口号 -u 用户名 -p
实际执行时,-p后面不要直接跟密码,回车后系统会提示输入密码,这样避免密码出现在shell历史记录中,完整示例:
mysql -h 192.168.1.100 -P 3306 -u root -p
如果想在脚本中自动连接,需要将密码写在命令里,但不推荐在生产环境这样做,因为ps命令可以看到进程参数,存在安全隐患,更安全的做法是使用配置文件,在用户家目录创建~/.my.cnf,写入:
[client]
host=192.168.1.100
user=root
password=你的密码
然后直接执行mysql即可读取配置文件连接。
连接PostgreSQL数据库
PostgreSQL的连接参数略有不同:
psql -h 192.168.1.100 -p 5432 -U postgres -d 数据库名
这里的-d指定要连接的数据库名称,PostgreSQL默认要求指定数据库,不像MySQL可以在连接后再选择库。
连接Redis数据库
Redis连接方式:
redis-cli -h 192.168.1.100 -p 6379
如果Redis设置了密码,连接后用auth 密码命令认证。
这里需要区分一个高频疑问:linux中连接数据库服务器和连接本地数据库的区别,本地连接通常用socket方式,速度快但只能本机使用;远程连接走TCP/IP协议,需要数据库服务端开启远程监听权限,MySQL还要授权远程访问用户,多数情况下,日常开发用远程连接较多,而DBA做本地维护时用socket连接更安全。
常见连接报错与排查方向
连接过程中遇到报错是必然的,关键在于快速定位原因。
报错:Access denied for user
这个报错表示用户名或密码错误,也可能是该用户没有从当前IP访问的权限,MySQL的授权表控制用户可以从哪些主机登录,如果用户只授权了localhost,那远程连接肯定被拒。
解决办法是登录数据库后执行授权语句:
GRANT ALL PRIVILEGES ON . TO '用户名'@'客户端IP' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
报错:Can’t connect to MySQL server on ‘x.x.x.x’
这个报错说明网络层没走通,按前面的方法检查端口、防火墙和云安全组,另外确认MySQL服务是否在监听所有网络接口,查看MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address参数,如果值为0.0.1,只有本机能连,改为0.0.0并重启服务即可。
报错:psql: could not connect to server
PostgreSQL默认监听localhost,需要修改postgresql.conf中的listen_addresses参数,同时配置pg_hba.conf添加客户端IP的访问规则。
排查连接问题时,在服务端执行netstat -anp | grep 端口号可以查看监听状态。
netstat -anp | grep 3306
如果输出中显示的监听地址是0.0.1:3306,说明数据库只接受本机连接。
连接效率与安全的实操建议
频繁连接数据库的场景下,配置SSH隧道或使用别名可以明显提升效率。
使用SSH隧道加密连接
当数据库服务器只开放了SSH端口(22),没有直接暴露数据库端口时,可以通过SSH隧道进行安全连接,这在云数据库场景中使用较多,也是很多中小公司保护数据库的常用手段。
创建SSH隧道的命令:
ssh -L 本地端口:数据库服务器内网IP:数据库端口 用户名@跳板机IP
ssh -L 3307:10.0.0.5:3306 root@122.51.xx.xx
执行后,连接本机的3307端口,就会通过SSH跳板机转发到内网数据库的3306端口,再执行:
mysql -h 127.0.0.1 -P 3307 -u root -p
配置SSH别名简化连接
经常连接的服务器,可以在~/.ssh/config中配置别名,
Host db-prod HostName 122.51.xx.xx User root Port 22
之后每次连接只需输入ssh db-prod,不用再记IP和端口。
关于数据库连接服务商的选择
实际业务场景中,数据库服务器连接方案的成本因部署方式而异,自建数据库需要购买云服务器,按年付费的云服务器费用根据配置不同,从几百到上万元不等;使用云数据库RDS则按规格和存储计费,但无论哪种服务商,底层在linux中连接数据库的逻辑都是统一的客户端协议,掌握命令行连接方法,换任何环境都能适应,不少运维人员会关注数据库连接工具哪个更好用,对命令行熟悉的人倾向mysql和psql,对可视化依赖强的用户会选择DBeaver或DataGrip,前者轻量、可脚本化,后者直观、适合查看表结构,两者并不冲突,命令行的能力边界明显更大。
FAQ:关于Linux连接数据库的常见疑问
问:linux中连接数据库服务器时提示找不到mysql命令怎么办?
说明系统没有安装MySQL客户端工具,按上文提到的安装命令操作即可,Ubuntu用sudo apt install mysql-client,CentOS用sudo yum install mysql,安装完成后重新执行连接命令。
问:linux中连接数据库服务器总是超时,网络也是通的,怎么排查?
网络通但数据库端口不通,大概率是数据库监听配置问题,在数据库服务器上执行netstat -anp | grep 3306,确认监听地址是否包含客户端可达的IP,如果监听地址是0.0.1,修改配置文件地址为0.0.0并重启数据库服务。
问:连接远程MySQL数据库时,授权不对有什么具体表现?
使用任意账号远程连接时都提示Access denied for user,但本地连接正常,这是MySQL用户表里的host字段限制所致,需要执行GRANT ALL PRIVILEGES ON . TO '账号'@'客户端IP'重新授权,然后FLUSH PRIVILEGES生效。
在linux中连接数据库服务器的核心思路就三件事:确认端口通、客户端装好、认证信息对,把这些基础打牢,无论面对MySQL、PostgreSQL还是Redis,都能用同样逻辑快速定位和解决问题,连接过程中的报错信息是有价值的指引,别急着搜答案,先看报错内容属于网络层、认证层还是权限层,判断方向对了,解决方案往往就在手边。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/715333.html





