如何实现两台Amazon EC2实例间跨实例连接MySQL数据库
Amazon EC2 Ubuntu 20.04 跨实例MySQL远程连接配置指南
适用于实例A(部署MySQL+Laravel)、实例B(仅部署Laravel)的场景,和DigitalOcean的配置逻辑核心差异在EC2安全组层的规则配置,其余MySQL、Laravel侧操作基本一致。
1. 配置实例A的EC2安全组入站规则
这是AWS环境特有的前置配置,安全组是EC2实例的第一层网络防火墙,不配置的话系统内防火墙、MySQL配置全对也连不上:
- 进入EC2控制台找到实例A,点击进入其绑定的安全组配置页
- 添加入站规则:
- 类型选择
MySQL/Aurora,端口默认填充3306,不需要修改 - 源地址禁止填0.0.0.0/0(全量开放会被暴力破解扫描),同VPC场景直接填实例B的私有IP;如果是跨VPC/公网连接,填实例B的公网IP,或者直接选择实例B绑定的安全组作为源(更灵活,后续实例B更换IP不需要改规则)
- 保存规则即可,AWS安全组规则即时生效,不需要重启实例
- 类型选择
2. 调整实例A的MySQL监听配置
Ubuntu 20.04默认安装的MySQL仅监听本地回环地址,外部请求无法到达:
- SSH登录实例A,编辑MySQL核心配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 找到
bind-address = 127.0.0.1配置行,修改为bind-address = 0.0.0.0(如果仅走私网连接,也可以直接填实例A的私有IP,更安全) - 保存退出编辑器,重启MySQL服务让配置生效:
sudo systemctl restart mysql - 执行校验命令
sudo ss -tulpn | grep mysql,返回结果中3306端口的监听地址和你配置的一致即为正常 - 如果你开了Ubuntu自带的ufw防火墙,需要额外执行命令放通对应源的访问:
sudo ufw allow in from <实例B的IP> to any port 3306,未启用ufw可跳过
3. 创建Laravel专属远程访问账号
不要直接用root账号做远程连接,权限过高存在安全风险:
- 登录实例A的MySQL命令行:
mysql -u root -p,输入本地数据库的root密码进入 - 依次执行以下SQL语句,注意替换占位符为实际业务值:
-- 限定账号仅允许从实例B的IP发起连接 CREATE USER 'laravel_biz'@'<实例B的IP>' IDENTIFIED BY '你的高强度数据库密码'; -- 给账号授予业务库的全量操作权限 GRANT ALL PRIVILEGES ON <你的Laravel业务库名>.* TO 'laravel_biz'@'<实例B的IP>'; -- 刷新权限表让配置立即生效 FLUSH PRIVILEGES;
- 注意:账号host部分填的IP必须和安全组放通的源IP完全一致,否则会报1045访问拒绝错误
4. 修改实例B上的Laravel连接配置
- SSH登录实例B,进入Laravel项目根目录,编辑环境配置文件
.env,修改数据库相关配置项:
DB_CONNECTION=mysql DB_HOST=<实例A的连接IP> # 走私网填A的私网IP,走公网填A的公网IP DB_PORT=3306 DB_DATABASE=<你的Laravel业务库名> DB_USERNAME=laravel_biz DB_PASSWORD=你刚才设置的高强度数据库密码
- 保存文件后,清理Laravel的配置缓存避免旧配置生效:
php artisan config:clear && php artisan cache:clear
5. 连通性校验
- 先在实例B上安装MySQL客户端做基础网络、账号校验:
sudo apt update && sudo apt install mysql-client -y - 执行连接命令:
mysql -h <实例A的连接IP> -u laravel_biz -p,输入密码后能正常进入MySQL命令行,说明网络层、账号层配置正常 - 回到Laravel项目根目录执行迁移命令
php artisan migrate,无连接报错、能正常执行迁移即为配置完成
常见踩坑汇总
- 同可用区/同VPC下优先走私有IP连接,不需要经过公网,延迟更低、安全性更高,也不会产生公网流量费用
- 如果连接超时,优先排查安全组规则是否放通、实例A的ufw是否放通、MySQL的bind-address配置是否正确
- 如果报1045访问拒绝,优先排查账号的host配置是否和实例B的出口IP匹配、密码是否正确、权限是否刷新
内容的提问来源于stack exchange,提问作者Danish Tahir
相关产品推荐
相关产品推荐

