Linux服务器如何连接数据库
- Linux
- 2025-07-03
- 6
在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 # 自动读取.my.cnf psql -h 数据库IP -U 用户名 # 自动匹配.pgpass
-
网络与防火墙
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
-
服务状态检查
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)。
-
密码管理
- 使用强密码(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数据库安全指南。
测试连接与常见问题
基础测试
# MySQL示例:显示所有数据库 mysql -e "SHOW DATABASES;" # PostgreSQL示例:列出所有表 psql -c "dt"
连接失败排查
安全最佳实践