1
2
3
$ ps xauf . grep pt - giết
taras 6069 0. 1 0. 1 111416 29452 điểm / . S+ 10:57 0. 00 . . \_ perl / usr . 0. 0. 1/bin/pt-kill --interval 1s --busy-time 5s --match-info [SELECT] h=127.0.0.1 -- in -- giết
taras 6913 0. 0 0. 0 21532 1112 điểm / . S+ 11:00 0. 00 . \_ grep -- color=auto pt-kill
Một cách rất thuận tiện là sử dụng plugin kiểm tra có sẵn cho Percona Server dành cho MySQL để xác định nguồn gốc của lệnh kill.
Vỏ bọc1
2
3
4
5
6
7
8
9
10
11
12
13
14
Truy vấn
624484743_2020-06-30T17:38. 14
2020-06-30T17:57. 35 UTC
giết
17
0
KILL QUERY 16
taras[taras] @ localhost []
localhost
Nó hiển thị tên máy chủ, người dùng và thời gian khi kết nối bị ngắt
2. Chuyển khối dữ liệu lớn
Ví dụ: khi sử dụng các trường BLOB để lưu trữ dữ liệu nhị phân trong một bảng hoặc có một câu lệnh INSERT chứa rất nhiều hàng. Nó có thể xảy ra khi sử dụng ứng dụng khách MySQL CLI [một trong những trường hợp đang tải kết xuất SQL] hoặc nó có thể xảy ra trong một ứng dụng khi nó cố lưu trữ dữ liệu BLOB [ví dụ: từ một tệp tải lên]
Có một giới hạn mà MySQL áp đặt đối với lượng dữ liệu có thể được truyền trên mỗi truy vấn và biến max_allowed_packet xác định giới hạn đó
Vì vậy, trong cả hai trường hợp, chúng ta cần xác định dữ liệu đang được ghi vào bảng nào, chẳng hạn như lấy tệp SQL cho các câu lệnh INSERT INTO và thực hiện ghi nhật ký ở cuối ứng dụng. Bằng cách này, câu lệnh sẽ được lưu trữ cùng với lỗi khiến nó không thể hoàn thành. Có thể ghi lại một phần câu lệnh [vì BLOB có thể gây khó khăn cho việc ghi nhật ký], nhưng miễn là có tên bảng, thì có thể kiểm tra cấu trúc bảng và xem liệu nó có chứa dữ liệu nhị phân hay không
Ví dụ về câu lệnh INSERT với dữ liệu nhị phân [cắt ngắn]
Vỏ bọc1
CHÈN VÀO t1 GIÁ TRỊ [1, x'89504....82 ’ ]
Để cho phép thực hiện truy vấn lớn hơn, biến cần được điều chỉnh
1
SET TOÀN CẦU max_allowed_packet = 128M ;
Biến có thể được đặt cho mỗi phiên hoặc trên toàn cầu, tùy thuộc vào trường hợp sử dụng
3. Kết nối đã bị đóng do hết thời gian chờ
Nó không quan trọng, nhưng các ứng dụng có thể sử dụng lại các kết nối đã được thiết lập. Trong thời gian không hoạt động hoặc lưu lượng truy cập thấp hơn, có thể một số kết nối sẽ không được sử dụng trong một thời gian và bị đóng ở đầu MySQL. Nó được theo dõi tốt nhất với việc ghi nhật ký ứng dụng;
Vỏ bọc1
2
mysql> SET PHIÊN wait_timeout = 5 ;
Truy vấn OK, 0 hàng affected [0.00 giây]
Đợi 5 giây
Vỏ bọc1
2
3
4
5
6
7
8
9
10
11
12
mysql> chọn 1 ;
ERROR 2006 [HY000]: MySQL máy chủ đã biến mất đi
Không có kết nối. Đang thử để kết nối lại. . .
Kết nối id. 16
Cơ sở dữ liệu hiện tại. *** KHÔNG CÓ ***
+---+
| 1 .
+---+
| 1 .
+---+
1 hàng trong bộ [0.01 giây]
Thông thường, kết nối được thiết lập lại và ứng dụng tiếp tục hoạt động bình thường;
Vỏ bọc1
SET TOÀN CẦU wait_timeout = 57600 ;
Giá trị mặc định cho biến là 28800 giây [8 giờ], đủ trong hầu hết các trường hợp
Ngoài ra, việc đóng các kết nối hoàn toàn từ đầu ứng dụng, sau một thời gian không hoạt động, sẽ loại bỏ vấn đề này
4. Máy chủ MySQL đã thực sự biến mất
Đây có lẽ là tình huống tồi tệ nhất có thể xảy ra khi MySQL gặp sự cố khi truy vấn hoặc do một số lý do khác, chẳng hạn như. g. , sát thủ OOM đã giết quá trình. Tuy nhiên, nó cũng có thể do khởi động lại sạch
Trong trường hợp này, người ta nên kiểm tra thời gian hoạt động của MySQL và nhật ký, nhật ký lỗi MySQL và nhật ký hệ thống. Chúng sẽ cho biết liệu máy chủ có khởi động lại hay không và liệu có lỗi dẫn đến khởi động lại hay không
Trong trường hợp máy chủ gặp sự cố, đã đến lúc tìm ra nguyên nhân thực sự. Kiểm tra trình theo dõi lỗi, vì sự cố có thể đã được báo cáo và có thể đã được khắc phục; . Trong trường hợp đó là một lần khởi động lại hoàn toàn, hãy kiểm tra xem các bản cập nhật tự động có được bật hay không hoặc liệu người khác có khởi động lại dịch vụ một cách tương tác hay không [vâng, thiếu giao tiếp cũng là một vấn đề]