Kết nối mysql kéo dài bao lâu?

Vì vậy, nếu bạn phải chuyển dự án của mình sang sử dụng cơ sở dữ liệu khác, PDO sẽ giúp quá trình này trở nên dễ dàng. Bạn chỉ phải thay đổi chuỗi kết nối và một vài truy vấn. Với MySQLi, bạn sẽ cần phải viết lại toàn bộ mã - bao gồm cả truy vấn

Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp API thủ tục

Cả hai đều hỗ trợ Báo cáo đã chuẩn bị. Các câu lệnh đã chuẩn bị bảo vệ khỏi SQL injection và rất quan trọng đối với bảo mật ứng dụng web

Các ví dụ về MySQL trong cả Cú pháp MySQLi và PDO

Trong phần này và trong các chương tiếp theo, chúng tôi trình bày ba cách làm việc với PHP và MySQL

  • MySQLi [hướng đối tượng]
  • MySQLi [thủ tục]
  • PDO

Cài đặt MySQLi

Đối với Linux và Windows. Tiện ích mở rộng MySQLi được cài đặt tự động trong hầu hết các trường hợp, khi gói mysql php5 được cài đặt

Để biết chi tiết cài đặt, hãy truy cập. http. //php. mạng/thủ công/en/mysqli. cài đặt. php

Cài đặt PDO

Để biết chi tiết cài đặt, hãy truy cập. http. //php. net/manual/en/pdo. cài đặt. php

Mở kết nối tới MySQL

Trước khi chúng tôi có thể truy cập dữ liệu trong cơ sở dữ liệu MySQL, chúng tôi cần có thể kết nối với máy chủ

Ví dụ [Hướng đối tượng MySQLi]

$servername = "máy chủ cục bộ";
$username = "tên người dùng";
$password = "mật khẩu";

// Tạo kết nối
$conn = new mysqli[$servername, $username, $password];

// Kiểm tra kết nối
if [$conn->connect_error] {
die["Kết nối thất bại. ". $conn->connect_error];
}
echo "Đã kết nối thành công";
?>


Lưu ý về ví dụ hướng đối tượng ở trên

$connect_error đã bị hỏng cho đến khi PHP 5. 2. 9 và 5. 3. 0. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản PHP trước 5. 2. 9 và 5. 3. 0, hãy sử dụng đoạn mã sau để thay thế

// Kiểm tra kết nối
nếu [mysqli_connect_error[]] {
die["Kết nối cơ sở dữ liệu không thành công. ". mysqli_connect_error[]];
}

Ví dụ [Thủ tục MySQLi]

$servername = "máy chủ cục bộ";
$username = "tên người dùng";
$password = "mật khẩu";

// Tạo kết nối
$conn = mysqli_connect[$servername, $username, $password];

// Kiểm tra kết nối
nếu [. $conn] {
die["Kết nối thất bại. ". mysqli_connect_error[]];
}
echo "Đã kết nối thành công";
?>


Ví dụ [PDO]

$servername = "máy chủ cục bộ";
$username = "tên người dùng";
$password = "mật khẩu";

cố gắng {
$conn = PDO mới["mysql. máy chủ=$servername;dbname=myDB", $username, $password];
// đặt chế độ lỗi PDO thành ngoại lệ
$conn->setAttribute[PDO. ATTR_ERRMODE, PDO. ERRMODE_EXCEPTION];
echo "Đã kết nối thành công";
} bắt[PDOException $e] {
tiếng vang "Kết nối không thành công. ". $e->getMessage[];
}
?>


Ghi chú. Trong ví dụ PDO ở trên, chúng tôi cũng đã chỉ định một cơ sở dữ liệu [myDB]. PDO yêu cầu cơ sở dữ liệu hợp lệ để kết nối với. Nếu không có cơ sở dữ liệu nào được chỉ định, một ngoại lệ sẽ được đưa ra

Mẹo. Một lợi ích lớn của PDO là nó có một lớp ngoại lệ để xử lý bất kỳ sự cố nào có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng tôi. Nếu một ngoại lệ được đưa ra trong khối try{ }, tập lệnh sẽ ngừng thực thi và chuyển trực tiếp đến khối catch[]{ } đầu tiên

Đóng kết nối

Kết nối sẽ tự động đóng khi tập lệnh kết thúc. Để đóng kết nối trước, hãy sử dụng như sau

Lỗi máy chủ MySQL đã biến mất, điều đó có nghĩa là máy chủ MySQL [mysqld] đã hết thời gian chờ và đóng kết nối. Theo mặc định, MySQL sẽ đóng kết nối sau tám giờ [28800 giây] nếu không có gì xảy ra. Tuy nhiên, trong một số trường hợp, máy chủ lưu trữ web, DBA hoặc nhà phát triển ứng dụng của bạn có thể đã giảm cài đặt thời gian chờ này, như được thảo luận bên dưới

Máy chủ MySQL đã biến mất, có thể là một lỗi khó giải quyết. Điều này một phần là do, để giải quyết lỗi này, đôi khi giải pháp liên quan đến nhiều lớp, ứng dụng hoặc thay đổi cấu hình dịch vụ. Bài viết này bao gồm các giải pháp tôi đã thấy cho lỗi chung của máy chủ MySQL này. Nếu bạn tìm thấy một giải pháp không được liệt kê hoặc liên kết đến trên trang này, vui lòng gửi cho tôi một ghi chú hoặc để lại nhận xét

 

Máy chủ MySQL đã biến mất ví dụ về nhật ký lỗi

Hãy nhớ rằng lỗi này có thể được ghi lại theo một số cách, như được liệt kê bên dưới. Ngoài ra, đôi khi, lỗi chỉ là dấu hiệu của một vấn đề tiềm ẩn sâu hơn. Có nghĩa là lỗi có thể do sự cố hoặc lỗi trong ứng dụng kết nối hoặc dịch vụ từ xa của bạn. Trong trường hợp này, bạn cần kiểm tra TẤT CẢ nhật ký lỗi có liên quan với cùng một dấu thời gian để xác định xem có thể là nguyên nhân của một sự cố khác hay không. Các giải pháp Giám sát Hiệu suất Ứng dụng và các công cụ theo dõi Ngăn xếp PHP có thể hữu ích. Với suy nghĩ này, đây là các ví dụ về nhật ký lỗi của máy chủ MySQL đã biến mất lỗi

General error: 2006 MySQL server has gone away
Error Code: 2013. Lost connection to MySQL server during query
Warning: Error while sending QUERY packet
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away

 

được tài trợ. Datadog – Xem số liệu truy vấn và giải thích kế hoạch từ tất cả cơ sở dữ liệu của bạn ở một nơi duy nhất


Datadog là một nền tảng giám sát, phân tích và bảo mật thống nhất cung cấp khả năng giám sát từ đầu đến cuối cho tất cả các cơ sở dữ liệu của bạn, bao gồm MySQL, PostgreSQL, v.v. Nhanh chóng xác định các truy vấn chậm, tốn kém và khắc phục sự cố hiệu suất nhanh hơn với các chỉ số và mẫu cơ sở dữ liệu chính ở một nơi. Dễ dàng tìm kiếm, so sánh và lọc các truy vấn của bạn trên các kế hoạch thực hiện để nhanh chóng xác định các khu vực cần cải thiện hiệu suất và chi phí. Sử dụng các tích hợp của chúng tôi cho MySQL, PostgreSQL, SQL Server, v.v. để trực quan hóa các chỉ số hiệu suất hệ thống chính trên bảng điều khiển có thể sử dụng ngay bên cạnh các chỉ số truy vấn và cấp máy chủ. Giám sát cơ sở dữ liệu Datadog được tích hợp chặt chẽ với phần còn lại của nền tảng Datadog;

Phí tổn. Gói miễn phí hoặc bắt đầu từ $70

 

MySQL wait_timeout

Lý do MySQL server has gone gone error thường là do MySQL’s wait_timeout bị vượt quá. MySQL wait_timeout là số giây máy chủ chờ hoạt động trên kết nối không tương tác trước khi đóng nó. Bạn nên đảm bảo thời gian chờ không được đặt quá thấp. Giá trị mặc định cho MySQL là 28800 giây. Thông thường, nó được hạ xuống tùy ý. Điều đó nói rằng, bạn có thể đặt wait_timeout càng thấp mà không ảnh hưởng đến kết nối cơ sở dữ liệu, có thể là một dấu hiệu tốt về hiệu quả của cơ sở dữ liệu MySQL. Ngoài ra, kiểm tra các biến. , và. Điều chỉnh hoặc thêm các dòng sau vào của tôi. cnf để đáp ứng yêu cầu của bạn

wait_timeout=90
net_read_timeout=90
net_write_timeout=90
interactive_timeout=300
connect_timeout=90

 

Thời gian chờ kết nối MySQL trong cấu hình PHP

Hãy nhìn vào php của bạn. tập tin cấu hình ini. Bạn sẽ tìm thấy các tùy chọn cấu hình MySQL. Đảm bảo mysql. cài đặt connect_timeout không được đặt thấp hơn MySQL wait_timeout, đã thảo luận ở trên. Tùy chọn PHP mysql. connect_timeout không chỉ được sử dụng cho thời gian chờ kết nối. Đó cũng là khi chờ phản hồi đầu tiên từ máy chủ MySQL. Hãy thử tăng mysql. connect_timeout khớp hoặc vượt quá wait_timeout MySQL của bạn và đảm bảo rằng mysql. allow_persistent đang bật [mặc định = đã bật]

mysql.connect_timeout=90
mysql.allow_persistent=1

QUAN TRỌNG. Trước tiên, hãy đọc về PHP Kết nối cơ sở dữ liệu liên tục để hiểu các lợi ích và lưu ý

Ngoài ra, hãy điều chỉnh default_socket_timeout của PHP. Ví dụ: tập lệnh PHP có thể đang chạy truy vấn chậm. Tạo thời gian chờ sử dụng default_socket_timeout. Cuối cùng, nó thoát với lỗi "Máy chủ MySQL đã biến mất". Trước khi bạn gửi thư căm thù,. Đây là một đoạn trích

“PHP, theo mặc định, đặt thời gian chờ đọc là 60 giây cho các luồng. Điều này được đặt thông qua php. ini, default_socket_timeout. Giá trị mặc định này áp dụng cho tất cả các luồng không đặt giá trị thời gian chờ nào khác. mysqlnd không đặt bất kỳ giá trị nào khác và do đó các kết nối của các truy vấn chạy lâu có thể bị ngắt kết nối sau default_socket_timeout giây dẫn đến thông báo lỗi 2006 – MySQL Server đã ngừng hoạt động . ”

default_socket_timeout=90

Để xuyên suốt, hãy điều chỉnh cả max_execution_time và max_input_time vẫn trong php. ini, nếu cần thiết. Nếu thời gian thực thi của PHP dài hơn max_execution_time, thì máy chủ MySQL có thể bị ngắt kết nối

max_execution_time = 90
max_input_time = 90

 

MySQL max_allowed_packet

max_allowed_packet là kích thước tối đa của một gói. Kích thước mặc định là 4MB giúp máy chủ MySQL bắt các gói lớn [có thể không chính xác]. Kể từ MySQL 8, mặc định đã được tăng lên 16 MB. Nếu mysqld nhận được một gói quá lớn, nó sẽ cho rằng có gì đó không ổn và đóng kết nối. Để khắc phục điều này, bạn nên tăng max_allowed_packet trong my. cnf, sau đó khởi động lại MySQL. Tối đa cho cài đặt này là 1GB. Ví dụ

________số 8_______

 

MySQL innodb_log_file_size

Bạn có thể cần tăng biến innodb_log_file_size MySQL trong tệp my. cấu hình cnf. MySQL của innodb_log_file_size phải bằng 25% của innodb_buffer_pool_size [nếu có thể, không ít hơn 20%]. Hãy nhớ rằng giá trị này càng lớn thì càng mất nhiều thời gian để khôi phục sau sự cố cơ sở dữ liệu. [Nguồn. Cố vấn Phpmyadmin]

Điều này có nghĩa là ví dụ. nếu kích thước nhóm bộ đệm của bạn được đặt thành innodb_buffer_pool_size=16G và cài đặt của bạn vẫn được đặt thành mặc định đề xuất là 2 tệp [innodb_log_files_in_group=2], thì bạn nên đặt thành 2G. Thao tác này sẽ tạo hai [2] tệp nhật ký, mỗi tệp có dung lượng 2GB, tương đương với 25% của innodb_buffer_pool_size=16G

CẢNH BÁO. Bạn phải dừng máy chủ MySQL để thay đổi innodb_log_file_size hoặc innodb_log_files_in_group. Nếu bạn không, bạn có nguy cơ thảm họa. [Đọc. Hướng dẫn làm lại nhật ký MySQL. ]

 

Các nguyên nhân khác của máy chủ MySQL đã biến mất

Kết nối MySQL từ xa

Hãy nhớ trước đó tôi đã đề cập rằng lỗi đôi khi chỉ là dấu hiệu của một vấn đề cơ bản sâu hơn. Ví dụ: các kết nối MySQL từ xa tới. Sử dụng plugin xử lý thanh toán của bên thứ 3 cho osCommerce, Magento, v.v.

Bộ ký tự và đối chiếu cơ sở dữ liệu MySQL

Thay đổi bộ ký tự cơ sở dữ liệu mặc định thành latin1 và đối chiếu mặc định thành latin1_General_ci dường như có

Vượt quá cài đặt max_connections của MySQL

Max_connections đặt số lượng kết nối máy khách đồng thời tối đa được phép. Hãy cẩn thận với cài đặt này. Tình trạng cạn kiệt bộ nhớ và các tài nguyên khác có thể xảy ra khi đặt quá lớn và chi phí lập lịch trình cũng tăng lên. Theo hướng dẫn, hãy đặt max_connections thành khoảng gấp đôi số lượng kết nối máy khách đồng thời tối đa trước đó. e. g. , nếu sau một tháng hoạt động, số kết nối máy khách đồng thời tối đa là 114, thì hãy đặt thành max_connections=250. Trước khi bạn phát điên với cài đặt này, vui lòng đọc. Cách MySQL xử lý kết nối máy khách

Vẫn chưa được giải quyết?

Oracle đã tập hợp một trang tự trợ giúp tuyệt vời cho máy chủ MySQL đã biến mất lỗi. Trên trang đó, họ cũng đề nghị bạn đảm bảo rằng MySQL không dừng/khởi động lại trong khi truy vấn. trích đoạn

Làm cách nào để tăng giới hạn thời gian kết nối MySQL?

Thay đổi thời gian chờ của MySQL trên máy chủ .
Đăng nhập vào máy chủ của bạn bằng cách sử dụng Secure Shell® [SSH]
Sử dụng lệnh sudo để chỉnh sửa của tôi. .
Xác định vị trí cấu hình thời gian chờ và thực hiện các điều chỉnh phù hợp với máy chủ của bạn. .
Lưu các thay đổi và thoát khỏi trình chỉnh sửa

Thời gian chờ kết nối MySQL là gì?

Lỗi hết thời gian kết nối xảy ra khi tường lửa của cơ sở dữ liệu không cho phép bạn kết nối với cơ sở dữ liệu từ máy hoặc tài nguyên cục bộ của bạn . Nếu bạn gặp phải lỗi này, hãy kiểm tra xem bạn đã thêm máy hoặc tài nguyên mà bạn đang kết nối vào danh sách các nguồn đáng tin cậy của cơ sở dữ liệu chưa.

Điều gì xảy ra nếu bạn không đóng kết nối MySQL?

Trên thực tế, người dùng sẽ thấy lỗi SQL thay vì các trang web đẹp . Tốt hơn là mở một kết nối để đọc dữ liệu, sau đó đóng nó, sau đó hiển thị dữ liệu và sau khi người dùng nhấp vào "gửi", bạn mở một kết nối khác và sau đó gửi tất cả các thay đổi.

Việc đóng kết nối MySQL có quan trọng không?

Nếu tập lệnh của bạn có khá nhiều xử lý cần thực hiện sau khi tìm nạp kết quả và đã truy xuất toàn bộ tập kết quả, bạn chắc chắn nên đóng kết nối . Nếu không, có khả năng máy chủ MySQL sẽ đạt đến giới hạn kết nối khi máy chủ web đang được sử dụng nhiều.

Chủ Đề