当前位置:首页 > Linux > 正文

Linux服务器如何连接数据库

在Linux服务器上建立数据库连接,需安装数据库软件如MySQL或PostgreSQL,配置服务启动和用户权限,最后通过命令行工具(如mysql命令)或应用程序接口实现连接。

Linux服务器上建立与数据库的连接是网站运维、后端开发及数据管理的核心操作,以下以常用的MySQL/MariaDB和PostgreSQL为例,提供详细步骤及安全实践,适用于Ubuntu/CentOS等主流发行版。


准备工作

  1. 确认数据库信息

    • 数据库类型(MySQL/MariaDB/PostgreSQL等)
    • 服务器IP地址(如远程数据库需防火墙放行端口:MySQL默认3306,PostgreSQL默认5432
    • 用户名、密码及数据库名称
    • 权限配置(确保用户有远程访问权限)
  2. 服务器环境更新

    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

    输入密码后进入交互式命令行。

  • 连接远程数据库

    Linux服务器如何连接数据库  第1张

    mysql -h 远程IP -u 用户名 -p  # MySQL
    psql -h 远程IP -U 用户名 -d 数据库名  # PostgreSQL

方法2:通过配置文件连接(安全推荐)

  1. 创建配置文件避免明文密码:

    • MySQL:编辑 ~/.my.cnf
      [client]
      host=数据库IP
      user=用户名
      password=密码
      database=数据库名
    • PostgreSQL:编辑 ~/.pgpass
      echo "数据库IP:端口:数据库名:用户名:密码" > ~/.pgpass
      chmod 600 ~/.pgpass  # 关键:限制权限仅当前用户可读
  2. 简化连接命令:

    mysql  # 自动读取.my.cnf
    psql -h 数据库IP -U 用户名  # 自动匹配.pgpass

测试连接与常见问题

基础测试

# MySQL示例:显示所有数据库
mysql -e "SHOW DATABASES;"
# PostgreSQL示例:列出所有表
psql -c "dt"

连接失败排查

  1. 网络与防火墙

    telnet 数据库IP 3306  # 测试端口通断(未安装telnet则用`nc -zv IP 端口`)
    • 若不通,检查:
      • 云服务商安全组规则(如AWS安全组、阿里云ECS规则)
      • 本地防火墙:sudo ufw allow 3306(Ubuntu)
  2. 权限问题

    • 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

  3. 服务状态检查

    sudo systemctl status mysql    # 或 mariadb
    sudo systemctl status postgresql

安全最佳实践

  1. 最小权限原则

    • 禁止使用root账户连接,创建专用数据库用户并限制权限:
      -- MySQL示例:仅允许访问特定数据库
      GRANT SELECT, INSERT ON 数据库名.* TO '用户'@'%';
  2. 加密连接

    • 启用SSL/TLS(MySQL需配置require_secure_transport=ON;PostgreSQL在postgresql.conf中设置ssl=on)。
  3. 密码管理

    • 使用强密码(12位以上,含大小写、数字、符号)
    • 定期轮换密钥,避免硬编码密码到脚本中。
  4. 网络隔离

    将数据库置于内网,仅允许应用服务器通过私有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数据库安全指南。

0