Tại sao dòng lệnh MySQL liên tục gặp sự cố?

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ài

  • Bạ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 mysqld0 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 mysqld1 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ủ MySQL

  • Bắ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 mysqld2. [Nó nằm trong thư mục phân phối nguồn mysqld3. ]

  • Đị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_dump0 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

    1. Bắt đầu mysqld từ gdb [hoặc trình gỡ lỗi khác]. Xem Phần 5. 8, “Gỡ lỗi MySQL”

    2. Chạy tập lệnh thử nghiệm của bạn

    3. 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_dump4 và chuyển sang một chuỗi cụ thể với resolve_stack_dump5, trong đó resolve_stack_dump6 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_dump7 [không phải cột resolve_stack_dump8 hoặc cột resolve_stack_dump9], bạn có thể thử thay đổi tất cả resolve_stack_dump7 thành write[]1 bằng mysqld0. Đ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ều

    Mã 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.

Chủ Đề