Điểm:0

Ubuntu 20.04.2 Không hoạt động với MySQL 8.0.27. .

lá cờ nc

Tôi chưa bao giờ gặp sự cố này khi sử dụng Windows.

Vì một số lý do, tôi không thể nhận được bất kỳ tác dụng nào khi cố gắng kết nối với cơ sở dữ liệu MySQL cục bộ từ ứng dụng Node.js cục bộ.

Mọi thứ hoạt động rõ ràng trong mã cho đến khi thử kết nối với MySQL. Và mọi thứ đều hoạt động tốt (giả sử một phép gán sơ khai được chèn vào để thay thế cho kết quả bị thiếu từ lệnh gọi MySQL) sau khi kết nối MySQL.

Tôi đã vô vọng xem Nhật ký hệ thống và nhật ký MySQL để tìm bất kỳ manh mối nào. Tìm kiếm trên Google đôi khi gợi ý rằng MySQL có thể đang từ chối kết nối qua mạng mà thay vào đó sử dụng kết nối ổ cắm. Tôi đã điều chỉnh các tham số kết nối cho phù hợp (không có cổng: ...., đã thêm socketPath: ....., mục nhập) nhưng không khá hơn.

Dưới đây là mã kiểm tra cơ bản cho

const mysql = yêu cầu('mysql');


const queryNodeAppData = (truy vấn) =>
{
  console.log("Trong tập lệnh Truy vấn MySQL ngay bây giờ ...")
  console.log("Truy vấn: " + truy vấn);

  const con = mysql.createConnection(
  {
    máy chủ lưu trữ: "máy chủ cục bộ",
    socketPath: '/var/run/mysqld/mysqld.sock',
    cơ sở dữ liệu: "nút ứng dụng",
    người dùng: "gốc",
    mật khẩu: "My.$qu3@1$y"
  });

  con.connect(chức năng(errconn)
  {
    nếu (lỗi) 
    {
        console.error('Lỗi kết nối: ' + errconn.stack);
        trả về "Không hợp lệ";
    }
    khác
    {
        console.log('Đã kết nối dưới dạng id ' + connection.threadId);
        trả về "Hợp lệ;"
    }
  });

};

module.exports = { queryNodeAppData };

Đầu ra thiết bị đầu cuối tương ứng sau khi thử chạy ứng dụng với gật gù là bên dưới. Nhật ký bảng điều khiển được tạo khi tác vụ người dùng được app.js ủy quyền cho các mô-đun khác, ví dụ: bộ định tuyến, trình xử lý, trình kiểm tra định dạng, mysql, v.v. Các đầu ra đôi khi được ghi lại.

Lỗi cuối cùng khiến ứng dụng bị treo hoàn toàn là do cố gắng ghi một giá trị không xác định vào biến phản hồi XHR được xác định bằng văn bản. Việc cắt bỏ phản hồi bằng bất kỳ chuỗi nào sẽ khiến ứng dụng trả về mã trạng thái 200 và không có lỗi.

[gật đầu] bắt đầu `nút app.js`
Máy chủ HTTP cho NodeApp bắt đầu tại cổng 3000
Chúng ta đang ở phần cuối của NodeApp!
Ai đó đã POST dữ liệu lên máy chủ Node ...
Điểm cuối đã cắt URL: người dùng đăng ký
Giá trị đầu vào: tamjk
Trong router.js bây giờ ...
Điểm cuối: dữ liệu người dùng đăng ký: tamjk
Trình xử lý: authen.js
Trong trình xử lý authen.js bây giờ ...
Chế độ: reg Trường: người dùng Giá trị: tamjk
Trong xác thực định dạng bây giờ ...
Thông báo xác thực định dạng: Định dạng hợp lệ
Kết nối với cơ sở dữ liệu người dùng kiểm tra người dùng ...
Trong tập lệnh truy vấn MySQL bây giờ ...
Truy vấn: CHỌN người dùng TỪ người dùng WHERE user = 'tamjk'
Thông báo trả về của bộ định tuyến không xác định
Tin nhắn gọi lại: không xác định
Tin nhắn: không xác định
Phản hồi đã gửi lại: không xác định
_http_outgoing.js:696
    ném ERR_INVALID_ARG_TYPE mới ('đối số đầu tiên',
    ^

TypeError [ERR_INVALID_ARG_TYPE]: Đối số đầu tiên phải thuộc loại chuỗi hoặc một phiên bản của Bộ đệm hoặc Uint8Array. Đã nhận không xác định
    tại write_ (_http_outgoing.js:696:11)
    tại ServerResponse.write (_http_outgoing.js:661:15)
    tại reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
    tại IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
    tại IncomingMessage.emit (events.js:327:22)
    ở cuốiReadableNT (_stream_readable.js:1327:12)
    tại processTicksAndRejections (nội bộ/tiến trình/task_queues.js:80:21) {
  mã: 'ERR_INVALID_ARG_TYPE'
}
ứng dụng [gật đầu] bị lỗi - đang chờ thay đổi tệp trước khi bắt đầu...

Cũng như vấn đề trên, tôi cũng bắt đầu không hợp tác khi tôi cố gắng truy cập cơ sở dữ liệu MySQL từ thiết bị đầu cuối.

$ sudo mysql
[sudo] mật khẩu cho sandbar: 
LỖI 1045 (28000): Quyền truy cập bị từ chối đối với người dùng 'root'@'localhost' (sử dụng mật khẩu: KHÔNG)

Nói chung, tôi tự hỏi liệu Ubuntu 20.04.2 và MySQL 8.0.27 có thực sự được tạo ra để hoạt động cùng nhau hay không.

lá cờ in
Bạn không thể kết nối với bản cài đặt MySQL trên hầu hết các bản phân phối Linux hiện đại dưới dạng `root` mà không sử dụng siêu người dùng. Giải pháp â và tiêu chuẩn ngành â đơn giản nhất là tạo một người dùng MySQL cho trang web và sử dụng các thông tin xác thực đó
Trunk avatar
lá cờ nc
Đã thử tài khoản người dùng không phải root mà tôi đã tạo trong MySQL. Nhưng tôi đã không thử điều này với kết nối ổ cắm. Tôi cho rằng nó phải là kết nối ổ cắm để truy cập máy cục bộ? Hoặc nó có thể được cấu hình để cho phép truy cập TCP/IP không?
lá cờ in
Nếu đó là kết nối cục bộ thì bạn sẽ thấy ổn với ổ cắm hoặc `127.0.0.1`. Ai đã cấu hình máy chủ? `sudo mysql` thường không yêu cầu mật khẩu vì nếu bạn có thể `sudo` trên máy Linux, thì bạn phải là quản trị viên của máy chủ. Nếu máy chủ bị định cấu hình sai, thì có khoảng nửa triệu thứ cần kiểm tra và xác minh để tìm ra lý do tại sao kết nối không thành công.
Trunk avatar
lá cờ nc
Nó đã có trên localhost, điều này thường giống nhau. Mọi cấu hình đều là cấu hình mặc định hoặc người dùng bổ sung, đặc quyền, v.v. mà tôi đã thêm. Tôi muốn các tài liệu về MySQL cung cấp thêm thông tin về điều này. Lo tataré mañana.
Trunk avatar
lá cờ nc
Tôi đã gỡ bỏ và cài đặt lại MySQL. Sau đó, tôi đã tạo một người dùng mới cho mysql với các đặc quyền được giới hạn đối với cơ sở dữ liệu của ứng dụng Node. Kết nối đến máy chủ MySQL đã được thực hiện bằng cách sử dụng MySQL Workbench và kết nối TCP/IP đã được chọn. Một bảng Người dùng đơn giản đã được tạo và điền chỉ để kiểm tra quyền truy cập từ ứng dụng Nút đến bảng nodeapp.users của MySQL.Không có quyền truy cập bất cứ điều gì. Không có lỗi kết nối với MySQL nào được hiển thị. Lỗi sự cố vẫn như trước đây - cố gắng ghi giá trị UNDEFINED vào phản hồi XHR. Tôi tự hỏi làm thế nào Oracle muốn các ứng dụng Node truy cập MySQL. . .
Điểm:0
lá cờ nc

câu trả lời là mysql là gói không còn xử lý đáng tin cậy các kết nối tới MySQL do các giao thức xác thực khó khăn hơn sau MySQL 8.

Tuy nhiên mysql đã đưa ra tuyên bố trong 2-3 năm qua rằng những vấn đề này đã được khắc phục, chúng vẫn tồn tại.

Vì vậy, lời khuyên từ những người dùng khác là sử dụng gói npm mysql2 thay thế.

Tôi thấy rằng đây là lời khuyên hợp lý và tôi đang được kết nối.

Đă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.