2013-02-06 41 views
32

Tôi kết nối với cơ sở dữ liệu mysql bằng cách sử dụng python con = _mysql.connect('localhost', 'dell-pc', '', 'test') Chương trình mà tôi đã viết mất rất nhiều thời gian để thực hiện đầy đủ tức là khoảng 10 giờ. Thực ra, tôi đang cố gắng đọc những từ khác biệt từ một kho văn bản. Sau khi đọc xong, đã xảy ra lỗi hết thời gian chờ.Làm cách nào để thay đổi thời gian chờ kết nối Mysql mặc định khi kết nối qua python?

Tôi đã kiểm tra timeout mặc định Mysql đó là:

+----------------------------+----------+ 
| Variable_name    | Value | 
+----------------------------+----------+ 
| connect_timeout   | 10  | 
| delayed_insert_timeout  | 300  | 
| innodb_lock_wait_timeout | 50  | 
| innodb_rollback_on_timeout | OFF  | 
| interactive_timeout  | 28800 | 
| lock_wait_timeout   | 31536000 | 
| net_read_timeout   | 30  | 
| net_write_timeout   | 60  | 
| slave_net_timeout   | 3600  | 
| wait_timeout    | 28800 | 
+----------------------------+----------+ 

Làm thế nào tôi có thể thay đổi thời gian chờ mặc định?

Trả lời

24

Đỗ:

con.query('SET GLOBAL connect_timeout=28800') 
con.query('SET GLOBAL wait_timeout=28800') 
con.query('SET GLOBAL interactive_timeout=28800') 

Parameter ý nghĩa (lấy từ MySQL Workbench trong Navigator: Instance> Tùy chọn File> Tab "Networking"> mục "Timeout Settings")

  • connect_timeout: Số giây chờ đợi máy chủ mysqld cho một gói kết nối trước khi trả lời với 'Bad bắt tay'
  • interactive_timeout số giây chờ đợi máy chủ cho hoạt động trên một kết nối tương tác trước khi đóng
  • wait_timeout số giây máy chủ đợi hoạt động trên kết nối trước khi đóng kết nối

BTW: 28800 giây là 8 giờ, vì vậy trong thời gian thực thi 10 giờ, các giá trị này thực sự cao hơn.

+3

'gobal' có ảnh hưởng đến tất cả các conenctions kết nối với db ngoại trừ kết nối hiện tại không? – zhkzyth

+3

Sẽ rất hay khi biết sự khác biệt giữa ba điều đó hoặc ít nhất có liên kết đến tài liệu. – jlh

+0

@zhkzyth Tôi có một câu hỏi tương tự. Điều này có thể giúp: https://stackoverflow.com/questions/4440336/mysql-wait-timeout Hình như 'SET GLOBAL' sẽ đặt biến cho tất cả các kết nối đang hoạt động và tương lai cho đến khi máy chủ tiếp theo khởi động lại. Tuy nhiên, có 'SET SESSION' xuất hiện để đặt biến cụ thể cho phiên hiện tại. Ngoài ra còn có https://dev.mysql.com/doc/refman/5.6/en/set-variable.html để biết thêm thông tin. –

41

Bạn thay đổi giá trị mặc định trong MySQL tập tin cấu hình (tùy chọn connect_timeout trong mysqld phần) -

[mysqld] 
connect_timeout=100 

Nếu tập tin này là không thể truy cập cho bạn, sau đó bạn có thể thiết lập giá trị này bằng tuyên bố này -

SET GLOBAL connect_timeout=100; 
+1

Cũng có hai timeouts khác nữa mà được cấu hình bằng các phương pháp nêu trên; wait_timeout & interactive_timeout. Đối với liên kết kiểm tra thông tin chi tiết; http://www.rackspace.com/knowledge_center/article/how-to-change-the-mysql-timeout-on-a-server – csonuryilmaz

+0

Lưu ý rằng nếu bạn đi với phương pháp tệp cấu hình, máy khách mysql có thể không phản ánh thay đổi, nhưng kịch bản của bạn sẽ! Xem bài đăng của tôi: http://stackoverflow.com/questions/9004400/mysql-modification-in-my-cnf-doesnt-take-effect/35186111#35186111 – BuvinJ

+4

Các đơn vị là gì? – dfrankow

5

Tôi biết đây là câu hỏi cũ nhưng chỉ cho bản ghi này cũng có thể được thực hiện bằng cách chuyển các tùy chọn kết nối thích hợp làm đối số cho cuộc gọi _mysql.connect. Ví dụ:

con = _mysql.connect(host='localhost', user='dell-pc', passwd='', db='test', 
      connect_timeout=1000) 

Lưu ý việc sử dụng thông số từ khóa (máy chủ, mật khẩu, v.v ...). Chúng cải thiện khả năng đọc mã của bạn.

Đối với chi tiết về lập luận khác nhau mà bạn có thể vượt qua để _mysql.connect, xem MySQLdb API documentation

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