上一篇
Linux服务器如何连接数据库
- Linux
- 2025-07-03
- 5
在Linux服务器上建立数据库连接,需安装数据库软件如MySQL或PostgreSQL,配置服务启动和用户权限,最后通过命令行工具(如mysql命令)或应用程序接口实现连接。
在Linux服务器上建立与数据库的连接是网站运维、后端开发及数据管理的核心操作,以下以常用的MySQL/MariaDB和PostgreSQL为例,提供详细步骤及安全实践,适用于Ubuntu/CentOS等主流发行版。
准备工作
-
确认数据库信息
- 数据库类型(MySQL/MariaDB/PostgreSQL等)
- 服务器IP地址(如远程数据库需防火墙放行端口:MySQL默认
3306
,PostgreSQL默认5432
) - 用户名、密码及数据库名称
- 权限配置(确保用户有远程访问权限)
-
服务器环境更新
sudo apt update && sudo apt upgrade # Ubuntu/Debian sudo yum update && sudo yum upgrade # CentOS/RHEL
安装数据库客户端工具
MySQL/MariaDB 客户端安装
# Ubuntu/Debian sudo apt install mysql-client # CentOS/RHEL sudo yum install mysql
PostgreSQL 客户端安装
# Ubuntu/Debian sudo apt install postgresql-client # CentOS/RHEL sudo yum install postgresql
连接数据库方法
方法1:命令行直接连接
-
连接本地数据库
mysql -u 用户名 -p # MySQL/MariaDB psql -U 用户名 -d 数据库名 # PostgreSQL
输入密码后进入交互式命令行。
-
连接远程数据库
mysql -h 远程IP -u 用户名 -p # MySQL psql -h 远程IP -U 用户名 -d 数据库名 # PostgreSQL
方法2:通过配置文件连接(安全推荐)
-
创建配置文件避免明文密码:
- MySQL:编辑
~/.my.cnf
[client] host=数据库IP user=用户名 password=密码 database=数据库名
- PostgreSQL:编辑
~/.pgpass
echo "数据库IP:端口:数据库名:用户名:密码" > ~/.pgpass chmod 600 ~/.pgpass # 关键:限制权限仅当前用户可读
- MySQL:编辑
-
简化连接命令:
mysql # 自动读取.my.cnf psql -h 数据库IP -U 用户名 # 自动匹配.pgpass
测试连接与常见问题
基础测试
# MySQL示例:显示所有数据库 mysql -e "SHOW DATABASES;" # PostgreSQL示例:列出所有表 psql -c "dt"
连接失败排查
-
网络与防火墙
telnet 数据库IP 3306 # 测试端口通断(未安装telnet则用`nc -zv IP 端口`)
- 若不通,检查:
- 云服务商安全组规则(如AWS安全组、阿里云ECS规则)
- 本地防火墙:
sudo ufw allow 3306
(Ubuntu)
- 若不通,检查:
-
权限问题
- MySQL:确保用户有远程访问权限
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
- PostgreSQL:修改
pg_hba.conf
# 在末尾添加(允许所有IP访问) host all all 0.0.0.0/0 md5
重启服务:
sudo systemctl restart postgresql
- MySQL:确保用户有远程访问权限
-
服务状态检查
sudo systemctl status mysql # 或 mariadb sudo systemctl status postgresql
安全最佳实践
-
最小权限原则
- 禁止使用
root
账户连接,创建专用数据库用户并限制权限:-- MySQL示例:仅允许访问特定数据库 GRANT SELECT, INSERT ON 数据库名.* TO '用户'@'%';
- 禁止使用
-
加密连接
- 启用SSL/TLS(MySQL需配置
require_secure_transport=ON
;PostgreSQL在postgresql.conf
中设置ssl=on
)。
- 启用SSL/TLS(MySQL需配置
-
密码管理
- 使用强密码(12位以上,含大小写、数字、符号)
- 定期轮换密钥,避免硬编码密码到脚本中。
-
网络隔离
将数据库置于内网,仅允许应用服务器通过私有IP访问。
自动化脚本示例(Python连接)
# 安装依赖:pip install mysql-connector-python psycopg2-binary # MySQL连接示例 import mysql.connector db = mysql.connector.connect( host="IP", user="用户", password="密码", database="数据库名", ssl_disabled=False # 生产环境应启用SSL ) cursor = db.cursor() cursor.execute("SELECT VERSION()") print(cursor.fetchone()) # PostgreSQL连接示例 import psycopg2 conn = psycopg2.connect( host="IP", dbname="数据库名", user="用户", password="密码", sslmode="require" # 强制SSL ) cur = conn.cursor() cur.execute("SELECT version();") print(cur.fetchone())
在Linux服务器连接数据库需关注:客户端安装、权限配置、网络策略及加密传输,优先使用配置文件管理凭证,遵循最小权限原则,并定期审计访问日志(如MySQL的general_log
),复杂环境建议结合连接池(如PgBouncer)或ORM工具优化性能。
引用说明:本文操作基于MySQL 8.0、PostgreSQL 14及Ubuntu 22.04 LTS,参考MySQL官方文档、PostgreSQL官方文档及Linux man pages,安全实践遵循OWASP数据库安全指南。