2008-08-11 57 views
13

[Tôi hy vọng điều này không quá tối nghĩa & hellip; Tôi sẽ hỏi nhóm tin nếu không ai biết ở đây]Lỗi giá treo - 'Máy chủ MySQL đã biến mất'

Tôi đang sử dụng giá treo (khung python) để phục vụ một ứng dụng web đơn giản, nhưng có vẻ như sẽ chết theo thời gian, với điều này trong nhật ký lỗi: (2006, 'MySQL server has gone away')

Tôi đã kiểm tra một chút và thấy rằng điều này là do các kết nối tới MySQL không được gia hạn. Tuy nhiên, đây không phải là vấn đề, bởi vì sqlalchemy.pool_recycle trong tệp cấu hình sẽ tự động giữ cho nó hoạt động. Mặc định là 3600, nhưng tôi đã quay lại số 1800 vì sự cố này. Nó đã giúp một chút, nhưng 3600nên là tốt theo tài liệu. Các lỗi vẫn xảy ra bán thường xuyên. Tôi không muốn hạ thấp nó quá nhiều và DOS cơ sở dữ liệu của riêng tôi :).

Có thể có điều gì đó trong cấu hình MySQL của tôi bị lỗi? Không chắc chắn nơi để tìm chính xác.

Các chi tiết khác có liên quan:

Python 2.5 
    Pylons: 0.9.6.2 (w/ sql_alchemy) 
    MySQL: 5.0.51 
+0

tôi đã nhận lỗi này sau khi một kịch bản tôi đã viết đi AWOL và chèn 10000 hàng vào một bảng cùng một lúc. Dường như không an toàn với tôi - không chắc liệu điều đó có liên quan đến vấn đề của bạn hay không ... –

Trả lời

6

Tôi nghĩ rằng tôi đã sửa nó. Nó chỉ ra tôi đã có một lỗi cấu hình đơn giản. ini tập đọc của tôi:

sqlalchemy.default.url = [connection string here] 
sqlalchemy.pool_recycle = 1800 

Vấn đề là tập tin environment.py tôi tuyên bố rằng động cơ sẽ chỉ phím bản đồ với các tiền tố: sqlalchemy.default nên pool_recycle đã bị bỏ qua.

Giải pháp là chỉ đơn giản là thay đổi dòng thứ hai trong INI:

sqlalchemy.default.pool_recycle = 1800 
+0

Vừa mới xem một số lưu lượng truy cập trên bài đăng này. Cần lưu ý rằng vấn đề này liên quan đến Giá treo 0.9.6. Điều này nên được quan tâm trong giá treo 0.9.7, và tài sản 'sqlalchemy.default' biến mất chỉ vì lợi ích của 'sqlalchemy' đơn giản – swilliams

2

Bạn có thể muốn kiểm tra các biến thời gian chờ của MySQL:

show variables like '%timeout%'; 

Có lẽ bạn đang quan tâm đến việc wait_timeout (ít có khả năng nhưng có thể: interactive_timeout). Trên Debian và Ubuntu, mặc định là 28800 (MySQL giết chết các kết nối sau 8 giờ), nhưng có thể mặc định cho nền tảng của bạn là khác nhau hoặc bất cứ ai quản trị máy chủ đã cấu hình mọi thứ khác nhau.

AFAICT, pool_recycle không thực sự giữ các kết nối còn hoạt động, nó tự hết hạn trước khi MySQL giết chúng. Tôi không quen thuộc với giá treo, nhưng nếu gây ra các kết nối không liên tục thực hiện một tùy chọn SELECT 1;, điều đó sẽ giữ cho chúng hoạt động với chi phí về cơ bản không tải máy chủ và lưu lượng mạng tối thiểu. Một suy nghĩ cuối cùng: bạn có bằng cách nào đó quản lý để sử dụng một kết nối mà giá treo cho rằng nó đã hết hạn?

+0

Tôi không thể nói chắc chắn; Tôi không biết phần thân của giá treo cũng đủ. Tôi đã không có cơ hội để poke thông qua các tài liệu nào được nêu ra hoặc (bận rộn bận rộn). Tôi không nghĩ rằng SELECT 1; điều là một lựa chọn mặc dù, có vẻ như loại kludgey quá :). – swilliams

Các vấn đề liên quan