我使用 nginx 来连接 mysql
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
include /etc/nginx/conf.d/*.conf;
upstream stream_backend {
server xx.xx.xx.4:3306;
server xx.xx.xx.1:3306;
}
server {
listen 3307;
server_name xx.xx.xx.1;
}
}
我使用 mysql 客户端连接到 xx.xx.xx.1:3307 时报告错误
使用 root 用户连接到 xx.xx.xx.1:3307 的 mysql 失败
答案1
在你的 http 部分外面放一些类似这样的内容:
http {
[...]
}
stream {
upstream stream_backend {
server ip_mysql1:3306;
server ip_mysql2:3306;
}
server {
listen ip_nginx:3307;
proxy_pass stream_backend;
}
}
你可以找到很多选择那里改善代理的行为方式。
答案2
原因在于您正在使用上游指令来尝试对 MYSQL 进行负载平衡(应该基于 TCP)。
本指南应该可以帮助您:-
https://www.nginx.com/resources/admin-guide/tcp-load-balancing/
您需要在 stream { } 块内写入上游。