在Linux系统中连接数据库是开发运维中的常见需求,不同数据库(如MySQL、PostgreSQL、MongoDB、Redis等)的连接方式和工具略有差异,但核心步骤可归纳为“环境准备→安装客户端→配置连接→执行操作”,以下从通用流程到具体数据库类型展开说明,并附工具对比及常见问题解答。
连接数据库前的准备工作
-
确认数据库服务状态
首需确保目标数据库服务已在Linux服务器启动,可通过systemctl status mysql
(MySQL)、systemctl status postgresql
(PostgreSQL)、systemctl status mongod
(MongoDB)等命令检查服务状态,若未启动需执行systemctl start [服务名]
。 -
获取连接信息
准备数据库的主机地址(IP/域名)、端口号、用户名、密码及数据库名(部分数据库如Redis无需数据库名),若数据库部署在本地,主机通常为localhost
或0.0.1
。 -
配置网络访问(远程连接需设置)
若需远程连接,需确保Linux服务器的防火墙允许数据库端口访问(如MySQL默认3306、PostgreSQL 5432),以firewalld
为例,执行:firewall-cmd --permanent --add-port=3306/tcp # 以MySQL为例 firewall-cmd --reload
数据库需授权远程用户(如MySQL中执行
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';
)。
安装数据库客户端工具
Linux下可通过包管理器或官方方式安装客户端,以下以主流数据库为例:
-
MySQL/MariaDB
使用yum
(CentOS/RHEL)或apt
(Ubuntu/Debian):# CentOS/RHEL yum install mysql-client # Ubuntu/Debian apt install mysql-client
-
PostgreSQL
# CentOS/RHEL yum install postgresql # Ubuntu/Debian apt install postgresql-client
-
MongoDB
官方Yum仓库安装(以CentOS 7为例):yum install -y https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.4/x86_64/RPMS/mongodb-org-shell-4.4.10-1.el7.x86_64.rpm
-
Redis
# CentOS/RHEL yum install redis # Ubuntu/Debian apt install redis-tools
不同数据库的连接方式
命令行连接(最常用)
-
MySQL/MariaDB
基本语法:mysql -h [主机] -P [端口] -u [用户名] -p[密码] [数据库名]
示例(本地连接,需输入密码):mysql -h localhost -P 3306 -u root -p
远程连接(需提前授权):
mysql -h 192.168.1.100 -P 3306 -u remote_user -p123456
-
PostgreSQL
基本语法:psql -h [主机] -p [端口] -U [用户名] -d [数据库名]
示例(本地连接,需输入密码):psql -h localhost -p 5432 -U postgres
远程连接(需配置
pg_hba.conf
允许远程访问):psql -h 192.168.1.100 -p 5432 -U remote_user -d mydb
-
MongoDB
基本语法:mongo [主机]:[端口]/[数据库名] --username [用户名] --password [密码]
示例(本地连接):mongo localhost:27017/admin --username root --password 123456
无需认证的本地连接可简化为:
mongo
-
Redis
基本语法:redis-cli -h [主机] -p [端口] -a [密码]
示例(本地连接,无密码时省略-a
):redis-cli -h localhost -p 6379 -a 123456
编程语言连接(开发场景常用)
以Python为例,需安装对应数据库的驱动库:
-
MySQL
安装驱动:pip install mysql-connector-python
示例代码:import mysql.connector conn = mysql.connector.connect( host="localhost", user="root", password="123456", database="testdb" ) cursor = conn.cursor() cursor.execute("SELECT * FROM users") for row in cursor.fetchall(): print(row) conn.close()
-
PostgreSQL
安装驱动:pip install psycopg2-binary
示例代码:import psycopg2 conn = psycopg2.connect( host="localhost", user="postgres", password="123456", database="testdb" ) cursor = conn.cursor() cursor.execute("SELECT * FROM users") print(cursor.fetchall()) conn.close()
-
MongoDB
安装驱动:pip install pymongo
示例代码:from pymongo import MongoClient client = MongoClient("mongodb://localhost:27017/") db = client["testdb"] collection = db["users"] for doc in collection.find(): print(doc) client.close()
-
Redis
安装驱动:pip install redis
示例代码:import redis r = redis.Redis(host="localhost", port=6379, password="123456") r.set("name", "Linux") print(r.get("name"))
数据库连接工具对比(表格)
数据库类型 | 默认端口 | 命令行工具 | Python驱动库 | 特点 |
---|---|---|---|---|
MySQL | 3306 | mysql | mysql-connector-python | 关系型,广泛使用 |
PostgreSQL | 5432 | psql | psycopg2 | 关系型,支持复杂查询 |
MongoDB | 27017 | mongo | pymongo | NoSQL,文档型存储 |
Redis | 6379 | redis-cli | redis | NoSQL,内存数据库 |
进阶配置:SSL与SSH隧道连接
-
SSL加密连接(增强安全性)
以MySQL为例,需服务器配置SSL证书,客户端连接时添加参数:mysql -h localhost -u root -p --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem
-
SSH隧道连接(穿透防火墙)
若数据库仅允许内网访问,可通过SSH隧道将本地端口转发至数据库服务器:ssh -L 3306:localhost:3306 user@db_server_ip # 本地3306端口映射到数据库服务器的3306
执行后,本地可通过
mysql -h localhost -u root -p
连接,实际流量通过SSH加密传输。
相关问答FAQs
问题1:连接MySQL时提示“Access denied for user ‘user’@’host’”,如何解决?
解答:该错误通常由权限问题导致,需检查三点:
- 用户名/密码错误:确认用户名和密码是否正确,可通过
mysql -u root -p
登录后执行SELECT user, host FROM mysql.user;
查看用户权限。 - Host权限限制:若用户仅允许从特定IP连接(如
'user'@'localhost'
),而实际从远程IP连接,需修改权限:GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password'; -- 允许任意IP(生产环境不推荐) FLUSH PRIVILEGES;
- 防火墙拦截:确认目标服务器防火墙(如iptables、firewalld)允许3306端口访问。
问题2:如何通过SSH隧道安全连接远程PostgreSQL数据库?
解答:假设PostgreSQL服务器IP为168.1.100
,用户名为postgres
,本地可通过以下步骤建立SSH隧道:
- 启动SSH隧道(本地终端执行):
ssh -L 5432:localhost:5432 postgres@192.168.1.100
此命令将本地5432端口映射到远程服务器的5432端口(需输入SSH密码或配置免密登录)。
- 连接本地端口:
psql -h localhost -p 5432 -U postgres -d mydb
实际连接将通过SSH加密隧道转发至远程PostgreSQL服务器,避免直接暴露数据库端口。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27811.html