Skip to main content

Command Palette

Search for a command to run...

MySQL 和 PostgreSQL 的远程连接设置

Published
•2 min read•View as Markdown
MySQL 和 PostgreSQL 的远程连接设置

本文介绍 MySQL 和 PostgreSQL 数据库如何设置远程连接。

我的环境如下:

  • OS: Ubuntu 22.04
  • DB:
    • MySQL 8.0.37
    • PostgreSQL 14.12

MySQL

MySQL 想要远程从外部连接,需要做一些设置,修改配置文件中的绑定端口,允许远不端口访问,具体步骤如下:

  1. 打开 MySQL 的配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 修改 bind-address 为 0.0.0.0 (如果没有,在 [mysqld] 下新添加 bind-address = 0.0.0.0)
  3. 保存配置文件,并且重启数据库
  4. 确保防火墙开放了 MySQL 默认端口 3306

mysqld.cnf 通常位于 /etc/mysql/mysql.conf.d/mysqld.cnf 或者 /etc/my.cnf。

为远程连接新建一个用户:

-- 创建用户(username)并设置密码(password),`%` 表示允许任何主机连接:
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

-- 授权
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

-- MySQL 8.0 之前的版本需要刷新权限,8.0 之后的版本 GRANT 语句会自动刷新权限
-- FLUSH PRIVILEGES;

注意: MySQL 8.0 及以后的版本使用 GRANT 语句会自动刷新权限,不需要手动执行 FLUSH PRIVILEGES。只有在使用 INSERT、UPDATE 或 DELETE 直接修改授权表时,才需要执行 FLUSH PRIVILEGES。

PostgreSQL

PostgreSQL 允许外部连接,需要做一些设置:

  1. 打开配置 /etc/postgresql/14/main/postgresql.conf
  2. 修改 listen_addresses 为 0.0.0.0
  3. 保存配置文件,并且重启数据库
  4. 确保防火墙开放了 PostgreSQL 默认端口 5432

postgresql.conf 通常位于 /etc/postgresql/<version>/main/postgresql.conf,我使用的版本是 14,因此文件路径为 /etc/postgresql/14/main/postgresql.conf。

除了上面的操作外还需要修改 pg_hba.conf 在文件下添加:

host    all             all             192.168.0.0/16      md5

192.168.0.0/16 允许访问的 IP 网段。

为远程连接新建一个用户:

-- 新建用户
CREATE ROLE username WITH LOGIN PASSWORD 'password';

-- 授权数据库连接权限
GRANT CONNECT ON DATABASE database_name TO username;

-- 授权用户操作数据库
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;

-- 切换到目标数据库后授权 schema 权限
\c database_name
GRANT ALL ON ALL TABLES IN SCHEMA public TO username;
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO username;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA public TO username;

防火墙配置

Ubuntu 默认使用 UFW (Uncomplicated Firewall) 作为防火墙。需要开放数据库端口:

# MySQL (3306 端口)
sudo ufw allow 3306/tcp

# PostgreSQL (5432 端口)
sudo ufw allow 5432/tcp

# 查看防火墙状态
sudo ufw status

验证连接

MySQL 连接验证:

# 命令行连接
mysql -h <服务器IP> -u username -p

# 或使用完整 URL
mysql mysql://username:password@<服务器IP>:3306/database_name

PostgreSQL 连接验证:

# 命令行连接
psql -h <服务器IP> -U username -d database_name

# 或使用完整 URL
psql postgresql://username:password@<服务器IP>:5432/database_name

常见问题排查

  1. 连接被拒绝

    • 检查数据库服务是否运行: systemctl status mysql 或 systemctl status postgresql
    • 检查防火墙配置: sudo ufw status
    • 确认配置文件修改正确并已重启服务
    • 检查服务器 IP 是否正确
  2. 认证失败

    • MySQL: 检查用户名和主机设置是否匹配
    • PostgreSQL: 检查 pg_hba.conf 中的认证方法和允许的 IP 范围
  3. 数据库服务无法启动

    • 检查错误日志:
      • MySQL: /var/log/mysql/error.log
      • PostgreSQL: /var/log/postgresql/postgresql-14-main.log
    • 确认配置文件语法正确

MySQL FAQ

Part 1 of 1

学习和使用 MySQL 中遇到的一些问题。

More from this blog

Upgit 图片管理实战:为 Markdown 博客带来极致高效的图片管理体验

在博客写作的过程中,图片管理是提升效率和内容质量的关键环节。Upgit 作为高效、跨平台的文件上传工具,可以帮助博客创作者将图片便捷地上传至 GitHub,并生成可直接引用的外链,特别适合以 Markdown 写作为核心的写作流程。 Upgit 是一款开源的文件上传工具,项目地址:https://github.com/pluveto/upgit。它能将图片、文档等文件快速上传到 GitHub、Gitee、CDN 以及各类网盘,自动生成直链,特别适合 Markdown 写作、博客创作和团队协作等场...

Oct 5, 20252 min read2

工作日快充信息法宝:Kagi News 和 Huxe 推荐

最近用了一下两个新出的信息工具,体验下来感受挺不一样,整理一下分享给大家:如何用更高效、更智能的方式,每天花极少时间就能掌握需要的信息。 Kagi News Kagi News 是一个主打高效的新闻工具。每天只需要花几分钟,就能快速浏览全球范围内的关键新闻,而且每条内容都带有不同观点和来源。 App Store:https://apps.apple.com/us/app/kagi-news/id6748314243 网页版:https://kite.kagi.com/ 体验亮点: ...

Sep 27, 20251 min read9
工作日快充信息法宝:Kagi News 和 Huxe 推荐

GLM 4.5 配置全攻略:Claude Code 与 Codex 实战指南

简介 智谱最新推出的 GLM 4.5 是一款面向编程和智能应用的通用大模型,相比前一代在代码生成、复杂推理、对话体验等方面有了显著提升。它不仅支持在交互式编程中作为助手使用,还可以集成到 Claude Code 和 Codex 工具中,帮助开发者更高效地完成编码、调试和文档处理等任务。 本文将介绍 GLM 4.5 在 Claude Code 和 Codex 中的配置方法,帮助你快速上手。目前智谱还推出了一个 “编程套餐” GLM Coding Plan,有限时优惠,基础版本 3 个月仅需 60 ...

Sep 27, 20251 min read47
GLM 4.5 配置全攻略:Claude Code 与 Codex 实战指南

我使用的工具:终端篇

作为一名开发者,终端(Terminal)是我们日常工作中接触最频繁的工具之一。它不仅是与操作系统交互的窗口,更是一个可以高度定制、提升效率的利器。在过去的几年里,我尝试了市面上许多主流和新兴的终端应用,从追求性能的 GPU 加速终端,到集成 AI 的新时代终端,各有千秋。 在这里,我想分享一下我个人使用过的终端工具,以及它们各自的特点和我的主观看法。 iTerm2 官网:https://iterm2.com/ 平台:macOS 特点:免费、开源 PS: 我接触 Mac 后使用时间最长的终...

Sep 13, 20253 min read9
我使用的工具:终端篇

Untitled Publication

42 posts

I want to share something.