在Linux系统上连接数据库服务器,核心操作就是安装对应数据库的客户端工具,然后使用命令行或图形化工具,通过IP地址、端口号、账号密码等信息建立连接。
准备工作:确认连接三要素
动手连接之前,先确认三个基本信息是否在手,缺了任何一个,连接都会失败。
数据库服务器地址:IP地址或者域名,内网环境多为192.168.x.x或10.x.x.x格式。
端口号:默认端口可以省略,非默认端口必须带上,MySQL默认3306,PostgreSQL默认5432,Redis默认6379。
账号与密码:用于认证的数据库用户名和对应密码,确认该账号有从当前Linux主机远程访问的权限。
确认完这三项,就可以进入具体操作了。
linux连接mysql数据库的命令流程
MySQL是Linux服务器上使用率最高的开源数据库,连接操作也最基础。
第一步:安装MySQL客户端
大多数Linux发行版默认不自带mysql命令,需要手动安装。
Debian/Ubuntu系统用apt安装:
sudo apt update sudo apt install mysql-client -y
CentOS/RHEL系统用yum或dnf安装:
sudo yum install mysql -y
安装完成后,输入mysql --version验证是否成功,有版本信息输出,说明客户端就绪。
第二步:执行连接命令
基础连接命令格式如下:
mysql -h 数据库服务器IP -P 端口号 -u 用户名 -p
实际执行时,系统会提示输入密码,输入密码时不显示任何字符,这是正常的安全机制。
连接本机数据库可以简写:
mysql -u root -p
连接远程服务器,假设IP是192.168.1.100,端口是3306,用户是admin:
mysql -h 192.168.1.100 -P 3306 -u admin -p
指定数据库直连,在命令末尾追加数据库名:
mysql -h 192.168.1.100 -u admin -p my_database
第三步:常见连接报错排查
连接失败时,报错信息直接决定了排查方向,不要盲目重试。
| 报错信息 | 原因 | 解决办法 |
|---|---|---|
| Access denied for user | 用户名或密码错误 | 核对账号权限,在数据库端执行FLUSH PRIVILEGES |
| Can’t connect to MySQL server | 网络不通或端口未开放 | 检查防火墙策略,ping测试连通性,telnet测试端口 |
| Host is not allowed to connect | 数据库未授权当前IP | 在数据库端执行GRANT授权,或修改bind-address配置 |
行业共识认为,超过半数的远程连接失败源于端口未在防火墙中放行,登录服务器检查一下firewalld或iptables规则,重点确认3306端口对当前来源IP是ACCEPT状态。
linux数据库连接工具哪个好用
命令行虽然高效,但日常管理多个数据库时,图形化工具效率更高,选择一个合适的工具,可以明显减少重复输入命令的时间。
命令行工具:运维首选
mysql命令、psql命令(PostgreSQL)和redis-cli(Redis)是Linux自带生态的标配,轻量、稳定、不依赖图形界面,在纯命令行服务器环境或SSH远程场景下是唯一选择。
图形化工具:管理效率翻倍
DBeaver:开源免费,支持几乎所有主流数据库(MySQL、PostgreSQL、Oracle、SQL Server等),Linux下安装后,通过JDBC驱动连接,其社区版功能已经足够日常运维使用。
Navicat for MySQL:商业软件,界面友好度高,功能完善,但收费,适合企业采购或预算充足的个人开发者。
DataGrip:JetBrains出品,智能提示功能强大,适合写SQL较多的开发场景,同样需要付费。
图形化工具连接步骤
以DBeaver为例,连接流程如下:
- 下载Linux版本安装包(.tar.gz格式)并解压。
- 运行
dbeaver启动程序。 - 点击左上角”新建连接”图标,选择数据库类型。
- 填写主机、端口、用户名、密码。
- 点击”测试连接”,提示成功即完成配置。
下载DBeaver时要注意选择适配的架构,x86_64服务器和ARM服务器(如华为鲲鹏)使用的安装包不同,选错会导致无法启动。
远程连接PostgreSQL和Redis的差异
不同数据库的连接逻辑有共性,但细节差异常被忽略。
PostgreSQL连接
PostgreSQL默认只监听本地回环地址localhost,要远程连接,必须先修改配置文件。
编辑postgresql.conf,找到listen_addresses,改为:
listen_addresses = ''
再编辑pg_hba.conf,添加允许远程访问的规则:
host all all 192.168.1.0/24 md5
修改完成后重启服务,然后使用psql连接:
psql -h 192.168.1.100 -p 5432 -U postgres -d my_database
如果连接超时,先检查服务器安全组规则,再检查Linux防火墙,最后确认pg_hba.conf是否生效。
Redis连接
Redis属于NoSQL数据库,连接方式有差异,默认无认证,生产环境必须配置密码。
修改redis.conf:
requirepass your_strong_password
bind 0.0.0.0
protected-mode yes
使用redis-cli连接:
redis-cli -h 192.168.1.100 -p 6379 -a your_strong_password
误在命令行直接带-a参数会留下历史记录,建议连接后再执行AUTH命令验证身份,比直接在命令中暴露密码更安全。
各数据库连接参数对比
| 数据库 | 默认端口 | 客户端工具 | 远程连接关键点 |
|---|---|---|---|
| MySQL | 3306 | mysql | 授权远程用户权限,防火墙放行 |
| PostgreSQL | 5432 | psql | 修改listen_addresses和pg_hba.conf |
| Redis | 6379 | redis-cli | 设置密码,绑定监听地址 |
用Python脚本连接数据库的场景
命令行适合临时查询,但自动化运维脚本中,更常用编程语言的数据库驱动。
以Python连接MySQL为例:
pip install pymysql
连接脚本:
import pymysql
conn = pymysql.connect(
host='192.168.1.100',
port=3306,
user='admin',
password='your_password',
database='my_database'
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
print(cursor.fetchone())
cursor.close()
conn.close()
跑通这段代码,说明当前Linux服务器具备通过Python操作数据库的能力,同理,PostgreSQL用psycopg2,Redis用redis-py。
编程连接时特别要注意字符集问题,连接参数中增加charset='utf8mb4',避免中文数据乱码,这是运维过程中相当一部分数据异常问题的根源。
数据库服务器连接的安全底线
连接通了只是第一步,安全问题不能留死角。
限制授权范围:给应用分配的账号,只授予必要库的必要权限,不要直接给ALL PRIVILEGES,比如只读账号就只给SELECT权限,写入操作单独用一个账号。
禁止root远程连接:创建一个专用账号,限定来源IP,比如'appuser'@'192.168.1.%'格式,这样即使密码泄露,影响面也受限。
开启SSL连接:MySQL和PostgreSQL都支持SSL加密传输,数据链路不加密的情况下,密码和明文数据可能被嗅探,生产环境通过--ssl-mode=REQUIRED参数强制加密。
使用SSH隧道:数据库端口对公网不可见,通过SSH隧道访问:
ssh -L 3306:127.0.0.1:3306 user@服务器IP
本地3306端口转发到服务器内网,然后连接0.0.1:3306即可,这是最稳妥的远程连接方案,数据库不用暴露公网端口。
常见问题排查思路
遇到连接不上,按顺序检查,切忌盲目重装。
- ping服务器IP,确认网络链路通不通。
- telnet测试端口,
telnet 192.168.1.100 3306,能连上说明端口已放开,连不上说明防火墙或安全组拦截。 - 检查数据库服务状态,
systemctl status mysqld或systemctl status postgresql,确认服务在运行。 - 查看日志,MySQL日志在
/var/log/mysql/error.log,PostgreSQL日志在/var/log/postgresql/postgresql-版本-main.log,报错信息能直接定位问题。 - 验证账号权限,在数据库服务器本机执行
mysql -u 用户名 -p,本机能连而远程不能连,问题出在授权或网络层。
Q&A:linux数据库怎么连接数据库服务器常见疑问
问:linux连接mysql数据库的命令忘记了怎么办?
答:执行mysql --help查看帮助,或直接输入mysql -u root -p进入交互式环境后,用help;命令查看,更直接的方式是在shell中输入mysql -h IP -P 端口 -u 用户名 -p,回车后按提示输入密码即可,系统会缓存最近执行过的命令,按键盘上方向键↑可以快速找回历史命令。
问:为什么我在Linux上能ping通数据库服务器,但连接MySQL时提示Can’t connect?
答:ping通只能证明ICMP协议可达,不代表3306端口对外开放,按顺序排查:先执行telnet 服务器IP 3306确认端口状态;再检查服务器防火墙规则,CentOS系统用firewall-cmd --list-all查看,Ubuntu系统用sudo ufw status查看;最后确认MySQL是否监听了所有网卡,执行netstat -tlnp | grep 3306,监听地址是0.0.0.0:3306才算正常。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/661696.html





