Điểm:0

Tại sao đôi khi chọn MySQL không tạo "kết nối máy khách"?

lá cờ gl

Tôi đang thực hiện một số thử nghiệm (trên máy chủ dành cho nhà phát triển của mình) để giúp tôi tìm ra nguyên nhân gây ra danh sách kết nối ngày càng tăng trên máy chủ sản xuất của mình. Giả định của tôi là có một số trang không đóng kết nối bằng mysql_close(). Vì vậy, trước hết tôi đang cố gắng xác nhận điều gì đang tạo ra các kết nối và sau đó xác nhận cách đảm bảo rằng chúng đã được đóng.

Để làm điều này, tôi đã tạo một tập lệnh đơn giản để tạo kết nối, theo sau là mysql_close() để đóng kết nối. Thật không may, quá trình thử nghiệm của tôi đang bị đình trệ vì tôi thậm chí không thể xác nhận rằng mình đang tạo kết nối.

Khi tôi thực thi đoạn mã sau (thông báo mysql_close()) được nhận xét, tôi sẽ thấy một kết nối mới trong danh sách kết nối máy khách của mình và tôi sẽ mong nó tự tắt sau 20 giây kể từ khi tôi đặt wait_timeout thành 20 .Tuy nhiên, dường như không có kết nối nào được tạo ra.

<?php

$dblocation = "127.0.0.1";
$dbusername = "blah_dev";
$dbpassword = "test";
$dbname = "blah_dev";
$dbdescription = "";

$conn = mysql_connect($dblocation, $dbusername, $dbpassword) or die ("<span style='color:red'>Unable to connect!  Press F5 to try again.</span>");
mysql_select_db($dbname, $conn) or die ("Unable to select database!");

$sql = "select fullname from months";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)){

  echo "<table border=1>";
  do{
    $month = $row["fullname"];
    echo "<tr><td>".$month."</td></tr>";
  }while ($row = mysql_fetch_array($result));

  echo "</table>";
}

//mysql_close();

?>

Tôi thậm chí đã thêm một câu lệnh chọn đơn giản để xác nhận rằng tôi đang tạo kết nối và đúng như vậy. Tại sao kết nối này không hiển thị trong danh sách Kết nối máy khách của tôi trong MySQL Workbench? Tôi cũng đang sử dụng một công cụ khác (Trình quản lý chẩn đoán MySQL) để hiển thị cho tôi các luồng hiện tại và nó cũng không hiển thị ở đó.

Tôi đang thiếu gì ở đây?

lá cờ ua
Có bất kỳ lớp nào trong ngăn xếp của bạn cung cấp "tổng hợp kết nối" không?
lá cờ ua
Trừ khi Bàn làm việc được kết nối với tư cách là "root", bạn chỉ có thể thấy các kết nối đến từ cùng một "người dùng".
Wilson Hauck avatar
lá cờ jp
Sử dụng Nhật ký chung là một cách tuyệt vời để xác nhận những gì đang diễn ra. Nhớ SET TOÀN CẦU general_log=OFF; để tránh làm đầy phương tiện lưu trữ của bạn khi bạn hoàn thành quá trình điều tra.
Wilson Hauck avatar
lá cờ jp
Vincent, Bạn đã cân nhắc sử dụng mysqli_connect thay vì mysql_connect chưa. url này có thể hữu ích. https://www.php.net/manual/en/mysqli.error.php
lá cờ gl
@RickJames Tôi được kết nối với tư cách là Root.
lá cờ gl
@WilsonHauck Tôi thực sự đang trong quá trình chuyển đổi tất cả mã của mình sang DBO và tôi thực sự đang sử dụng kết hợp cả hai, nhưng tôi vẫn có hơn 2000 câu lệnh mysql_query nên đây là một công việc lớn và một quá trình dài để chuyển đổi mọi câu lệnh trên. Tại thời điểm này, tôi chỉ đang thực hiện thử nghiệm của mình với mysql_connect vì tôi phải chọn một.
lá cờ gl
@WilsonHauck để rõ ràng, tôi đang kết nối vì nếu không, tôi sẽ không thể thực thi câu lệnh chọn của mình và hiển thị kết quả. Kết nối không hiển thị trong danh sách kết nối của tôi và điều đó khiến cho việc kiểm tra quản lý kết nối là không thể. Ngoài ra, nó có vẻ ngẫu nhiên. Đôi khi tôi thấy hai kết nối trong danh sách kết nối của mình sau khi thực thi mã này (không bao giờ là một) và đôi khi tôi không thấy kết nối nào.
Wilson Hauck avatar
lá cờ jp
Vincent, Vui lòng đăng từ quá trình sản xuất lên pastebin.com và chia sẻ liên kết. Sau 48 giờ hoạt động, thông tin sau sẽ giúp phân tích. Đăng nhập với quyền root và từ MySQL Command Prompt, HIỂN THỊ CÁC BIẾN TOÀN CẦU; và HIỂN THỊ TÌNH TRẠNG TOÀN CẦU; để phát hiện nguyên nhân có thể của các kết nối ngày càng tăng. Bao gồm toàn bộ SHOW FULL PROCESSLIST; Mà còn. Cảm ơn đã xem xét đăng thông tin này.
lá cờ gl
@WilsonHauck Không chắc bạn muốn tôi đăng chính xác điều gì.
Wilson Hauck avatar
lá cờ jp
Hãy xem trang 'Dữ liệu chúng tôi cần' trên trang web của chúng tôi để biết cách nhận dữ liệu cho chúng tôi. Cảm ơn Wilson
lá cờ gl
@RickJames làm cách nào để biết liệu tôi có đang sử dụng kết nối tổng hợp không? Tôi đã cài đặt MySQL với cài đặt mặc định, vì vậy tôi đoán đây là thứ cần được bật một cách rõ ràng, nhưng làm cách nào để xác nhận?
lá cờ gl
Đừng bận tâm. Tôi đã hiểu rồi. Kết nối được tạo nhưng bị đóng ngay sau đó nên có vẻ như không phải đang tạo kết nối. Lỗi của tôi.
Điểm:0
lá cờ gl

Hóa ra, mã này làm tạo kết nối máy khách, nhưng vì nó đóng nó ngay khi tập lệnh chạy xong nên không xuất hiện để tạo 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.