Điểm:0

Tôi cần làm gì để cho phép truy cập từ xa vào MySQL trên Máy chủ Unbuntu 20.04?

lá cờ es

Tôi có một tập lệnh Python nhỏ để thu thập điểm bài tập về nhà và bài tập trên lớp trực tuyến của học sinh từ bảng allstudentsAnswers20BE.

Điều này hoạt động rất tốt trên trang web lưu trữ web được chia sẻ cũ của tôi.

Trên máy chủ đám mây Ubuntu 20.04 mới, tôi bị từ chối kết nối. Tôi không có kinh nghiệm chạy máy chủ đám mây.

Tôi đã cho phép các cổng 33060 và 3306 trong UFW

Ip của tôi ở nhà không cố định.

Khi tôi chạy tập lệnh Python, tôi gặp lỗi này khi cố gắng kết nối với máy chủ đám mây

pymysql.err.OperationalError: (1130, "183.206.16.30' không được phép kết nối với máy chủ MySQL này")

netstat cho biết mysqld đang lắng nghe trên 33060 và 3306, vì vậy tôi đã cho phép cả hai trong tường lửa ufw

Kết nối với máy chủ đám mây qua ssh, tôi đã chạy:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tôi đã thay đổi địa chỉ liên kết dòng thành 0.0.0.0 (tôi cũng đã thử *)

Tôi đã khởi động lại mysql: sudo systemctl restart mysql

Phải có một cái gì đó khác cần cài đặt, phía máy chủ.

Xin vui lòng cho bất kỳ lời khuyên nào, tôi thực sự cần điều này để làm việc.

Tôi cũng nhận được thông tin này (giả sử ip đám mây của tôi là 123.456.789.123):

pedro@ebs-105422:~$ nc -v -w 2 123.456.789.123 3306
Đã kết nối với cổng 123.456.789.123 3306 [tcp/mysql] thành công! pedro@ebs-105422:~$

Điều này có nghĩa là mysqld đang nghe trên 3530 ?? Hay đó là PID của mysqld??

pedro@ebs-105422:~$ sudo netstat -tap | grep mysql tcp 0 0 0.0.0.0:mysql 0.0.0.0:* NGHE 3530/mysqld
tcp6 0 0 [::]:33060 [::]:* NGHE 3530/mysqld
pedro@ebs-105422:~$

Dưới đây là từ mysql trên máy chủ, xác nhận cổng 3306

mysql> hiển thị các biến trong đó tên_biến trong ('hostname','port');
+---------------+------------+
| Tên_biến | Giá trị |
+---------------+------------+
| tên máy chủ | ebs-105422 |
| cổng | 3306 | +----------------+------------+
2 hàng trong bộ (0,01 giây)

mysql>

lá cờ in
Bạn đang sử dụng người dùng nào để kết nối với cơ sở dữ liệu? Bạn đã xác nhận rằng tên người dùng có thể truy cập được từ bên ngoài chưa?
Pedroski avatar
lá cờ es
Làm thế nào tôi có thể xác nhận điều đó? Tất cả những gì tôi biết là, sử dụng pymsql để kết nối trên dịch vụ lưu trữ web dùng chung của tôi hoạt động tốt, nhưng trên máy chủ đám mây, tôi không thể kết nối, bất kể tôi đã thử cách nào. Tôi đã đặt UFW để cho phép 3306 và 33060. Tôi nghĩ điều đó sẽ làm được, nhưng, than ôi, không vui chút nào.
Pedroski avatar
lá cờ es
Sử dụng thủ thuật tạo đường hầm ssh, tôi có thể mở phpMyAdmin trên máy chủ đám mây, đăng nhập bằng thông tin đăng nhập của mình và thao tác với các bảng. Nhưng điều tôi cần là lấy dữ liệu mỗi tuần, kết hợp với openpyxl, tôi có tất cả kết quả cho tất cả học sinh được ghi vào Excel trong khoảng 2 giây!
lá cờ in
Sử dụng đường hầm SSH, bạn đang kết nối với tài khoản người dùng cục bộ. Một cái gì đó giống như `'pedroski'@'localhost'` cho MySQL. Kết nối bên ngoài sẽ yêu cầu bạn tạo một tài khoản như `'pedroski'@'%'`. Tuy nhiên, nếu không biết thêm về cách mọi thứ được thiết lập, đây chỉ là phỏng đoán
Điểm:0
lá cờ es

Tôi đã tìm ra nó, câu trả lời này chỉ để giúp đỡ bất kỳ ai có thể gặp vấn đề tương tự. Cách này có thể không an toàn lắm, với 3306 mở, nhưng a) Tôi chỉ có bài tập về nhà b) bạn vẫn cần tên người dùng và mật khẩu.

Khi bạn tạo một người dùng trên mysql, nó trông giống như thế này, cũng như khi bạn thực hiện thông qua ssh trên máy chủ:

TẠO NGƯỜI DÙNG 'peter'@'localhost' ĐƯỢC XÁC ĐỊNH BỞI 'mật khẩu';
CẤP TẤT CẢ CÁC ĐẶC QUYỀN TRÊN some_db.* CHO 'peter'@'localhost';

Nếu muốn truy cập từ xa, bạn cần thay đổi dữ liệu người dùng (hoặc tạo người dùng mới):

ĐỔI TÊN NGƯỜI DÙNG 'peter'@'localhost' THÀNH 'peter'@'%';
CẤP TẤT CẢ TRÊN somedb.* CHO 'peter'@'%';

% ở đây dường như đại diện cho bất kỳ ip nào

Sau đó, cũng thông qua ssh trên máy chủ:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

tìm dòng có

địa chỉ liên kết = 127.0.0.1

thay đổi cái này thành

địa chỉ liên kết = 0.0.0.0

ctrl X để thoát khỏi nano nano hỏi bạn có muốn lưu không, nhấn y, sau đó nhập để lưu vào cùng một nơi bạn đã mở /etc/mysql/mysql.conf.d/mysqld.cnf

Sau đó (trên máy chủ):

Sudo systemctl khởi động lại mysql

Sau đó, Python của tôi hoạt động tốt từ Idle Shell:

def mysqlRemoteAttn(clas): 
    # Để kết nối cơ sở dữ liệu MySQL từ xa 
    conn = pymysql.connect( 
        máy chủ = '123.456.789.123',
        cổng = 3306,
        người dùng = 'tên người dùng của tôi',  
        mật khẩu = 'mật khẩu của tôi', 
        db='allstudentsdb', 
        ) 
      
    cur = conn.cursor()

    sql = f"CHỌN sinh viênnr, attn_this_week TỪ tất cả sinh viên{clas}"
    cur.execute(sql)
    đầu ra = cur.fetchall()           
            
    # Để đóng kết nối 
    conn.close()
    đầu ra trở lại

# nhận được sự tham dự từ trang web MySQL
kết quả = mysqlRemoteAttn(clas)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.