如何在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 / MariaDBsudo apt install mysql-client(Debian系)或 sudo yum install mysql(RHEL系)
  • PostgreSQLsudo apt install postgresql-client(Debian系)或 sudo yum install postgresql(RHEL系)
  • Oracle:需要单独下载Oracle Instant Client,解压后配置LD_LIBRARY_PATH,或者直接装sqlplus包
  • Redissudo 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

如果你习惯终端操作又想要高亮提示,myclipgcli是很好的补充,安装后输入和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.1mysql -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

相关推荐

  • 能连WiFi的打印机怎么连接到服务器,连接失败怎么办?

    能连WiFi的打印机连接到服务器,核心思路是把打印机当作网络节点,通过固定IP地址或主机名让服务器能稳定找到它,再在服务器上添加网络打印机并安装驱动,整个过程大约需要15分钟,难点集中在IP地址设置和端口配置上,下面按实操顺序,一步步拆解,准备工作:先搞清打印机和服务器各自的角色大部分家用或小型办公场景,服务器……

    2026年8月27日
    1300
  • AIoT模组是什么,AIoT模组应用场景有哪些

    AIoT模组作为物联网与人工智能融合的核心载体,正成为智能硬件升级的关键驱动力,其通过集成通信、计算与感知能力,显著降低设备智能化门槛,推动产业从“万物互联”向“万物智联”跨越,核心优势:高效赋能智能化转型AIoT模组的核心价值在于将复杂的AI算法与通信功能模块化,使传统设备快速具备数据采集、边缘计算及远程控制……

    2026年3月15日
    14100
  • 构造二叉树java,java中如何根据前序和后序遍历构造二叉树

    构造二叉树的核心在于明确遍历序列的组合逻辑,通常通过前序与中序、或后序与中序的唯一对应关系,结合递归算法在Java中高效实现节点的构建与内存分配,在Java开发领域,二叉树的构建不仅是数据结构面试的常客,更是处理层级数据、解析表达式或构建决策树等实际业务场景的基础,很多开发者在面对“如何根据数组构造二叉树”这类……

    程序编程 2026年5月25日
    4400
  • PS4国行版为什么连不上服务器,怎么解决?

    PS4国行版连不上服务器,最直接的排查顺序是:先看网络硬件,再改DNS,最后检查账号区域和系统设置,多数情况下改DNS或重启光猫就能解决,ps4国行连不上服务器,问题出在哪一层国行PS4和其他版本在硬件上没有区别,但系统固件和服务器策略不同,连不上服务器这个现象背后,可能是网络环境问题、DNS解析故障、系统版本……

    程序编程 2026年9月9日
    500
  • AIoT岗位有哪些?AIoT工程师需要掌握哪些技能

    AIoT岗位并非单一工种,而是涵盖算法研发、嵌入式开发、云平台运维及行业解决方案架构等全链路的复合型职业集群,核心在于打通“感知-传输-决策-执行”闭环,随着物联网设备数量呈指数级增长,单纯连接已无法满足需求,智能化成为必然趋势,这一转变催生了大量新兴职位,它们不再局限于传统的IT或硬件领域,而是要求从业者具备……

    2026年6月13日
    4510
  • 重装操作系统会不会额外收取费用,重装系统收费吗

    重装操作系统通常不会额外收取费用,在绝大多数正规云服务商处,自助重装系统都是免费的基础服务,包含在实例生命周期管理中,免费重装为何是行业常态云服务商将系统重装功能做得如此便捷,底层逻辑是降低用户运维门槛,通过自动化控制面板,用户只需选择镜像、确认操作,几分钟内即可完成系统初始化,这个过程由平台自动完成,不涉及人……

    2026年8月1日
    1100
  • 两个WinCC服务器怎么控制客户端?,怎么配置客户端连接

    用两个WinCC服务器控制客户端,核心做法就是配置WinCC冗余服务器对(Server Pair),让两台服务器一主一备协同工作,客户端通过统一项目路径访问,主站故障时备站自动接管,整个过程对操作员几乎无感知,WinCC冗余服务器配置步骤:两台服务器怎么分工才对先说清楚架构,两个服务器不是各管一半客户端,而是同……

    2026年9月8日
    300
  • 广电网络怎么连接路由器设置无线路由器?广电宽带路由器怎么设置才能上网

    广电网络连接路由器并设置无线上网,核心在于认清入户接口类型(光纤或同轴电缆),通过光猫或EOC终端转换出网线,再接入路由器WAN口,最后登录管理后台完成拨号或动态IP配置即可正常使用,广电网络入户形态与物理连接辨识广电入户接口类型当前广电网络已全面向全光网演进,但部分地区仍保留同轴电缆入户,连接前需先确认入户形……

    2026年4月24日
    6700
  • excel2003求平均值怎么操作?excel2003求平均函数公式

    在Excel 2003中求平均值,最直接的方法是使用工具栏上的“自动求和”下拉菜单选择“平均值”,或者在单元格中输入=AVERAGE函数公式,虽然Excel 2003是一款发布多年的经典软件,但在许多传统企业、政府机构以及老旧系统的维护场景中,它依然是处理基础数据的核心工具,对于许多习惯了新版界面或仅使用WPS……

    2026年7月4日
    19200
  • 服务器cpu一直满载怎么办?服务器CPU占用率高原因与解决方法

    服务器CPU持续满载通常是系统架构缺陷、代码逻辑错误或遭遇异常流量的综合表现,必须立即进行资源隔离与瓶颈定位,否则将导致服务雪崩,解决这一问题的核心逻辑在于:从顶层架构到底层代码进行全链路排查,区分是业务增长带来的正常压力还是系统故障引发的异常消耗,并采取针对性的垂直或水平扩展策略,同时优化软件层面的执行效率……

    2026年4月11日
    8200

发表回复

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