Tất cả các phiên bản MySQL đều được thử nghiệm trên nhiều nền tảng trước khi phát hành. Điều này không có nghĩa là không có bất kỳ lỗi nào trong MySQL, nhưng nếu có lỗi thì chúng rất ít và khó tìm. Nếu bạn gặp sự cố, sẽ luôn hữu ích nếu bạn cố gắng tìm ra chính xác nguyên nhân khiến hệ thống của mình gặp sự cố vì bạn sẽ có cơ hội khắc phục sự cố nhanh chóng hơn nhiều
Trước tiên, bạn nên cố gắng tìm hiểu xem vấn đề là do trình nền mysqld
chết hay vấn đề của bạn có liên quan đến máy khách của bạn không. Bạn có thể kiểm tra xem máy chủ mysqld
của mình đã hoạt động được bao lâu bằng cách thực hiện lệnh mysqladmin version
. Nếu mysqld
đã chết, bạn có thể tìm thấy lý do cho việc này trong tệp `mysql-data-directory/'hostname'. sai lầm'
Vì rất khó để biết tại sao một cái gì đó bị hỏng, trước tiên hãy thử kiểm tra xem những thứ phù hợp với người khác có bị hỏng đối với bạn hay không. Hãy thử những điều sau đây
Mỗi phiên bản MySQL được thử nghiệm trên nhiều nền tảng trước khi phát hành. Điều này không có nghĩa là không có lỗi trong MySQL, nhưng nếu có lỗi, chúng sẽ rất ít và khó tìm. Nếu bạn gặp sự cố, sẽ luôn hữu ích nếu bạn cố gắng tìm ra chính xác nguyên nhân khiến hệ thống của mình bị hỏng, bởi vì bạn có nhiều cơ hội hơn để khắc phục sự cố nhanh chóng
Trước tiên, bạn nên cố gắng tìm hiểu xem sự cố là do máy chủ mysqld chết hay sự cố của bạn có liên quan đến máy khách của bạn không. Bạn có thể kiểm tra máy chủ mysql của mình đã hoạt động được bao lâu bằng cách chạy phiên bản mysqladmin. Nếu mysqld đã chết và khởi động lại, bạn có thể tìm ra lý do bằng cách xem nhật ký lỗi của máy chủ. Xem Phần 5. 4. 2, “Nhật ký lỗi”
Trên một số hệ thống, bạn có thể tìm thấy trong nhật ký lỗi dấu vết ngăn xếp về nơi mysqld chết mà bạn có thể giải quyết bằng chương trình resolve_stack_dump
. Xem Phần 5. 8, “Gỡ lỗi MySQL”. Lưu ý rằng các giá trị biến được ghi trong nhật ký lỗi có thể không phải lúc nào cũng đúng 100%
Nhiều lần thoát máy chủ không mong muốn là do tệp dữ liệu hoặc tệp chỉ mục bị hỏng. MySQL cập nhật các tệp trên đĩa bằng lệnh gọi hệ thống write[]
sau mỗi câu lệnh SQL và trước khi máy khách được thông báo về kết quả. [Điều này không đúng nếu bạn đang chạy với biến hệ thống delay_key_write
được bật, trong trường hợp đó, tệp dữ liệu được ghi chứ không phải tệp chỉ mục. ] Điều này có nghĩa là nội dung tệp dữ liệu vẫn an toàn ngay cả khi mysqld gặp sự cố, vì hệ điều hành đảm bảo rằng dữ liệu chưa được xóa sẽ được ghi vào đĩa. Bạn có thể buộc MySQL xóa mọi thứ vào đĩa sau mỗi câu lệnh SQL bằng cách bắt đầu mysqld với tùy chọn --flush
Điều trước có nghĩa là thông thường bạn sẽ không nhận được các bảng bị hỏng trừ khi một trong những điều sau đây xảy ra
Máy chủ MySQL hoặc máy chủ lưu trữ đã bị tắt khi đang cập nhật
Bạn đã tìm thấy một lỗi trong mysqld khiến nó chết giữa chừng khi đang cập nhật
Một số chương trình bên ngoài đang thao tác với tệp dữ liệu hoặc tệp chỉ mục cùng lúc với mysqld mà không khóa bảng đúng cách
Bạn đang chạy nhiều máy chủ mysqld sử dụng cùng một thư mục dữ liệu trên một hệ thống không hỗ trợ khóa hệ thống tệp tốt [thường được xử lý bởi trình quản lý khóa
lockd
] hoặc bạn đang chạy nhiều máy chủ bị tắt khóa bên ngoàiBạn có tệp dữ liệu bị lỗi hoặc tệp chỉ mục chứa dữ liệu rất hỏng khiến mysqld bị nhầm lẫn
Bạn đã tìm thấy một lỗi trong mã lưu trữ dữ liệu. Điều này không có khả năng, nhưng ít nhất là có thể. Trong trường hợp này, bạn có thể thử thay đổi công cụ lưu trữ sang công cụ khác bằng cách sử dụng
mysqld
0 trên bản sao đã sửa chữa của bảng
Bởi vì rất khó để biết tại sao một cái gì đó bị sập, trước tiên hãy thử kiểm tra xem những thứ hoạt động tốt cho những người khác có dẫn đến một lối thoát không mong muốn cho bạn không. Hãy thử những điều sau đây
Dừng máy chủ mysqld khi tắt mysqladmin, chạy myisamchk --silent --force */*. MYI từ thư mục dữ liệu để kiểm tra tất cả các bảng
mysqld
1 và khởi động lại mysqld. Điều này đảm bảo rằng bạn đang chạy từ trạng thái sạch. Xem Chương 5, Quản trị máy chủ MySQLBắt đầu mysqld khi bật nhật ký truy vấn chung [xem Phần 5. 4. 3, “Nhật ký truy vấn chung”]. Sau đó, cố gắng xác định từ thông tin được ghi vào nhật ký xem liệu một số truy vấn cụ thể có giết chết máy chủ hay không. Khoảng 95% tất cả các lỗi có liên quan đến một truy vấn cụ thể. Thông thường, đây là một trong những truy vấn cuối cùng trong tệp nhật ký ngay trước khi máy chủ khởi động lại. Xem Phần 5. 4. 3, “Nhật ký truy vấn chung”. Nếu bạn có thể giết MySQL nhiều lần bằng một truy vấn cụ thể, ngay cả khi bạn đã kiểm tra tất cả các bảng ngay trước khi đưa ra truy vấn đó, thì bạn đã cô lập được lỗi và nên gửi báo cáo lỗi cho nó. Xem Phần 1. 5, “Cách báo cáo lỗi hoặc sự cố”
Cố gắng tạo một trường hợp thử nghiệm mà chúng ta có thể sử dụng để lặp lại vấn đề. Xem Phần 5. 8, “Gỡ lỗi MySQL”
Hãy thử tập lệnh
mysqld
2. [Nó nằm trong thư mục phân phối nguồnmysqld
3. ]Định cấu hình MySQL để gỡ lỗi giúp thu thập thông tin về các lỗi có thể xảy ra nếu xảy ra sự cố dễ dàng hơn nhiều. Cấu hình lại MySQL với tùy chọn
resolve_stack_dump
0 thành CMake rồi biên dịch lại. Xem Phần 5. 8, “Gỡ lỗi MySQL”Đảm bảo rằng bạn đã áp dụng các bản vá mới nhất cho hệ điều hành của mình
Sử dụng tùy chọn ________ 51 để mysql. Trên một số hệ thống, trình quản lý khóa
lockd
không hoạt động bình thường; . [Điều này có nghĩa là bạn không thể chạy hai máy chủ mysqld trên cùng một thư mục dữ liệu và bạn phải cẩn thận nếu sử dụng myisamchk. Tuy nhiên, có thể hữu ích khi thử tùy chọn này dưới dạng thử nghiệm. ]Nếu mysqld dường như đang chạy nhưng không phản hồi, hãy thử mysqladmin -u root processlist. Đôi khi mysqld không bị treo mặc dù có vẻ như không phản hồi. Vấn đề có thể là tất cả các kết nối đang được sử dụng hoặc có thể có một số vấn đề về khóa bên trong. mysqladmin -u root processlist thường có thể tạo kết nối ngay cả trong những trường hợp này và có thể cung cấp thông tin hữu ích về số lượng kết nối hiện tại và trạng thái của chúng
Chạy lệnh mysqladmin -i 5 status hoặc mysqladmin -i 5 -r status trong một cửa sổ riêng để tạo số liệu thống kê trong khi chạy các truy vấn khác
Hãy thử những điều sau đây
Bắt đầu mysqld từ gdb [hoặc trình gỡ lỗi khác]. Xem Phần 5. 8, “Gỡ lỗi MySQL”
Chạy tập lệnh thử nghiệm của bạn
In backtrace và các biến cục bộ ở ba mức thấp nhất. Trong gdb, bạn có thể thực hiện việc này bằng các lệnh sau khi mysqld bị lỗi bên trong gdb
backtrace info local up info local up info local
Với gdb, bạn cũng có thể kiểm tra chuỗi nào tồn tại với
resolve_stack_dump
4 và chuyển sang một chuỗi cụ thể vớiresolve_stack_dump
5, trong đóresolve_stack_dump
6 là ID chuỗi
Cố gắng mô phỏng ứng dụng của bạn bằng tập lệnh Perl để buộc MySQL thoát hoặc hoạt động sai
Gửi báo cáo lỗi bình thường. Xem Phần 1. 5, “Cách báo cáo lỗi hoặc sự cố”. Thậm chí chi tiết hơn bình thường. Vì MySQL phù hợp với nhiều người nên sự cố có thể do thứ gì đó chỉ tồn tại trên máy tính của bạn [ví dụ: lỗi liên quan đến thư viện hệ thống cụ thể của bạn]
Nếu bạn gặp sự cố với bảng chứa hàng có độ dài động và bạn chỉ đang sử dụng cột
resolve_stack_dump
7 [không phải cộtresolve_stack_dump
8 hoặc cộtresolve_stack_dump
9], bạn có thể thử thay đổi tất cảresolve_stack_dump
7 thànhwrite[]
1 bằngmysqld
0. Điều này buộc MySQL phải sử dụng các hàng có kích thước cố định. Các hàng có kích thước cố định chiếm thêm một chút không gian, nhưng dễ bị hỏng hơn nhiềuMã hàng động hiện tại đã được sử dụng trong vài năm với rất ít sự cố, nhưng các hàng có độ dài động về bản chất dễ bị lỗi hơn, vì vậy bạn nên thử chiến lược này để xem liệu nó có giúp ích gì không
Xem xét khả năng lỗi phần cứng khi chẩn đoán sự cố. Phần cứng bị lỗi có thể là nguyên nhân gây hỏng dữ liệu. Đặc biệt chú ý đến hệ thống con bộ nhớ và đĩa của bạn khi khắc phục sự cố phần cứng
Tại sao lệnh MySQL không hoạt động?
Lỗi mysql Command not found xảy ra do máy tính của bạn không thể tìm thấy chương trình liên kết với lệnh trên biến môi trường PATH của máy tính . Biến môi trường PATH là danh sách các thư mục chỉ định nơi máy tính của bạn sẽ tìm chương trình để chạy từ Terminal.Tại sao dòng lệnh MySQL bị đóng sau khi nhập mật khẩu?
Đó là do Máy chủ MySQL dừng, có thể bạn đang chạy một ứng dụng khác sử dụng cùng một cổng . Hãy thử chạy Cộng đồng trình cài đặt MySQL và bạn sẽ tìm thấy chương trình mà bạn phải cấu hình lại [chữ màu xanh]. Hãy thử định cấu hình Máy chủ MySQL và nhấp vào Kiểm tra kết nối. Lưu câu trả lời này.Điều gì khiến các bảng MySQL bị sập?
1. Nguyên nhân chính khiến cơ sở dữ liệu bị hỏng là do thiếu dung lượng đĩa trống trên máy chủ . 2. Các nguyên nhân khác có thể gây ra sự cố bảng MySQL bao gồm sự cố hệ điều hành, mất điện, sự cố phần cứng, chấm dứt máy chủ MySQL bất ngờ, hỏng dữ liệu do các chương trình bên ngoài, v.v.Dòng lệnh MySQL được sử dụng để làm gì?
mysql là một trình bao SQL đơn giản với khả năng chỉnh sửa dòng đầu vào . Nó hỗ trợ sử dụng tương tác và không tương tác. Khi được sử dụng tương tác, kết quả truy vấn được trình bày ở định dạng bảng ASCII. Khi được sử dụng không tương tác [ví dụ: dưới dạng bộ lọc], kết quả được trình bày ở định dạng được phân tách bằng tab.