如何在Linux中连接数据库服务器?数据库连接失败怎么办

在Linux中建立数据库连接,本质就是安装对应的客户端工具,然后用正确的协议、账号和网络参数去访问目标库服务,这篇文章把命令行、远程配置、图形工具和常见故障一次讲透,实操可直接复制命令。

连接数据库前,先把这三样东西准备好

动手之前,先确认三个基础条件:数据库服务端地址和端口、可用的账号密码、以及Linux本机已安装对应客户端,缺任何一样,后面的命令都会报错。

网站正常运行中,突然报错无法连接数据库,wordpress建立数据库连接错误,discuz database error (0)notconnect,如何解决?
加载中
网站正常运行中,突然报错无法连接数据库,wordpress建立数据库连接错误,discuz database error (0)notconnect,如何解决?

怎么确认数据库服务端信息

如果你连接的是内网数据库,先和DBA或运维确认三件事:服务IP是内网地址还是外网地址、监听端口(MySQL默认3306,PostgreSQL默认5432,Oracle默认1521)、账号是否允许从你的主机登录,这三个信息可以通过一条命令快速验证网络通不通:

telnet 192.168.1.10 3306

如果黑屏或提示连接成功,说明端口开放;如果提示Connection refused或超时,说明网络层面有问题,这比排查客户端配置快得多,现在多数Linux发行版默认没装telnet,可以用nc -zv 192.168.1.10 3306替代,效果一样,但输出更简洁。

安装命令行客户端

不同数据库对应的客户端工具不一样,下面按数据库类型分别说明安装命令,以Debian/Ubuntu系和RHEL/CentOS系为例:

  • MySQL / MariaDB:sudo apt install mysql-client(Debian系)或 sudo yum install mysql(RHEL系)
  • PostgreSQL:sudo apt install postgresql-client(Debian系)或 sudo yum install postgresql(RHEL系)
  • Oracle:需要单独下载Oracle Instant Client,解压后配置LD_LIBRARY_PATH,或者直接装sqlplus包
  • Redis:sudo apt install redis-tools,这个只能用于Redis连接,不做SQL类查询

安装完成后,先看一下版本号,确认装成功:mysql --version,如果返回版本信息,说明客户端可用。

linux连接mysql数据库命令,一条命令搞定

这是日常最高频的场景,社区和招聘需求里最常见的表述就是linux连接mysql数据库命令,实际上标准命令是这样的:

mysql -h 192.168.1.10 -P 3306 -u root -p

-h指定主机地址,-P指定端口(大写,小写-p是密码参数),-u指定用户名,-p表示回车后输入密码,如果你要连接同一台机器上的本地MySQL,并且服务端允许socket连接,直接输入mysql -uroot -p就能连上,不需要写IP和端口,这属于localhost下的快速通道。

常用参数组合,实际工作里就这几招

以下几种连接方式覆盖了绝大多数真实使用场景:

  • 指定数据库直连:

    如何在Linux中连接数据库服务器?数据库连接失败怎么办

    mysql -h192.168.1.10 -uroot -p'密码' test_db,密码紧跟-p后面不要有空格,执行完直接进入指定库

  • 带SSL加密连接:mysql -h192.168.1.10 -uroot -p --ssl-mode=REQUIRED,强制使用加密传输,防止明文嗅探
  • 连接时指定字符集:mysql -h192.168.1.10 -uroot -p --default-character-set=utf8mb4
  • 执行单个SQL后自动退出:mysql -h192.168.1.10 -uroot -p -e "show databases;",适合写脚本批量巡检

需要注意的是,MySQL 8.0默认认证插件是caching_sha2_password,如果你的Linux客户端版本太老(低于5.7),会提示认证插件无法加载,据MySQL官方文档确认,解决方法是升级客户端到8.0版本,或者把服务端账号改回mysql_native_password认证,这是最容易踩的坑之一。

连接成功后怎么确认和切换

连上之后,MySQL终端会显示mysql>提示符,先用一条命令确认当前连接的服务器IP和你操作的是哪个库:

select current_user(), now();
show databases;
use test_db;

use切换目标库后,之后的SQL都会在这个库上执行。

linux远程连接数据库服务器,配置没到位一定连不上

linux远程连接数据库服务器和本地最大的区别在于:服务端不监听外部请求、防火墙拦截、账号授权不足,三个问题里随便遇到一个就会失败,这不是客户端命令能解决的,得回到服务端改配置。

绑定地址必须从localhost改过来

默认情况下,MySQL和PostgreSQL只监听127.0.0.1,也就是只接受本机连接,修改方式:

  • MySQL:编辑/etc/mysql/mysql.conf.d/mysqld.cnf,找到bind-address = 127.0.0.1,改成bind-address = 0.0.0.0(监听所有网卡)或指定内网IP如168.1.10
  • PostgreSQL:编辑/etc/postgresql/16/main/postgresql.conf,把listen_addresses = 'localhost'改成listen_addresses = ''
  • MariaDB:配置文件在/etc/mysql/mariadb.conf.d/50-server.cnf,同样的修改逻辑

改完必须重启服务:MySQL用sudo systemctl restart mysql,PostgreSQL用sudo systemctl restart postgresql,这一步忘了做,后面全白搭。

防火墙放行与账号授权

服务监听地址改完,还要检查防火墙,以Ubuntu的ufw为例:

sudo ufw allow 3306/tcp
sudo ufw status

如果用的是firewalld(常见于CentOS),命令是sudo firewall-cmd --add-port=3306/tcp --permanent --reload,内网环境还要确认云安全组是否放行了对应端口,这是云厂商控制台层面的事,不在Linux系统里。

账号授权也不能忽略,MySQL默认的root账号在%上通常没有远程权限,需要单独创建远程访问账号:

如何在Linux中连接数据库服务器?数据库连接失败怎么办

create user 'appuser'@'%' identified by 'StrongPass123';
grant all privileges on test_db. to 'appuser'@'%';
flush privileges;

表示允许任意主机连接,如果只想让某个固定IP连接,把换成具体IP更安全,例如'appuser'@'192.168.1.50'。

Linux之间直连,ssh隧道是加密替代方案

如果数据库端口不方便直接对外开放,可以用SSH隧道转发,在客户端机器上执行:

ssh -L 3306:localhost:3306 user@db_server_ip

这条命令把本地3306端口通过SSH隧道映射到数据库服务器的3306端口,之后用mysql -h127.0.0.1 -P3306连接,实际访问的是远程数据库,但流量全程走SSH加密通道,相比直接暴露端口,安全性高出不少,配置也简单,很多团队在生产环境都这么干。

图形化工具:Linux桌面环境下更直观的连接方案

服务器上只能用命令行,但在自己的Linux桌面机做开发和运维,图形化工具效率更高,以下几个工具在Linux环境下的支持度比较好。

DBeaver Community:开源免费,一工具连所有库

DBeaver基于Java运行,支持MySQL、PostgreSQL、Oracle、SQLite、Redis等几乎所有常见数据库,安装方式:

sudo snap install dbeaver-ce

或去官网下载Linux安装包,它的优势是单一工具解决所有连接需求,无需为每种数据库单独装GUI客户端,连接时填写主机、端口、数据库名、用户名密码即可,还能保存连接配置下次直接打开。

Navicat家族:功能全面但付费

Navicat在Linux下可用,支持MySQL和PostgreSQL版本,界面和Windows端一致,它的特点是数据同步、结构同步、导入导出工具齐全,适合需要频繁做数据迁移的运维场景,缺点是授权费用不低,个人开发用可能会觉得不划算。

命令行重度用户:推荐使用mycli和pgcli

如果你习惯终端操作又想要高亮提示,mycli和pgcli是很好的补充,安装后输入和mysql一样,但带了自动补全和语法高亮,体验贴近IDE:

sudo apt install mycli
mycli -h192.168.1.10 -uroot -p

工具对比,按需求选合适的

如何在Linux中连接数据库服务器?数据库连接失败怎么办

工具 支持数据库 是否免费 适合场景 安装复杂度
DBeaver Community 全类型 是 日常开发、多库管理 低
Navicat for MySQL MySQL/MariaDB 否 数据迁移、结构同步 低
mycli / pgcli MySQL/PostgreSQL 是 终端重度用户 低
VS Code Database插件 多类型 是 前端全栈开发副带 中

连接失败原因,按这个顺序排查

连接报错时,先看错误提示,再按层级排查,给你一个通用的排查路径。

第一层:网络连通性

这里最常见的报错是Can't connect to MySQL server on 'x.x.x.x',可能原因包括:IP地址写错、端口不对、防火墙拦截,用nc -zv IP 端口测试是否通,如果不通,回到服务端查监听状态。

第二层:服务端配置

ss -tlnp | grep 3306可以查看MySQL是否在监听外部端口,如果只有127.0.0.1:3306,说明bind-address没改,如果是0.0.0:3306或具体IP,检查服务端防火墙。

第三层:认证与授权

接下来最常见的报错是Access denied for user 'xxx'@'xxx',这个报错说明服务端连通,但是账户认证没通过,先用正确的密码在服务端本地尝试登录,确认密码无误后,再检查授权:

select user, host from mysql.user;

看目标账号的host是否包含你当前客户端所在IP网段,如果host字段是localhost,远程永远无法登录,改为或具体网段后重启。

第四层:客户端版本兼容性

前面提到的MySQL 8.0认证插件问题就属于这一类,报错信息表现为Authentication plugin 'caching_sha2_password' cannot be loaded,解决方法是升级客户端到MySQL 8.0以上版本,或者修改账号认证插件:

alter user 'appuser'@'%' identified with mysql_native_password by 'StrongPass123';

行业共识认为,从安全角度考虑应优先升级客户端,而不是降低认证插件等级。

常见问题快速问答

Linux下连接数据库提示command not found怎么办?

说明客户端工具未安装,确认数据库类型后,按文中对应命令安装客户端,以Ubuntu连接MySQL为例执行sudo apt install mysql-client,CentOS执行sudo yum install mysql即可。

输入密码后提示Access denied但密码确实是对的?

优先检查账号对应的host授权范围。mysql -h127.0.0.1与mysql -h192.168.1.10连接看到的主机级别不同,服务端会将客户端IP匹配到mysql.user表的host字段,如果host为localhost,只能从本机socket方式登录,建议将远程账号host设为或固定内网段,同时确认服务端bind-address已改为0.0.0。

能ping通数据库服务器但为什么连接超时?

ping通只能说明ICMP协议可达,不能代表TCP端口可达,检查云安全组入方向规则和Linux防火墙是否放行对应数据库端口,用nc -zv IP 3306做端口测试,如果超时,基本可以确定是防火墙拦截,按文中firewalld或ufw的命令配置放行。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/673694.html

赞 (0)
服务器采购网站有哪些靠谱的,怎么选不踩坑?
上一篇 2026年9月21日 20:24
dota2怎么查自己的服务器ip地址,具体操作步骤是什么
下一篇 2026年9月21日 20:34

相关推荐

  • 云服务器CentOS系统怎么还原,操作流程是什么?

    云服务器CentOS系统还原,核心思路是区分“重置系统”和“数据恢复”两个层面:如果没有提前做快照或镜像,重装系统会清除所有数据;如果有快照或备份,则可以回滚到之前的健康状态,这是多数初次接触Linux服务器的站长最常踩的坑,很多朋友把“还原系统”等同于Windows里的“一键还原”,但在CentOS的世界里……

    程序编程 2026年10月22日
    100
  • QQ登不上服务器失败怎么回事,原因有哪些?

    QQ登不上服务器失败,多数情况下是网络环境或客户端缓存出了问题,真正服务器宕机的比例很小, 遇到弹窗别急着卸载重装,先按下面顺序排查,相当一部分临时故障能在几分钟内恢复登录,最像服务器的“锅”,其实在网络层你打开QQ点登录,转圈十几秒后弹出一句“连接服务器失败”,第一反应是腾讯又坏了,这种提示更像你到超市门口……

    2026年10月5日
    100
  • VBA如何判断文件是否存在?Excel VBA判断文件路径是否存在

    在Excel VBA中判断文件是否存在,最稳健且高效的方法是使用FileSystemObject对象的FileExists方法,它能精准识别路径并返回布尔值,避免传统Dir函数在特定网络路径下的兼容性问题,很多开发者在编写自动化报表或数据抓取脚本时,经常遇到“文件未找到”的运行时错误,这通常是因为代码在尝试打开……

    2026年7月6日
    17400
  • 服务器换IP后速度慢怎么回事,如何解决?

    服务器更换IP后变慢,大概率不是新IP本身的问题,而是本地DNS缓存、CDN同步延迟、HELLO包握手异常或网络链路路径变长导致,通常等待解析生效或手动刷新缓存后即可恢复,如果你刚刚给服务器换了新IP,打开网站却感觉明显变卡,先不用急着找机房理论,这类问题绝大多数不是新IP“质量差”,而是整个网络生态还没适应你……

    2026年8月26日
    1000
  • VMISS全场9折VPS低至11元/月怎么选?vps推荐性价比高稳定

    VMISS近期推出的全场9折促销活动,使得其VPS服务价格大幅降低,其中香港、日本、韩国及美国节点均有覆盖,且提供CN2 GIA、AS9929、CMIN2等多条优质回国线路,最低月付仅需11元起,是追求稳定低延迟用户的高性价比选择,在云计算服务日益普及的今天,选择一款既稳定又便宜的VPS并非易事,尤其是对于国内……

    2026年7月7日
    3500
  • mc联机侠怎么总是启动服务器,原因及解决方法

    mc联机侠一直启动服务器,十有八九是Java环境没配对,或者25565端口被你电脑上的其他程序抢了,先把这两样查一遍,再不用反复点那个启动按钮,你盯着“启动服务器”按钮,转圈转了十分钟,就是进不去,别急着卸载重装,问题大概率不在联机侠本身,而在你电脑的环境配置,下面这串排查顺序,能省下大半天的摸索时间,排查mc……

    程序编程 2026年10月21日
    100
  • 索引器断点续传失败后状态如何修复,断点续传失败怎么解决

    索引器断点续传失败后,先停止写入并备份状态目录,修复顺序是校验状态文件、清理损坏快照、重置游标、重启任务,多数情况下不必重建整个索引,只要状态文件没坏透,几分钟就能恢复,索引器为什么会在断点续传时卡死或报错索引器的断点续传机制,本质上靠一个“小账本”记录进度,每条记录包含当前处理到哪个文件、第几行、哪条数据主键……

    2026年9月12日
    200
  • dw打不开显示服务器正在运行中是什么原因,怎么解决

    Dreamweaver提示“服务器正在运行中”无法打开,多数情况是上次异常退出后残留的后台进程和站点缓存锁文件没有释放,先结束Dreamweaver相关进程,再重置站点缓存即可解决,dw显示服务器正在运行中无法打开的原因定位Dreamweaver打开时弹出“服务器正在运行中”或直接卡死在启动画面,这个提示在中文……

    2026年9月15日
    300
  • m系列服务器红灯亮是怎么回事,如何排查故障?

    M系列服务器红灯亮,通常不是“整机报废”的信号,而是硬件健康、电源、硬盘、风扇、温度或管理模块触发了告警;先读带外管理日志,再按灯位定位,多数问题能在线缩小范围,红灯像服务器在值班时举手示意,不代表它立刻要“罢工”,M系列既有传统机架机型,也有刀片形态,红灯可能是前面板健康灯,也可能是某个部件的独立故障灯,先记……

    程序编程 2026年10月22日
    300
  • 为什么5s无法接通激活服务器,怎么解决?

    5s无法接通激活服务器,首选重启并更换网络,检查系统时间,最后用电脑iTunes恢复,绝大多数卡激活问题都在三步之内解决, 作为一款2013年发布的机型,iPhone 5s的激活流程依赖苹果服务器,服务器策略或设备状态异常都会导致卡在激活界面,与其急着送修,不如先按下面思路逐项排查,5s无法接通激活服务器,先分……

    2026年10月14日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注