Hướng dẫn why does mysql keeps crashing? - tại sao mysql cứ bị sập?

B.3.3.3 & nbsp; Phải làm gì nếu MySQL tiếp tục gặp sự cố

Mỗi phiên bản MySQL được kiểm tra trên nhiều nền tảng trước khi nó được 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 nên rất ít và có thể khó tìm. Nếu bạn gặp vấn đề, nó luôn có ích nếu bạn cố gắng tìm hiểu chính xác điều gì làm hỏng hệ thống của bạn, bởi vì bạn có cơ hội tốt hơn nhiều để khắc phục sự cố một cách nhanh chóng.

Đầu tiên, bạn nên cố gắng tìm hiểu xem vấn đề là máy chủ MySQLD chết hay liệu vấn đề của bạn có liên quan đến máy khách của bạn hay không. Bạn có thể kiểm tra thời gian máy chủ MySQLD của bạn đã tăng bằng cách thực hiện phiên bản mysqladmin. Nếu MySQLD đã chết và khởi động lại, bạn có thể tìm thấy lý do bằng cách nhìn vào nhật ký lỗi của máy chủ. Xem Phần & NBSP; 5.4.2, Nhật ký lỗi.mysqld server dies or whether your problem has to do with your client. You can check how long your mysqld server has been up by executing mysqladmin version. If mysqld has died and restarted, you may find the reason by looking in the server's error log. See Section 5.4.2, “The Error Log”.

Trên một số hệ thống, bạn có thể tìm thấy trong bản ghi lỗi một dấu vết của nơi MySQLD chết. Lưu ý rằng các giá trị biến được viết trong nhật ký lỗi có thể không phải lúc nào cũng chính xác 100%.mysqld died. Note that the variable values written in the error log may not always be 100% correct.

Nếu bạn thấy rằng MySQLD không thành công khi khởi động trong quá trình phục hồi InnoDB, hãy tham khảo phần & NBSP; 15.21.2, Khắc phục sự cố khắc phục.mysqld fails at startup during InnoDB recovery, refer to Section 15.21.2, “Troubleshooting Recovery Failures”.

Nhiều lối thoát máy chủ bất ngờ được gây ra bởi các tệp dữ liệu bị hỏng hoặc tệp chỉ mục. MySQL cập nhật các tệp trên đĩa với lệnh gọi hệ thống write() sau mỗi câu lệnh SQL và trước khi khách hàng được thông báo về kết quả. . Dữ liệu đượ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.mysqld crashes, because the operating system ensures that the unflushed data is written to disk. You can force MySQL to flush everything to disk after every SQL statement by starting mysqld with the --flush option.

Phần trước có nghĩa là thông thường bạn không nên nhận 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ủ máy chủ đã bị giết ở giữa bản cập nhật.

  • Bạn đã tìm thấy một lỗi trong MySQLD khiến nó chết ở giữa bản cập nhật.mysqld that caused it to die in the middle of an update.

  • Một số chương trình bên ngoài đang thao túng các 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.mysqld without locking the table properly.

  • Bạn đang chạy nhiều máy chủ MySQLD bằ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ủ với khóa bên ngoài bị tắt.mysqld servers using the same data directory on a system that does not support good file system locks (normally handled by the lockd lock manager), or you are running multiple servers with external locking disabled.

  • Bạn có một tệp dữ liệu bị lỗi hoặc tệp chỉ mục có chứa dữ liệu rất tham nhũng nhầm lẫn MySQLD.mysqld.

  • 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 nó là có thể. Trong trường hợp này, bạn có thể cố gắng thay đổi công cụ lưu trữ thành một công cụ khác bằng cách sử dụng ALTER TABLE trên một 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 cố gắng kiểm tra xem những thứ hoạt động cho người khác có dẫn đến một lối thoát bất ngờ cho bạn hay không. Hãy thử những điều sau:

  • Dừng máy chủ MySQLD với Shutdown MySQLadmin, chạy myisamchk - -silent - -force */ *. Myi từ thư mục dữ liệu để kiểm tra tất cả các bảng MyISAM 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 & NBSP; 5, Quản trị máy chủ MySQL.mysqld server with mysqladmin shutdown, run myisamchk --silent --force */*.MYI from the data directory to check all MyISAM tables, and restart mysqld. This ensures that you are running from a clean state. See Chapter 5, MySQL Server Administration.

  • Bắt đầu MySQLD với nhật ký truy vấn chung được bật (xem Phần & NBSP; 5.4.3, Hồi The General Truy vấn nhật ký). Sau đó, cố gắng xác định từ thông tin được ghi vào nhật ký xem một số truy vấn cụ thể có giết chết máy chủ hay không. Khoảng 95% của 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 & NBSP; 5.4.3, Nhật ký truy vấn chung. Nếu bạn có thể liên tục giết MySQL 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 phát hành, thì bạn đã cô lập lỗi và nên gửi báo cáo lỗi cho nó. Xem Phần & NBSP; 1.6, Cách báo cáo lỗi hoặc vấn đề.mysqld with the general query log enabled (see Section 5.4.3, “The General Query Log”). Then try to determine from the information written to the log whether some specific query kills the server. About 95% of all bugs are related to a particular query. Normally, this is one of the last queries in the log file just before the server restarts. See Section 5.4.3, “The General Query Log”. If you can repeatedly kill MySQL with a specific query, even when you have checked all tables just before issuing it, then you have isolated the bug and should submit a bug report for it. See Section 1.6, “How to Report Bugs or Problems”.

  • Cố gắng thực hiện 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 & NBSP; 5.9, Debugging MySQL.

  • Hãy thử tập lệnh fork_big.pl. (Nó nằm trong thư mục phân phối nguồn tests.)

  • Định cấu hình MySQL để gỡ lỗi giúp thu thập thông tin về các lỗi có thể dễ dàng hơn nhiều nếu có sự cố. Cấu hình lại MySQL với tùy chọn InnoDB0 thành CMake và sau đó thu lại. Xem Phần & NBSP; 5.9, Debugging MySQL.CMake and then recompile. See Section 5.9, “Debugging MySQL”.

  • Hãy chắc chắn rằng bạn đã áp dụng các bản vá mới nhất cho hệ điều hành của bạn.

  • Sử dụng tùy chọn InnoDB1 cho MySQLD. Trên một số hệ thống, Trình quản lý khóa lockd không hoạt động đúng; Tùy chọn InnoDB1 cho biết MySQLD không sử dụng khóa bên ngoài. .mysqld. On some systems, the lockd lock manager does not work properly; the InnoDB1 option tells mysqld not to use external locking. (This means that you cannot run two mysqld servers on the same data directory and that you must be careful if you use myisamchk. Nevertheless, it may be instructive to try the option as a test.)

  • Nếu MySQLD dường như đang chạy nhưng không phản hồi, hãy thử danh sách xử lý gốc mysqladmin -u. Đôi khi MySQLD không được treo mặc dù có vẻ 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 đề khóa bên trong. MySQLadmin -u Danh sách xử lý gốc 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.mysqld appears to be running but not responding, try mysqladmin -u root processlist. Sometimes mysqld is not hung even though it seems unresponsive. The problem may be that all connections are in use, or there may be some internal lock problem. mysqladmin -u root processlist usually is able to make a connection even in these cases, and can provide useful information about the current number of connections and their status.

  • Chạy lệnh mysqladmin -i 5 trạng thái hoặc trạng thái mysqladmin -i 5 -r 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.mysqladmin -i 5 status or mysqladmin -i 5 -r status in a separate window to produce statistics while running other queries.

  • Hãy thử những điều sau:

    1. Bắt đầu MySQLD từ GDB (hoặc một trình gỡ lỗi khác). Xem Phần & NBSP; 5.9, Debugging MySQL.mysqld from gdb (or another debugger). See Section 5.9, “Debugging MySQL”.

    2. Chạy các tập lệnh kiểm tra của bạn.

    3. In backtrace và các biến cục bộ ở ba cấp thấp nhất. Trong GDB, bạn có thể thực hiện điều này với các lệnh sau khi MySQLD đã bị sập bên trong GDB:gdb, you can do this with the following commands when mysqld has crashed inside gdb:

      backtrace
      info local
      up
      info local
      up
      info local

      Với GDB, bạn cũng có thể kiểm tra các luồng nào tồn tại với InnoDB4 và chuyển sang một luồng cụ thể với InnoDB5, trong đó InnoDB6 là ID luồng.gdb, you can also examine which threads exist with InnoDB4 and switch to a specific thread with InnoDB5, where InnoDB6 is the thread ID.

  • Cố gắng mô phỏng ứng dụng của bạn bằng một tập lệnh Perl để buộc MySQL thoát hoặc sai.

  • Gửi một báo cáo lỗi bình thường. Xem Phần & NBSP; 1.6, Cách báo cáo lỗi hoặc vấn đề. Thậm chí còn chi tiết hơn bình thường. Vì MySQL hoạt động cho nhiều người, vụ tai nạn có thể xuất phát từ một cái gì đó chỉ tồn tại trên máy tính của bạn (ví dụ: một lỗi có liên quan đến các thư viện hệ thống cụ thể của bạn).

  • Nếu bạn có vấn đề với các bảng chứa các hàng có độ dài động và bạn chỉ sử dụng các cột InnoDB7 (không phải InnoDB8 hoặc InnoDB9), bạn có thể cố gắng thay đổi tất cả InnoDB7 thành write()1 với ALTER TABLE. Đ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 có thêm một chút không gian, nhưng chịu đựng tham nhũ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 vấn đề, nhưng các hàng có độ dài động về bản chất dễ bị lỗi hơn, vì vậy có thể 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 vấn đề. Phần cứng bị lỗi có thể là nguyên nhân của tham nhũng dữ liệu. Đặc biệt chú ý đến các 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 MySQL Workbench tiếp tục gặp sự cố?

MySQL Workbench có thể gặp sự cố khi kết nối với cơ sở dữ liệu do tệp đoạn trích người dùng bị hỏng.Tệp có thể bị hỏng nếu bạn chỉnh sửa nó bên ngoài Workbench.Việc xóa tệp đoạn trích sẽ buộc MySQL Workbench tạo một tệp mới vào lần tới khi nó cố gắng kết nối với cơ sở dữ liệu.corrupted User Snippets file. The file may be corrupted if you edit it outside of Workbench. Deleting the snippet file will force MySQL Workbench to create a new one next time it attempts to connect to a database.

Tại sao dòng lệnh MySQL tiếp tục bị sập?

Vấn đề là dịch vụ MySQL đã bị vô hiệu hóa bằng cách nào đó trong nền.Đó là lý do tại sao mặc dù chúng tôi đã gõ đúng mật khẩu, ứng dụng khách lệnh MySQL không thể liên hệ với dịch vụ của mình để cung cấp quyền truy cập vào vỏ MySQL và do đó, nó đã bị sập nhiều lần.the MySQL service was disabled somehow in the background. That's why although we typed the correct password, the MySQL command-line client was not able to contact its service to give access to the MySQL shell and because of that, it was crashing again and again.

Làm thế nào sửa chữa bảng MySQL bị hỏng?

Sửa chữa bàn bị rơi với phpmyadmin..
Đăng nhập vào tài khoản SITITWORX của bạn.....
Ở bên trái, chọn các tính năng lưu trữ> mysql> phpmyadmin ..
Chọn cơ sở dữ liệu chính xác từ danh sách bên trái ..
Chọn hộp kiểm tương ứng với bảng bị hỏng và từ danh sách đã chọn, nhấp vào bảng sửa chữa ..