Mã lỗi: 2013. Mất kết nối với máy chủ MySQL trong khi truy vấn


250

Tôi đã nhận được Mã lỗi: 2013. Mất kết nối với máy chủ MySQL trong khi lỗi truy vấn khi tôi cố thêm chỉ mục vào bảng bằng MySQL Workbench. Tôi cũng nhận thấy rằng nó xuất hiện bất cứ khi nào tôi chạy truy vấn dài.

Có cách nào để tăng giá trị thời gian chờ không?

Câu trả lời:


471

Các phiên bản mới của MySQL WorkBench có tùy chọn thay đổi thời gian chờ cụ thể.

Đối với tôi, nó nằm trong Chỉnh sửa → Tùy chọn → Trình soạn thảo SQL → Thời gian đọc kết nối DBMS (tính bằng giây): 600

Thay đổi giá trị thành 6000.

Cũng không được kiểm tra các hàng giới hạn vì đặt giới hạn mỗi lần tôi muốn tìm kiếm toàn bộ tập dữ liệu trở nên mệt mỏi.


2
Có thể tăng giới hạn này hơn 99.999 giây không? Các DBMS connection read time outtrường chỉ chấp nhận lên đến 5 con số, và thiết lập các lĩnh vực này để 0 là tương đương với các thông số mặc định (600 giây). (Windows 7 64-bit Ultimate, Bàn làm việc MySQL 5.2.47 CE)
Franck Dernoncourt

2
Sau stackoverflow.com/q/16877574/395857 , vấn đề này hiện đã được giải quyết ( bug.mysql.com/orms.php?id=69395 )
Franck Dernoncourt

4
bỏ chọn các hàng giới hạn trong Chỉnh sửa → Tùy chọn → Truy vấn SQL
Jon

7
Sau khi khởi động lại, nó lại hiển thị Lỗi 2013 ngay cả khi thời gian đọc được đặt thành 6000, vì vậy đây dường như không phải là một giải pháp.
Davicus

4
Hãy nhớ khởi động lại Workbench VÀ để đóng tất cả các cửa sổ truy vấn mở trước!
pimbrouwers

32

Khởi động máy chủ DB với tùy chọn comandline net_read_timeout/ wait_timeoutvà giá trị phù hợp (tính bằng giây) - ví dụ : --net_read_timeout=100.

Để tham khảo xem tại đâyở đây .


1
Điều này là chính xác, nhưng câu trả lời với hầu hết số lần tăng đã giúp tôi thực sự
Sambit Tripathy

6
Làm thế nào để tôi cung cấp tham số này trong dòng lệnh? Khi tôi đang cố gắng kết nối với DB: mysql -u root -p --net_read_timeout = 60 hoặc khi tôi đang cố gắng khởi động dịch vụ? Dịch vụ sudo mysql bắt đầu? Tại cả hai nơi đều đưa ra lỗi: biến không xác định 'net_read_timeout'
Vikas Goel

@VikasGoel Đây là một tham số phía máy chủ. Tức mysqld.
Chloe

29

Nếu truy vấn của bạn có dữ liệu blob, vấn đề này có thể được khắc phục bằng cách áp dụng my.inithay đổi như được đề xuất trong câu trả lời này :

[mysqld]
max_allowed_packet=16M

Theo mặc định, đây sẽ là 1M (giá trị tối đa được phép là 1024M). Nếu giá trị được cung cấp không phải là bội số của 1024K, nó sẽ tự động được làm tròn thành bội số gần nhất của 1024K.

Trong khi luồng được tham chiếu là về lỗi MySQL 2006 , việc đặt max_allowed_packettừ 1M đến 16M đã khắc phục lỗi 2013 xuất hiện cho tôi khi chạy truy vấn dài.

Đối với người dùng WAMP: bạn sẽ tìm thấy cờ trong [wampmysqld]phần.


Đây chính xác là vấn đề của tôi. Tôi đã nhập một bản sao lưu cơ sở dữ liệu từ một tệp và MySQL Workbench đã báo cáo lỗi 2013 này theo sau là "Thao tác thất bại với mã thoát 1". Hóa ra bản sao lưu có các cột blob lớn vượt quá kích thước max_allowed_pquet mặc định của MySQL là 4M. Tăng này cố định nó. (MySQL 5.6 và Bàn làm việc 6.2.3). Cảm ơn!
zAlbee

Đây là sửa chữa cho tôi quá. Mặc dù tôi đặt nó thành 256M cho máy Windows.
smoore4 ngày

Có 16M, đã nhận được lỗi đó với một tệp nhập nhiều lần, đã thay đổi thành 32M và sau đó nó đã hoạt động.
hakre

15

Thêm phần sau vào tập tin / etc / mysql / cnf:

innodb_buffer_pool_size = 64M

thí dụ:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M

6
Bạn có chắc tên tập tin /etc/mysql/cnflà chính xác? Có nên không /etc/my.cnf?
Peter VARGA

12
SET @@local.net_read_timeout=360;

Cảnh báo: Điều sau đây sẽ không hoạt động khi bạn đang áp dụng nó trong kết nối từ xa:

SET @@global.net_read_timeout=360;

360 là gì? Millisec, giây, phút?
MasterJoe2

10

Có ba nguyên nhân có thể gây ra thông báo lỗi này

  1. Thông thường, nó chỉ ra sự cố kết nối mạng và bạn nên kiểm tra tình trạng mạng nếu lỗi này xảy ra thường xuyên
  2. Đôi khi, trong khi truy vấn hình thức, một số hàng được gửi như một phần của một hoặc nhiều truy vấn.
  3. Hiếm khi hơn, nó có thể xảy ra khi máy khách đang cố kết nối ban đầu với máy chủ

Để biết thêm chi tiết đọc >>

Nguyên nhân 2:

SET GLOBAL interactive_timeout=60;

từ mặc định của nó là 30 giây đến 60 giây hoặc lâu hơn

Nguyên nhân 3:

SET GLOBAL connect_timeout=60;

2 cho tôi lỗi này - Mã số: 1227. Truy cập bị từ chối; bạn cần (ít nhất một trong số) các đặc quyền SIÊU cho hoạt động này
MasterJoe2


8

Bạn nên đặt các thuộc tính 'Interactive_timeout' và 'Wait_timeout' trong tệp cấu hình mysql thành các giá trị bạn cần.


Điều này không giúp tôi. 'Interactive_timeout' trong my.cnf được đặt thành 100, quá ngắn. sau khi tôi thay đổi thành 3600 giây (hoặc bất kỳ giá trị nào đủ lớn cho bạn), vấn đề đã được giải quyết
Thx

7

Chỉ cần thực hiện nâng cấp MySQL sẽ xây dựng lại công cụ innoDB cùng với việc xây dựng lại nhiều bảng cần thiết để hoạt động đúng của MySQL như performance_schema,information_schema vv

Ban hành lệnh dưới đây từ shell của bạn:

sudo mysql_upgrade -u root -p

Lỗi không xuất hiện cho đến khi MySQL Workbench 6.1.4 (và chỉ sau một thời gian) và cũng xảy ra vào ngày 6.1.6 (mặc dù chỉ sau một vài lần sử dụng), vì vậy tôi không chắc việc xây dựng lại nhiều máy chủ là cách khắc phục một vấn đề chỉ xuất hiện trên một GUI mới đây.
Davicus

Điều này đã khắc phục vấn đề của tôi. Tôi vừa mới sử dụng Ansible để thiết lập cơ sở dữ liệu trên cơ sở dữ liệu hiện có và mọi thứ trở nên rắc rối. Chạy lệnh này khôi phục mọi thứ để làm việc.
Jubz

4

Tôi biết nó cũ nhưng trên mac

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.

4

Thay đổi thời gian "đọc hết thời gian" trong Chỉnh sửa-> Tùy chọn-> Trình soạn thảo SQL-> Phiên MySQL


3

Hãy thử bỏ chọn các hàng giới hạn trong Chỉnh sửa → Tùy chọn → Truy vấn SQL

bởi vì Bạn nên đặt các thuộc tính 'Interactive_timeout' và 'Wait_timeout' trong tệp cấu hình mysql thành các giá trị bạn cần.


3

Nếu bạn gặp vấn đề này trong quá trình khôi phục tệp kết xuất lớn và có thể loại trừ sự cố có liên quan đến mạng (ví dụ: thực thi trên localhost) thì giải pháp của tôi có thể hữu ích.

Mysqldump của tôi đã tổ chức ít nhất một INSERT quá lớn để mysql tính toán. Bạn có thể xem biến này bằng cách nhập show variables like "net_buffer_length";vào bên trong mysql-cli của bạn. Bạn có ba khả năng:

  • tăng net_buffer_length bên trong mysql -> điều này sẽ cần khởi động lại máy chủ
  • tạo kết xuất với --skip-extended-insert, mỗi lần chèn một dòng được sử dụng -> mặc dù các bãi này đẹp hơn rất nhiều để đọc nhưng điều này không phù hợp với các bãi lớn> 1GB vì nó có xu hướng rất chậm
  • tạo kết xuất với các phần chèn mở rộng (là mặc định) nhưng giới hạn net-buffer_length, ví dụ như --net-buffer_length NR_OF_BYTEStrong đó NR_OF_BYTES nhỏ hơn net_buffer_length của máy chủ -> Tôi nghĩ rằng đây là giải pháp tốt nhất, mặc dù không cần khởi động lại máy chủ.

Tôi đã sử dụng lệnh mysqldump sau: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

Tôi gặp vấn đề tương tự khi tải tập tin .csv. Chuyển đổi tập tin thành .sql.

Sử dụng lệnh dưới đây tôi quản lý để giải quyết vấn đề này.

mysql -u <user> -p -D <DB name> < file.sql

Hy vọng điều này sẽ giúp.


2

Nếu tất cả các giải pháp khác ở đây đều thất bại - hãy kiểm tra syslog của bạn (/ var / log / syslog hoặc tương tự) để xem máy chủ của bạn có hết bộ nhớ trong khi truy vấn không.

Có vấn đề này khi innodb_buffer_pool_size được đặt quá gần với bộ nhớ vật lý mà không có cấu hình hoán đổi. MySQL khuyến nghị cho một máy chủ cụ thể cơ sở dữ liệu cài đặt innodb_buffer_pool_size tối đa khoảng 80% bộ nhớ vật lý , tôi đã đặt nó ở mức khoảng 90%, hạt nhân đã giết chết quá trình mysql. Đã chuyển innodb_buffer_pool_size xuống khoảng 80% và điều đó đã khắc phục vấn đề.


2

Trong trường hợp của tôi, đặt khoảng thời gian chờ kết nối thành 6000 hoặc thứ gì đó cao hơn không hoạt động.

Tôi chỉ làm những gì mà bàn làm việc nói rằng tôi có thể làm.

Lượng thời gian tối đa mà truy vấn có thể mất để trả về dữ liệu từ DBMS.Set 0 để bỏ qua thời gian chờ đọc.

Trên Tùy chọn Mac -> Trình soạn thảo SQL -> Chuyển đến Phiên MySQL -> đặt khoảng thời gian chờ đọc kết nối thành 0.

Và nó hoạt động


1

Tôi phải đối mặt với vấn đề tương tự. Tôi tin rằng nó xảy ra khi bạn có khóa ngoại vào các bảng lớn hơn (cần có thời gian).

Tôi đã cố chạy lại câu lệnh tạo bảng mà không cần khai báo khóa ngoại và thấy nó hoạt động.

Sau đó, sau khi tạo bảng, tôi đã thêm các ràng buộc khóa ngoài bằng cách sử dụng truy vấn ALTER TABLE.

Hy vọng điều này sẽ giúp được ai đó.


1

Điều này xảy ra với tôi vì innodb_buffer_pool_size của tôi được đặt lớn hơn kích thước RAM có sẵn trên máy chủ. Mọi thứ đã bị gián đoạn vì điều này và nó gây ra lỗi này. Cách khắc phục là cập nhật my.cnf với cài đặt chính xác cho innodb_buffer_pool_size.


1

Chuyển đến Workbench Chỉnh sửa → Tùy chọn → Trình soạn thảo SQL → Kết nối DBMS hết thời gian đọc: Tối đa 3000. Lỗi không còn xảy ra.


0

Đi đến:

Chỉnh sửa -> Tùy chọn -> SQL Editor

Ở đó, bạn có thể thấy ba trường trong nhóm "Phiên MySQL", nơi bạn có thể đặt khoảng thời gian kết nối mới (tính bằng giây).


0

Hóa ra quy tắc tường lửa của chúng tôi đã chặn kết nối của tôi với MYSQL. Sau khi chính sách tường lửa được dỡ bỏ để cho phép kết nối, tôi có thể nhập lược đồ thành công.


0

Tôi gặp vấn đề tương tự - nhưng đối với tôi, giải pháp là người dùng DB có quyền quá nghiêm ngặt. Tôi đã phải cho phép Executekhả năng trên mysqlbàn. Sau khi cho phép tôi không còn kết nối nữa.


0

Kiểm tra nếu các chỉ số được đặt ở vị trí đầu tiên.

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'

0

Tôi đã gặp phải điều này trong khi chạy một Proc được lưu trữ - thứ đang tạo ra rất nhiều hàng vào một bảng trong cơ sở dữ liệu. Tôi có thể thấy lỗi xuất hiện ngay sau khi thời gian vượt qua ranh giới 30 giây.

Tôi đã thử tất cả các gợi ý trong các câu trả lời khác. Tôi chắc chắn rằng một số trong số đó đã giúp ích, tuy nhiên - điều thực sự làm cho nó hoạt động với tôi là chuyển sang SequelPro từ Workbench.

Tôi đoán đó là một số kết nối phía máy khách mà tôi không thể phát hiện ra trong Workbench. Có lẽ điều này sẽ giúp người khác là tốt?


0

Nếu bạn đang sử dụng SQL Work Bench, bạn có thể thử sử dụng Lập chỉ mục, bằng cách thêm chỉ mục vào các bảng của bạn, để thêm chỉ mục, nhấp vào biểu tượng cờ lê (cờ lê) trên bảng, nó sẽ mở ra thiết lập cho bảng, bên dưới , nhấp vào chế độ xem chỉ mục, nhập tên chỉ mục và đặt loại thành chỉ mục, Trong các cột chỉ mục, chọn cột chính trong bảng của bạn.

Thực hiện bước tương tự cho các khóa chính khác trên các bảng khác.


0

Dường như có một câu trả lời bị thiếu ở đây cho những người sử dụng SSH để kết nối với cơ sở dữ liệu MySQL của họ. Bạn cần kiểm tra hai vị trí không phải 1 như đề xuất của các câu trả lời khác:

Bàn làm việc Chỉnh sửa → Tùy chọn → Trình soạn thảo SQL → DBMS

Bàn làm việc Chỉnh sửa → Tùy chọn → SSH → Hết giờ

Thời gian chờ SSH mặc định của tôi được đặt rất thấp và gây ra một số (nhưng dường như không phải tất cả) các vấn đề về thời gian chờ của tôi. Sau đó, đừng quên khởi động lại MySQL Workbench!

Cuối cùng, có thể đáng để liên hệ với Quản trị viên DB của bạn và yêu cầu họ tăng các thuộc tính Wait_timeout & Interactive_timeout trong chính mysql thông qua khởi động lại my.conf + mysql hoặc thực hiện cài đặt toàn cầu nếu khởi động lại mysql không phải là một tùy chọn.

Hi vọng điêu nay co ich!


0

Ba điều cần tuân thủ và đảm bảo:

  1. Cho dù nhiều truy vấn hiển thị mất kết nối?
  2. Làm thế nào bạn sử dụng thiết lập truy vấn trong MySQL?
  3. Làm thế nào để xóa + cập nhật truy vấn đồng thời?

Đáp án:

  1. Luôn cố gắng xóa definer vì MySQL tạo definer của riêng nó và nếu nhiều bảng liên quan đến cập nhật hãy thử tạo một truy vấn vì đôi khi nhiều truy vấn hiển thị mất kết nối
  2. Luôn đặt giá trị ở trên cùng nhưng sau khi XÓA nếu điều kiện của nó không liên quan đến giá trị SET.
  3. Sử dụng XÓA XÓA ĐẦU TIÊN THÌ CẬP NHẬT NẾU CẢ HAI HOẠT ĐỘNG NÀY ĐƯỢC THỰC HIỆN TRÊN BẢNG KHÁC NHAU

-1

kiểm tra về

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

Hi vọng điêu nay co ich


-1

Điều này thường có nghĩa là bạn có "sự không tương thích với phiên bản hiện tại của Máy chủ MySQL", xem mysql_upTHER. Tôi gặp vấn đề tương tự và đơn giản là phải chạy:

mysql_upTHER --password Tài liệu nói rằng, "mysql_upTHER nên được thực thi mỗi khi bạn nâng cấp MySQL".

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.