2003 - Không thể kết nối với MySQL xxx [61 "Kết nối bị từ chối"] 或者 telnet. Không thể kết nối với máy chủ từ xa. Kết nối bị từ chối
为解决该问题查询了很多资料,网上多数方法都无法从根本上解决问题,记录我总结该问题的方法。
直接上最终解决方案。
分析出现该问题的根本原因. mysql用户访问权限。检查mysql用户访问权限root@zqm:~# mysql -u root -p
> use mysql;
> select host,user from user; // 查看用户
> update user set host='%' where user='root'; // 设置host为%,如果执行不成功, 再次查看一下用户权限
> select host,user from user; // 查看用户
> flush privileges; // 刷新权限
> exit; // 退出
复制代码
重新连接数据库, 测试成功,成功连接。如果您的mysql用户访问权限正常,可以尝试从以下几方面调查。
1. 查看访火墙是否开启了3306端口
- 查看防火墙状态
root@zqm:~# sudo ufw status
Status: active
复制代码
如果防火墙是关闭状态,直接忽略掉以下的配置检查。
- 配置防火墙
root@zqm:~# sudo vi /etc/iptables.up.rules // 确保增加了3306端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
复制代码
- 重载防火墙
root@zqm:~# sudo iptables-restore < /etc/iptables.up.rules
复制代码
2. 确认3306端口是否开放
root@zqm:~# netstat -an | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
复制代码
3. 检查数据库是否绑定0. 0. 0. 0
root@zqm:~# sudo vim /etc/mysql/my.cnf // 确定?bind-address = 0.0.0.0
复制代码
4. 端口检查
root@zqm:~# netstat -an | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 32251/mysqld
复制代码
5. telnet测试3306端口是否连通
root@zqm:~# telnet xx.xxx.xxx.xxx 3306
telnet: Unable to connect to remote host: Connection refused
复制代码
6. 检查mysql用户访问权限【以上都只是试错,最关键的这步,这步才是解决问题的一步。】
________số 8_______7. 以上确认配置都正常,重新连接数据库,成功!
Tôi đã tải xuống máy chủ MySQL và cài đặt nó trên máy Mac của mình, nhưng mỗi lần tôi cố gắng kết nối với nó, tôi lại gặp phải lỗi sau
Không thể kết nối với máy chủ MySQL trên '127. 0. 0. 1’ [61]
Có thể có nhiều lý do cho lỗi này, hầu hết trong số đó được đề cập rộng rãi trên mạng, nhưng trong trường hợp của tôi, đó là do MySQL đang chạy trên cổng 3307
Tôi nghĩ rằng cổng đã được cập nhật trong bản cập nhật máy chủ MySQL gần đây, vì tôi chưa bao giờ gặp sự cố này với phiên bản máy chủ MySQL trước đó
Dưới đây là cách kiểm tra xem bạn có gặp vấn đề tương tự hay không và cách thay đổi nó thành cổng 3306 [trừ khi bạn muốn tiếp tục chạy trên cổng 3307]
Đảm bảo máy chủ MySQL đang chạy
Xác nhận máy chủ MySQL đang lắng nghe trên cổng 3307
Chạy lệnh này trong Terminal
$ sudo lsof -i -P | grep -i mysqld
mysqld 51211 _mysql .. 0t0 TCP *:3307 [LISTEN]
mysqld 51211 _mysql .. 0t0 TCP localhost:3307->localhost:54348 [ESTABLISHED]
mysqld 51211 _mysql .. 0t0 TCP localhost:3307->localhost:54350 [ESTABLISHED]
Đây là những gì nó có nghĩa là
- sudo — Chạy với quyền root, vì vậy chúng tôi có thể thấy mọi thứ đang chạy, không chỉ dưới tên người dùng hiện tại
- lsof - Hiển thị thông tin về các tệp mở cho quy trình Unix
- -i — Liệt kê tất cả internet và x. 25 tệp mạng [HP-UX]
- -P — Cấm chuyển đổi số cổng thành tên cổng
- grep mysqld — Chỉ hiển thị các dòng phù hợp với
mysqld
Như bạn có thể thấy, máy chủ MySQL đang chạy trên cổng 3307. Nếu đó là vấn đề của bạn, hãy đọc tiếp, nhưng nếu không, tôi không nghĩ bài đăng này sẽ giải quyết được vấn đề của bạn
Xác nhận cài đặt cổng trong danh sách thuộc tính [plist]
Hóa ra tập tin cấu hình này là thủ phạm
$ defaults read /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Bạn có thể xem cài đặt cổng trên dòng 18
{
Disabled = 0;
ExitTimeOut = 600;
GroupName = "_mysql";
KeepAlive = 0;
Label = "com.oracle.oss.mysql.mysqld";
LaunchOnlyOnce = 0;
ProcessType = Interactive;
Program = "/usr/local/mysql/bin/mysqld";
ProgramArguments = [
"/usr/local/mysql/bin/mysqld",
"--user=_mysql",
"--basedir=/usr/local/mysql",
"--datadir=/usr/local/mysql/data",
"--plugin-dir=/usr/local/mysql/lib/plugin",
"--log-error=/usr/local/mysql/data/mysqld.local.err",
"--pid-file=/usr/local/mysql/data/mysqld.local.pid",
"--port=3307"
];
RunAtLoad = 0;
SessionCreate = 1;
UserName = "_mysql";
WorkingDirectory = "/usr/local/mysql";
}
Cập nhật số cổng từ 3307 thành 3306
Dừng máy chủ MySQL và tạo bản sao lưu của plist hiện tại
$ sudo cp /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist.bak
Chuyển đổi plist thành XML để bạn có thể dễ dàng chỉnh sửa nó
$ sudo plutil -convert xml1 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Chỉnh sửa tệp và thay thế cổng bằng 3306
$ sudo vi /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Disabled
ExitTimeOut
600
GroupName
_mysql
KeepAlive
Label
com.oracle.oss.mysql.mysqld
LaunchOnlyOnce
ProcessType
Interactive
Program
/usr/local/mysql/bin/mysqld
ProgramArguments
/usr/local/mysql/bin/mysqld
--user=_mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
--plugin-dir=/usr/local/mysql/lib/plugin
--log-error=/usr/local/mysql/data/mysqld.local.err
--pid-file=/usr/local/mysql/data/mysqld.local.pid
--port=3306
RunAtLoad
SessionCreate
UserName
_mysql
WorkingDirectory
/usr/local/mysql
Bạn có thể nhanh chóng chuyển đến cổng bằng cách gõ.
$ defaults read /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
0 và nhấn ENTER. Chuyển sang chế độ chỉnh sửa với. $ defaults read /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
1. Lưu tệp với. ESC và $ defaults read /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
2Chuyển đổi plist trở lại nhị phân
$ sudo plutil -convert binary1 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Khởi động máy chủ MySQL và xác nhận cổng 3306
Đây phải là tất cả những gì cần làm. Xác nhận rằng máy chủ MySQL đang chạy trên cổng 3306 bằng lệnh giống như chúng tôi đã sử dụng trước đó
$ sudo lsof -i -P | grep -i mysqld
Tôi đã mất một chút thời gian để tìm ra điều này, nhưng hy vọng bài đăng này sẽ giúp bạn tiết kiệm thời gian khắc phục sự cố