Làm cách nào để sửa lỗi quá nhiều kết nối trong mysql?

Chuông cửa trên Bebo đang phát triển đều đặn, mặc dù có một số ngẫu nhiên trong thời gian hoạt động của nền tảng Bebo. Một tác dụng phụ của sự phổ biến của nó là một lỗi mới – Quá nhiều kết nối. Dưới đây là tổng quan nhanh về nguyên nhân và giải pháp

Quá nhiều kết nối có thể do có nhiều kết nối đồng thời hoặc do các kết nối cũ không được phát hành sớm. Có một số thay đổi đơn giản mà bạn có thể thực hiện đối với mã PHP và cài đặt MySQL của mình để ngăn cả hai

Có hai cách tích hợp sẵn để kết nối với MySQL từ PHP – vĩnh viễn hoặc tương tác. Bạn nhận được kết nối vĩnh viễn bằng mysql_pconnect(). Điều này tạo ra một kết nối vĩnh viễn tới cơ sở dữ liệu (vĩnh viễn được định nghĩa là 8 giờ bởi biến hệ thống wait_timeout của MySQL). Nó sẽ chỉ tạo kết nối mới nếu không thể tìm thấy kết nối cố định hiện có để sử dụng lại. Bạn cần cẩn thận với mysql_pconnect() để đảm bảo rằng bạn không hết kết nối, vì các kết nối này mở quá lâu và bạn không thể đóng chúng bằng mysql_close()

Một cách khác là sử dụng mysql_connect(). Điều này tạo ra một kết nối tạm thời mới, nếu tham số new_link được đặt thành true hoặc sử dụng lại kết nối hiện có nếu không. Điều này có thể tốt hơn mysql_pconnect() vì các kết nối này có thể tồn tại trong thời gian ngắn và có thể bị đóng khi cần với mysql_close(). Một tham số quan trọng là cờ CLIENT_INTERACTIVE. Nếu điều này được thông qua, nó sẽ sử dụng giá trị MySQL Interactive_timeout thay vì wait_timeout. Vì wait_timeout mặc định là 8 giờ nên đây có vẻ là một ý tưởng tuyệt vời. Tuy nhiên, đáng ngạc nhiên là Interactive_timeout cũng mặc định là 8 giờ. Bạn nên thay đổi giá trị này thành giá trị nhỏ hơn phù hợp với hệ thống của bạn

Sử dụng mysql_connect() với new_link được đặt thành false, chuyển cờ CLIENT_INTERACTIVE và điều chỉnh Interactive_timeout sẽ giúp ngăn chặn sự cố với các kết nối cũ gây nhiễu công việc

Để xử lý nhiều kết nối đồng thời, hãy điều chỉnh biến MySQL max_connections. Theo mặc định, nó được đặt thành 100. Tăng giá trị này lên giá trị sẽ hỗ trợ những gì bạn cảm thấy là thực tế cho hệ thống của mình

Điều cuối cùng cần làm sau khi cập nhật mã của bạn và MySQL là xóa cơ sở dữ liệu kết nối xấu bằng “mysqladmin flush-hosts”. Điều này sẽ cho phép máy chủ web của bạn kết nối lại với MySQL sau tất cả các lỗi Quá nhiều kết nối đó

Gần đây, tôi đang tìm kiếm một cách dễ dàng để khắc phục MySQL Too Many Connections. Mặc dù đây là lỗi đầu tiên đối với tôi, nhưng sau đó tôi mới biết rằng đó là một lỗi khá phổ biến trong MySQL. Giải pháp cho lỗi này rất dễ vì chúng ta chỉ cần tăng số lượng kết nối mysql

Có hai cách sử dụng mà chúng tôi có thể giải quyết lỗi này. Chúng tôi có thể tăng số lượng kết nối mysql cho phiên hiện tại hoặc chúng tôi có thể thực hiện các thay đổi để tăng số lượng kết nối mysql vĩnh viễn. Trong hướng dẫn này, chúng ta sẽ thảo luận về cả hai phương pháp để khắc phục MySQL Too Many Connections

(Đọc Khuyến nghị. Hướng dẫn từng bước đặt lại mật khẩu root trong Mysql )

(Cũng đọc. Các lệnh quản trị MariaDB cho người mới bắt đầu )

Tăng kết nối mysql cho phiên hiện tại

Trước khi chúng tôi thực hiện các thay đổi để tăng số lượng kết nối mysql, chúng tôi sẽ kiểm tra số lượng kết nối mysql được định cấu hình hiện tại. Để kiểm tra, hãy kết nối với mysql từ thiết bị đầu cuối của bạn,

$ mysql –u root –p

Nhập mật khẩu để kết nối với mysql và sau khi kết nối, hãy thực hiện lệnh sau,

mysql> HIỂN THỊ BIẾN NHƯ "max_connections";

Điều này sẽ mang lại số lượng kết nối tối đa được định cấu hình trên màn hình dưới dạng đầu ra. Nó thường là 151 theo mặc định và bây giờ chúng tôi sẽ tăng giá trị lên 1000. Để làm như vậy, chỉ chạy lệnh sau từ thiết bị đầu cuối mysql,

mysql> THIẾT LẬP TOÀN CẦU max_connections = 1000;

Giá trị kết nối mysql tối đa của chúng tôi hiện đã được tăng lên 1000 nhưng chỉ dành cho phiên hiện tại. Ngay sau khi chúng tôi khởi động lại dịch vụ mysql hoặc khởi động lại hệ thống, giá trị này sẽ được đặt lại về mặc định


Tăng kết nối mysql vĩnh viễn

Để tăng số lượng kết nối mysql vĩnh viễn, chúng tôi cần chỉnh sửa tệp cấu hình mysql tôi. e. ‘/etc/của tôi. cnf'. Mở tập tin,

$ sudo vim /etc/my. cnf

& tạo mục nhập sau trong tệp,

max_connections = 1000

Bây giờ hãy lưu tệp và thoát, sau đó khởi động lại dịch vụ mysql để thực hiện các thay đổi

$ sudo systemctl khởi động lại mysqld

Vậy đó các bạn, đây là bản sửa lỗi MySQL Too Many Connections của chúng tôi. Vui lòng đề cập đến bất kỳ truy vấn nào khác mà bạn phải sử dụng, bằng cách sử dụng hộp nhận xét bên dưới

Bạn có gặp lỗi MySQL không. Quá nhiều kết nối?

Lỗi MySQL "quá nhiều kết nối". Vấn đề là gì?

Khi đăng nhập vào MySQL, đôi khi bạn có thể bị từ chối và nhận được thông báo lỗi như “quá nhiều kết nối“. Điều này có nghĩa là đã đạt đến số lượng máy khách tối đa có thể kết nối với máy chủ. Một trong hai máy khách sẽ phải đợi một máy khách khác đăng xuất hoặc quản trị viên sẽ phải tăng số lượng kết nối tối đa được phép

Có thể tìm thấy thông tin về các kết nối được phép tối đa tới máy chủ bằng cách sử dụng câu lệnh SHOW VARIABLES

$ mysql –u root –p

mysql> HIỂN THỊ CÁC BIẾN NHƯ 'max_connections';

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 50 |
+-----------------+-------+
1 row in set (0.00 sec)

Các kết nối hiện đang bị chiếm dụng có thể được tìm thấy bằng câu lệnh sau

mysql> HIỂN THỊ TÌNH TRẠNG TOÀN CẦU NHƯ 'threads_connected';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 50    |
+-------------------+-------+
1 row in set (0.00 sec)

Nếu số lượng giá trị thread_connected giống với max_connections, thì máy chủ MySQL sẽ trả về thông báo lỗi “quá nhiều kết nối” cho máy khách. Đó là

Số lượng kết nối mới được phép = max_connections - thread_connected = 50 - 50 = 0

Chúng ta có thể xem có bao nhiêu kết nối hiện đang hoạt động bằng cách thực hiện câu lệnh sau

mysql> HIỂN THỊ TÌNH TRẠNG TOÀN CẦU NHƯ 'threads_running';

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| Threads_running | 10     |
+-----------------+-------+
1 row in set (0.00 sec)

Điều này có nghĩa là 40 kết nối (i. e. treads_connected - tread_running = 50 - 10 =40 )  không hoạt động trong cơ sở dữ liệu

Trước tiên, bạn nên đảm bảo rằng các ứng dụng của mình đang đóng kết nối với máy chủ khi chúng không còn cần thiết nữa. Tuy nhiên, bạn có thể giải quyết lỗi này bằng cách tăng giá trị của biến max_connections và có thể giảm giá trị của wait_timeout nếu bạn cho rằng nhiều kết nối đến máy chủ của mình không được sử dụng tích cực

Lỗi MySQL "quá nhiều kết nối". Giải pháp

Chúng ta có thể tăng giá trị của tham số max_connections theo thời gian chạy (tạm thời) và đặt giá trị của nó vĩnh viễn trong tệp cấu hình MySQL

Thay đổi tham số max_connections (Tạm thời)

Để tạm thời thay đổi biến này trong khi máy chủ đang chạy, hãy nhập câu lệnh SQL sau

$ mysql –u root –p

mysql> THIẾT LẬP TOÀN CẦU max_connections = 300;

Ghi chú. Không nhất thiết phải ngắt kết nối máy khách hiện được kết nối để chạy câu lệnh SQL này với quyền root. Máy chủ cho phép nhiều kết nối hơn giá trị của max_connections. Một kết nối được dành riêng cho người dùng root hoặc bất kỳ tài khoản nào khác có đặc quyền SUPER

Khi daemon máy chủ MySQL (mysqld) được khởi động lại, giá trị trên sẽ được đặt trở lại giá trị trước đó tồn tại trong. cnf hoặc của tôi. tập tin ini. Để thực hiện các thay đổi vĩnh viễn, hãy sử dụng phương pháp được mô tả tại đây

Thay đổi tham số max_connections (Vĩnh viễn)

Một phương pháp tốt hơn để thay đổi tham số max_connections là thêm tùy chọn này vào tệp tùy chọn (của tôi. cnf hoặc của tôi. ini, tùy thuộc vào hệ thống của bạn) để nó có hiệu lực vào lần khởi động lại máy chủ tiếp theo. Giả sử bạn đang sử dụng /etc/my. cnf, thêm dòng dưới đây vào nó

# vi /etc/my.cnf
max_connections = 300


Bây giờ hãy khởi động lại daemon mysqld để các thay đổi có hiệu lực

Đối với CentOS/RHEL 6

# khởi động lại dịch vụ mysqld

Đối với CentOS/RHEL 7

# systemctl khởi động lại mysqld

SingleStoreDB

SingleStoreDB là cơ sở dữ liệu SQL phân tán, thời gian thực, hợp nhất các giao dịch và phân tích trong một công cụ duy nhất để thúc đẩy quyền truy cập có độ trễ thấp vào các bộ dữ liệu lớn, đơn giản hóa việc phát triển các ứng dụng doanh nghiệp hiện đại, nhanh chóng

Được xây dựng cho các nhà phát triển và kiến ​​trúc sư, SingleStoreDB mang lại hiệu suất 10-100 mili giây cho các truy vấn phức tạp — đồng thời đảm bảo doanh nghiệp của bạn có thể dễ dàng mở rộng quy mô

SingleStoreDB tương thích với dây MySQL và cung cấp cú pháp quen thuộc của SQL, nhưng dựa trên công nghệ cơ bản hiện đại cho phép tốc độ và quy mô cao hơn vô cùng so với MySQL. Đây là một trong nhiều lý do khiến SingleStore là cơ sở dữ liệu quan hệ được xếp hạng hàng đầu số 1 trên TrustRadius

Để biết thêm thông tin về cách SingleStore có liên quan và có thể tăng tốc cho MySQL của bạn, hãy truy cập trang MySQL của chúng tôi

Tài nguyên

  • Lệnh Lỗi MySQL "lỗi 1016 không thể mở tệp" — Lỗi này là gì?

    Điều gì gây ra quá nhiều kết nối MySQL?

    Lỗi “Quá nhiều kết nối” của MySQL xảy ra khi nhiều truy vấn được gửi tới cơ sở dữ liệu MySQL hơn mức có thể xử lý . Có thể khắc phục lỗi bằng cách đặt số lượng kết nối tối đa mới trong tệp cấu hình hoặc trên toàn cầu.

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

    Bạn sẽ có thể đạt được điều này bằng cách làm như sau. .
    Truy cập công cụ dòng lệnh MySQL của bạn
    Chỉ huy. hiển thị các biến như "max_connections";
    Điều này sẽ trả về một đầu ra như vậy. tên_biến. .
    Nếu bạn có quyền thích hợp, hãy thay đổi biến bằng cách chạy lệnh. đặt max_connections toàn cầu = $DesiredValue;

    Số lượng kết nối tối đa tới MySQL là bao nhiêu?

    Theo mặc định 151 là số lượng kết nối máy khách đồng thời tối đa được phép trong MySQL 5. 5. Nếu bạn đạt đến giới hạn max_connections, bạn sẽ gặp lỗi “Quá nhiều kết nối” khi cố gắng kết nối với máy chủ MySQL của mình. Điều này có nghĩa là tất cả các kết nối có sẵn đang được sử dụng bởi các máy khách khác.