本文介绍 MySQL 和 PostgreSQL 数据库如何设置远程连接。
我的环境如下:
- OS:Ubuntu 22.04
- DB:
- MySQL 8.0.37
- PostgreSQL 14.12
MySQL
MySQL 想要远程从外部连接,需要做一些设置,修改配置文件中的绑定端口,允许远不端口访问,具体步骤如下:
- 打开 MySQL 的配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf - 修改
bind-address为0.0.0.0(如果没有,在[mysqld]下新添加bind-address = 0.0.0.0) - 保存配置文件,并且重启数据库
- 确保防火墙开放了 MySQL 默认端口 3306
mysqld.cnf通常位于/etc/mysql/mysql.conf.d/mysqld.cnf或者/etc/my.cnf。
为远程连接新建一个用户:
| |
注意:MySQL 8.0 及以后的版本使用 GRANT 语句会自动刷新权限,不需要手动执行 FLUSH PRIVILEGES。只有在使用 INSERT、UPDATE 或 DELETE 直接修改授权表时,才需要执行 FLUSH PRIVILEGES。
PostgreSQL
PostgreSQL 允许外部连接,需要做一些设置:
- 打开配置
/etc/postgresql/14/main/postgresql.conf - 修改
listen_addresses为0.0.0.0 - 保存配置文件,并且重启数据库
- 确保防火墙开放了 PostgreSQL 默认端口 5432
postgresql.conf通常位于/etc/postgresql/<version>/main/postgresql.conf,我使用的版本是 14,因此文件路径为/etc/postgresql/14/main/postgresql.conf。
除了上面的操作外还需要修改 pg_hba.conf 在文件下添加:
| |
192.168.0.0/16 允许访问的 IP 网段。
为远程连接新建一个用户:
| |
防火墙配置
Ubuntu 默认使用 UFW (Uncomplicated Firewall) 作为防火墙。需要开放数据库端口:
| |
验证连接
MySQL 连接验证:
| |
PostgreSQL 连接验证:
| |
常见问题排查
连接被拒绝
- 检查数据库服务是否运行:
systemctl status mysql或systemctl status postgresql - 检查防火墙配置:
sudo ufw status - 确认配置文件修改正确并已重启服务
- 检查服务器 IP 是否正确
- 检查数据库服务是否运行:
认证失败
- MySQL:检查用户名和主机设置是否匹配
- PostgreSQL:检查
pg_hba.conf中的认证方法和允许的 IP 范围
数据库服务无法启动
- 检查错误日志:
- MySQL:
/var/log/mysql/error.log - PostgreSQL:
/var/log/postgresql/postgresql-14-main.log
- MySQL:
- 确认配置文件语法正确
- 检查错误日志:
