Kết nối từ xa Mysql Ubuntu


95

Vì một số lý do, tôi không thể kết nối từ xa với máy chủ MySQL của mình. Tôi đã thử mọi cách và vẫn gặp lỗi.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Bây giờ, tôi đã thử chạy

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

và vẫn không có gì! Tôi đang làm gì sai?

EDIT : my.cnfđã nhận xét ra ip ràng buộc.


bạn đang sử dụng phiên bản MySQL nào?
Steve

Phiên bản Server: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon

lệnh này trả về cái gì? ubuntu ~ $ sudo lsof -i -P | grep: 3306
apesa

Câu trả lời:


345

Để hiển thị MySQL với bất kỳ thứ gì khác ngoài localhost, bạn sẽ phải có dòng sau

Đối với phiên bản mysql 5.6 trở xuống

bỏ ghi chú vào /etc/mysql/my.cnfvà gán cho máy tính của bạn địa chỉ IP và không lặp lại

Đối với phiên bản mysql 5.7 trở lên

bỏ ghi chú vào /etc/mysql/mysql.conf.d/mysqld.cnfvà gán cho máy tính của bạn địa chỉ IP và không lặp lại

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Hoặc thêm một bind-address = 0.0.0.0nếu bạn không muốn chỉ định IP

Sau đó dừng và khởi động lại MySQL với mục nhập my.cnf mới. Sau khi chạy, hãy truy cập vào thiết bị đầu cuối và nhập lệnh sau.

lsof -i -P | grep :3306

Điều đó sẽ trở lại một cái gì đó như thế này với IP thực của bạn trong xxx's

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Nếu câu lệnh trên trả về chính xác thì bạn sẽ có thể chấp nhận người dùng từ xa. Tuy nhiên, để người dùng từ xa kết nối với các đặc quyền chính xác, bạn cần tạo người dùng đó trong cả localhost và '%' như trong.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

sau đó,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

và cuối cùng,

FLUSH PRIVILEGES; 
EXIT;

Nếu bạn không có cùng một người dùng được tạo như trên, khi đăng nhập cục bộ, bạn có thể kế thừa các đặc quyền của localhost cơ sở và gặp vấn đề về quyền truy cập. Nếu bạn muốn hạn chế quyền truy cập mà myuser có thì bạn cần phải đọc cú pháp câu lệnh GRANT TẠI ĐÂY Nếu bạn vượt qua tất cả những điều này và vẫn gặp sự cố, hãy đăng thêm một số đầu ra lỗi và dòng my.cnf thích hợp.

LƯU Ý: Nếu lsof không trở lại hoặc không tìm thấy, bạn có thể cài đặt nó TẠI ĐÂY dựa trên bản phân phối Linux của bạn. Bạn không cần lsof để làm cho mọi thứ hoạt động, nhưng nó cực kỳ tiện dụng khi mọi thứ không như mong đợi.


1
Cảm ơn, mặc dù tôi đã thực hiện đúng các bước này lần đầu tiên, tôi đã thực hiện lại chúng khi bạn đăng và làm việc như một sự quyến rũ!
Cristian Eduardo Lehuede Lyon,

14
Đối với bất kỳ ai khác đang gặp khó khăn lsof -i -P | grep :3306, điều đó không hoạt động nhưng kết nối từ xa vẫn hoạt động tốt mà không cần xác nhận đó, hãy bỏ qua nếu bạn không thấy đầu ra phù hợp.
Mike S

@Mike Slutsky Cảm ơn bạn đã ghi chú, tôi đã chỉnh sửa câu trả lời của mình. Bạn có thể cài đặt lsof nếu nó chưa được cài đặt.
apesa

2
FWIW trên nhiều hệ thống sudo lsof -i -Psẽ hữu ích hơn nhiều so với lsof -i -P(giả sử bạn đăng nhập với tư cách người dùng không có đặc quyền).
Dan Passaro

2
lsof -i -P | grep :3306không trả lại bất cứ điều gì!
Màu xanh lá cây

39

Thêm một số điểm vào đầu bài đăng xuất sắc của apesa:

1) Bạn có thể sử dụng lệnh dưới đây để kiểm tra địa chỉ ip máy chủ mysql đang nghe

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Sử dụng FLUSH PRIVILEGESđể buộc tải bảng cấp nếu vì lý do nào đó mà các thay đổi không có hiệu lực ngay lập tức

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == người dùng mà bạn sử dụng để kết nối với mysql ex.root
passwd == mật khẩu mà bạn sử dụng để kết nối với mysql bằng

3) Nếu tường lửa netfilter được bật ( sudo ufw enable) trên máy chủ mysql, hãy làm như sau để mở cổng 3306 để truy cập từ xa:

sudo ufw allow 3306

kiểm tra trạng thái bằng cách sử dụng

sudo ufw status

4) Sau khi kết nối từ xa được thiết lập, nó có thể được xác minh trong máy khách hoặc máy chủ bằng các lệnh

netstat -an | grep 3306
netstat -an | grep -i established

3
Điều này đã tiết kiệm cả ngày của tôi! Cảm ơn vì sudo ufw status!!
Riddhiman Adib

netstat -nlt | grep 3306trả về trống
João Pimentel Ferreira

@ João Pimentel Ferreira đảm bảo rằng mysql đang chạy trước tiên, sử dụng lệnh "/etc/init.d/mysql status" để xác minh
Jonathan L

8

MySQL chỉ lắng nghe localhost, nếu chúng ta muốn cho phép truy cập từ xa vào nó, thì chúng ta cần thực hiện một số thay đổi trong tệp my.cnf:

sudo nano /etc/mysql/my.cnf

Chúng tôi cần nhận xét về các dòng ràng buộc-địa chỉ và bỏ qua-khóa bên ngoài:

#bind-address = 127.0.0.1
# skip-external-locking

Sau khi thực hiện những thay đổi này, chúng ta cần khởi động lại dịch vụ mysql:

sudo service mysql restart

1
đảm bảo nhận xétskip-external-locking
calebeaires

1
Tôi đã không nhận xét về bỏ qua khóa bên ngoài và nó vẫn hoạt động.
Marcia Ong

Tôi đã phải thay đổi nó trong /etc/mysql/mysql.conf.d
Bartando

của tôi là vị trí này:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester

1

Nếu thử nghiệm trên Windows, đừng quên mở cổng 3306.


Ah, bạn là một thiên tài, điều này SIÊU quan trọng nếu bạn đang sử dụng hệ thống con của Windows cho Linux, bạn cần mở cổng 3306 cho lưu lượng đến thông qua tường lửa của Windows và không có điều nào ở trên để kiểm tra xem MySQL có hoạt động hay không hệ thống con
Brian Leishman

1

Bạn đang sử dụng ubuntu 12 (phiên bản khá cũ)

Đầu tiên, mở tệp /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf trong Ubuntu 14.04 và các phiên bản trước đó

Trong [mysqld] Định vị dòng, bind-address = 127.0.0.1 Và thay đổi nó thành, bind-address = 0.0.0.0 hoặc nhận xét nó

Sau đó, khởi động lại máy chủ Ubuntu MysQL systemctl restart mysql.service

Bây giờ Ubuntu Server sẽ cho phép truy cập từ xa vào MySQL Server, nhưng bạn vẫn cần phải cấu hình người dùng MySQL để cho phép truy cập từ bất kỳ máy chủ nào.

Người dùng phải 'username'@'%'có tất cả các khoản tài trợ bắt buộc

Để đảm bảo rằng, máy chủ MySQL lắng nghe trên tất cả các giao diện, hãy chạy lệnh netstat như sau.

netstat -tulnp | grep mysql

Hy vọng điều này hiệu quả!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.