Cron gặp sự cố MySQL


8

Sau khi chuyển sang một máy chủ mới, tôi gặp sự cố MySQL [1] mỗi ngày một lần, điều này xảy ra với email của tôi và gây khó chịu khi không đề cập đến tác động tiềm năng. Bất kỳ gợi ý về cách gỡ lỗi vấn đề này?

Rõ ràng sự cố đã xảy ra $schedule->save()nên tôi đã cố gắng bọc nó bằng một thử ... bắt nhưng điều đó không giúp được gì

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Trace:
#0 /var/www/vhosts/site/store/lib/Zend/Db/Adapter/Pdo/Abstract.php(305): PDO->beginTransaction()
#1 /var/www/vhosts/site/store/lib/Zend/Db/Adapter/Abstract.php(495): Zend_Db_Adapter_Pdo_Abstract->_beginTransaction()
#2 /var/www/vhosts/site/store/lib/Varien/Db/Adapter/Pdo/Mysql.php(219): Zend_Db_Adapter_Abstract->beginTransaction()
#3 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/Resource/Abstract.php(76): Varien_Db_Adapter_Pdo_Mysql->beginTransaction()
#4 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/Abstract.php(313): Mage_Core_Model_Resource_Abstract->beginTransaction()
#5 /var/www/vhosts/site/store/app/code/core/Mage/Cron/Model/Observer.php(125): Mage_Core_Model_Abstract->save()
#6 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/App.php(1338): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
#7 /var/www/vhosts/site/store/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#8 /var/www/vhosts/site/store/app/Mage.php(447): Mage_Core_Model_App->dispatchEvent('default', Array)
#9 /var/www/vhosts/site/store/cron.php(46): Mage::dispatchEvent('default')
#10
{main}

Cài đặt thời gian chờ:

mysql> show global variables like '%timeout%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| delayed_insert_timeout     | 300      |
| innodb_lock_wait_timeout   | 50       |
| innodb_rollback_on_timeout | OFF      |
| interactive_timeout        | 30       |
| lock_wait_timeout          | 31536000 |
| net_read_timeout           | 30       |
| net_write_timeout          | 60       |
| slave_net_timeout          | 3600     |
| wait_timeout               | 3600     |
+----------------------------+----------+
10 rows in set (0.00 sec)

1
Đây là PHP mất kết nối với MySQL. Biết magento có lẽ là do tệp cron.php đang mất hàng giờ để chạy. Hãy thử nhìn vào cài đặt thời gian chờ MySQL của bạn ...
Matt Humphrey

Bạn có thể kiểm tra mysql LOG! rất có thể mysql bị
sập

Vấn đề @MattHumphrey là nó chỉ xảy ra một lần một ngày trong khi cron.php chạy cứ sau 15 phút, thời gian chờ đã khá cao
Zifius

1
Tôi không nghĩ rằng đây là một câu hỏi cụ thể của Magento. Những gì bạn đang mô tả là thời gian chờ kết nối trên máy chủ MySQL, thường được khôi phục bằng cách đặt tùy chọn kết nối lại trên kết nối và ping máy chủ trước khi sử dụng. Tôi sẽ xem xét cấu hình MySQL của bạn ( my.cnf) để xem thời gian chờ là gì và tăng nó. Xem stackoverflow.com/questions/4284194/ cấp để biết chi tiết.
Karlson

@Zifius Cài đặt thời gian chờ là gì?
Karlson

Câu trả lời:


5

Như những người khác đã nói nó có khả năng được kích hoạt bởi một kịch bản chạy dài. Bất kỳ tập lệnh nào mất nhiều thời gian để chạy mà không sử dụng cơ sở dữ liệu đều có thể hết thời gian chờ.

Tôi đã có điều này xảy ra trước đây. Chúng tôi có một tập lệnh kết nối với máy chủ từ xa, tải xuống vài trăm tệp xml, phân tích cú pháp và chuyển đổi chúng thành tệp .csv để nhập qua mô-đun Magento ImportExport tích hợp. Chúng tôi có một mô-đun ghi nhật ký tùy chỉnh, cho phép chúng tôi theo dõi những gì đã xảy ra với thói quen của chúng tôi. Điều đầu tiên mà lớp thực hiện là thêm một hàng vào bảng nhật ký này để nói rằng thường trình bắt đầu. Sau đó, phải mất 5-10 phút để tìm nạp các tệp xml từ xa. Sau khi tải xuống các tệp, nó cố gắng viết một mục nhật ký khác để nói rằng nó đã hoàn thành. Vì kết nối mysql đã được mở kể từ sự kiện nhật ký đầu tiên và không được sử dụng kể từ đó, mysql đã đóng kết nối vì nó không nhận được truy vấn nào lâu hơn khoảng thời gian chờ.


Vâng, dường như là thủ phạm có tính đến việc các công việc định kỳ được chạy phía trên dòng lưu mục nhập. Đã thêm đăng nhập để tìm hiểu công việc đó là gì
Zifius

3

Trong /etc/mysql/my.cnfnỗ lực của bạn tăng giá trị chomax_allowed_packet

Ví dụ.

max_allowed_packet = 256M

Sau đó khởi động lại MySQL.


Ngay bây giờ là 64M, sẽ cố gắng tăng lên. Tôi cũng thấy rất nhiều "Quá muộn cho lịch trình." ngoại lệ, phải là một công việc nặng nhọc chạy quá lâu
Zifius

Trình thu thập thông tin FPC bị vô hiệu hóa theo đề xuất của bạn trong câu hỏi khác, hãy xem cách nó diễn ra
Zifius

Đây là nguyên nhân thường gặp nhất của sự cố khi chúng tôi gặp phải lỗi này.
davidalger

1

Nếu bạn hỏi tôi, không nên để kết nối mysql mở trong nhiều giờ. Vì vậy, giải pháp thay thế là, để kiểm tra, khi kết nối vẫn tồn tại, nếu không, hãy mở một kết nối mới.


Đó là mã cốt lõi, nhưng đúng vậy, bạn đã đúng :) Chỉ cần theo dõi công việc đã chạy quá lâu bây giờ
Zifius

Có lẽ có một người quan sát bạn có thể sử dụng để kiểm tra, khi kết nối tồn tại?
Fabian Blechschmidt

Tôi nghĩ rằng tôi chỉ cần tìm và sửa công việc đó :)
Zifius

Tùy thuộc vào số lượng lượt xem, danh mục và sản phẩm bạn có, nó có thể là một người lập chỉ mục và điều này có thể chỉ mất thời gian. Nhưng vâng, "chỉ cần sửa chữa công việc" và vấn đề đã biến mất: D
Fabian Blechschmidt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.