Tôi đã cố gắng nhập một tệp sql lớn thông qua phpMyAdmin ... Nhưng nó vẫn hiển thị lỗi
'Máy chủ MySql đã biến mất'
Phải làm sao?
max_allowed_packet
. Một chút thô, nhưng nếu nó hoạt động bạn có thể tìm thấy một giá trị lành mạnh.
Tôi đã cố gắng nhập một tệp sql lớn thông qua phpMyAdmin ... Nhưng nó vẫn hiển thị lỗi
'Máy chủ MySql đã biến mất'
Phải làm sao?
max_allowed_packet
. Một chút thô, nhưng nếu nó hoạt động bạn có thể tìm thấy một giá trị lành mạnh.
Câu trả lời:
Như đã nêu ở đây :
Hai lý do phổ biến nhất (và sửa lỗi) cho máy chủ MySQL đã biến mất (lỗi 2006) là:
Máy chủ đã hết thời gian và đóng kết nối. Làm thế nào để khắc phục:
kiểm tra xem biến Wait_timeout trong tệp cấu hình my.cnf của mysqld có đủ lớn không. Trên Debian :
sudo nano /etc/mysql/my.cnf
, đặtwait_timeout = 600
giây (bạn có thể điều chỉnh / giảm giá trị này khi hết lỗi 2006)sudo /etc/init.d/mysql restart
. Tôi đã không kiểm tra, nhưng giá trị mặc định cho Wait_timeout có thể vào khoảng 28800 giây (8 giờ).Máy chủ đánh rơi một gói không chính xác hoặc quá lớn. Nếu mysqld nhận được một gói quá lớn hoặc không chính xác, nó giả định rằng đã xảy ra sự cố với máy khách và đóng kết nối. Bạn có thể tăng giới hạn kích thước gói tối đa bằng cách tăng giá trị của max_allowed_packet trong tệp my.cnf. Trên Debian :
sudo nano /etc/mysql/my.cnf
, được đặtmax_allowed_packet = 64M
(bạn có thể điều chỉnh / giảm giá trị này khi hết lỗi 2006)sudo /etc/init.d/mysql restart
.
Biên tập:
Lưu ý rằng các tệp tùy chọn MySQL không có sẵn các lệnh của chúng dưới dạng các nhận xét (ví dụ như trong php.ini). Vì vậy, bạn phải gõ bất kỳ thay đổi / tinh chỉnh trong my.cnf
hay my.ini
và đặt chúng trong mysql/data
thư mục hoặc trong bất kỳ của những con đường khác, theo nhóm thích hợp các tùy chọn như [client]
, [myslqd]
vv Ví dụ:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Sau đó khởi động lại máy chủ. Để nhận giá trị của chúng, hãy nhập máy khách mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
truy vấn MySQL) và tệp tôi đang nhập có một vài bản ghi rất lớn. Tôi đã mở tệp my.ini (tôi đang chạy Windows) và đặt giá trị này : max_allowed_packet = 64M
, khởi động lại MySQL và chạy lại quá trình nhập.
wait_timeout
dòng
Đối với tôi giải pháp này không hiệu quả nên tôi đã thực hiện
SET GLOBAL max_allowed_packet=1073741824;
trong máy khách SQL của tôi.
Nếu không thể thay đổi điều này với dịch vụ MYSql đang chạy, bạn nên dừng dịch vụ và thay đổi biến trong tệp "my.ini".
Ví dụ:
max_allowed_packet=20M
php.ini
tệp (như được đề xuất bởi @GBD trong câu trả lời) và tệp cấu hình MySQL my.ini
để làm cho nó hoạt động.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
trong một máy khách và sau đó nhập .sql
tệp lớn trong phiên khác sẽ hoạt động tốt.
Nếu bạn đang làm việc trên XAMPP thì bạn có thể khắc phục sự cố Máy chủ MySQL đã biến mất với các thay đổi sau ..
mở tệp my.ini vị trí my.ini của tôi là (D: \ xampp \ mysql \ bin \ my.ini)
thay đổi các giá trị biến sau
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Nếu bạn đang chạy với các giá trị mặc định thì bạn có rất nhiều chỗ để tối ưu hóa cấu hình mysql của bạn.
Bước đầu tiên tôi khuyên bạn là tăng max_allowed_packet lên 128M.
Sau đó tải xuống tập lệnh MySQL Tune Primer và chạy nó. Nó sẽ cung cấp các đề xuất cho một số khía cạnh của cấu hình của bạn để có hiệu suất tốt hơn.
Cũng xem xét điều chỉnh giá trị thời gian chờ của bạn cả trong MySQL và PHP.
Làm thế nào lớn (kích thước tệp) là tệp bạn đang nhập và bạn có thể nhập tệp bằng cách sử dụng máy khách dòng lệnh mysql thay vì PHPMyAdmin?
Tôi đã giải quyết vấn đề của mình với tệp /etc/mysql/my.cnf ngắn này:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
Lý do khác điều này có thể xảy ra là hết bộ nhớ. Kiểm tra / var / log / message và đảm bảo rằng my.cnf của bạn không được thiết lập để khiến mysqld phân bổ nhiều bộ nhớ hơn so với máy của bạn.
Quá trình mysqld của bạn thực sự có thể bị giết bởi kernel và sau đó được khởi động lại bởi quy trình "safe_mysqld" mà bạn không nhận ra.
Sử dụng hàng đầu và xem phân bổ bộ nhớ trong khi nó đang chạy để xem khoảng không của bạn là gì.
tạo một bản sao lưu của my.cnf trước khi thay đổi nó.
Tôi đã gặp lỗi này và các lỗi liên quan khác, khi tôi nhập tệp SQL 16 GB. Đối với tôi, chỉnh sửa my.ini và thiết lập các mục sau (dựa trên một số bài đăng khác nhau) trong phần [mysqld]:
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
Nếu bạn đang chạy trong Windows, hãy truy cập bảng điều khiển, dịch vụ và xem chi tiết về MySQL và bạn sẽ thấy my.ini ở đâu. Sau đó, sau khi bạn chỉnh sửa và lưu my.ini, hãy khởi động lại dịch vụ mysql (hoặc khởi động lại máy tính).
Nếu bạn đang sử dụng HeidiSQL, bạn cũng có thể đặt một số hoặc tất cả những thứ này bằng cách sử dụng.
Nếu dữ liệu của bạn bao gồm BLOB
dữ liệu:
Lưu ý rằng việc nhập dữ liệu từ dòng lệnh dường như làm nghẹt dữ liệu BLOB, dẫn đến lỗi 'Máy chủ MySQL đã biến mất'.
Để tránh điều này, hãy tạo lại mysqldump nhưng với --hex-blob
cờ:
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
sẽ ghi ra tệp dữ liệu với các giá trị hex chứ không phải nhị phân giữa các văn bản khác.
PhpMyAdmin cũng có tùy chọn "Kết xuất các cột nhị phân trong ký hiệu thập lục phân (ví dụ:" abc "trở thành 0x616263)" hoạt động độc đáo.
Lưu ý rằng có một lỗi tồn tại lâu dài (kể từ tháng 12 năm 2015) có nghĩa là GEOM
các cột không được chuyển đổi:
Sao lưu bảng có cột GEOMETRY bằng mysqldump?
vì vậy, sử dụng một chương trình như PhpMyAdmin dường như là cách giải quyết duy nhất (tùy chọn được ghi chú ở trên không chuyển đổi chính xác các cột GEOM).
Nếu phải mất một thời gian dài để thất bại, sau đó phóng to wait_timeout
biến.
Nếu nó thất bại ngay lập tức, phóng to max_allowed_packet
biến; Nó vẫn không hoạt động, đảm bảo lệnh là SQL hợp lệ. Của tôi đã có trích dẫn không được giải thích mà làm hỏng mọi thứ lên.
Ngoài ra, nếu khả thi, hãy xem xét việc giới hạn số lần chèn của một lệnh SQL duy nhất, giả sử, 1000. Bạn có thể tạo một tập lệnh tạo nhiều câu lệnh trong một câu lệnh bằng cách giới thiệu lại phần INSERT ... mỗi lần chèn.
Tôi đã gặp lỗi tương tự ngày hôm nay khi sao chép cơ sở dữ liệu (máy chủ MySQL đã biến mất ...), nhưng khi tôi cố gắng khởi động lại mysql.server thì tôi gặp lỗi
ERROR! The server quit without updating PID ...
Đây là cách tôi giải quyết: Tôi đã mở Ứng dụng / Tiện ích / và chạy Activity Monitor
quit mysqld
sau đó đã có thể giải quyết vấn đề lỗi với
mysql.server restart
Tôi đang thực hiện một số tính toán lớn liên quan đến kết nối mysql để duy trì thời gian dài và với dữ liệu nặng. tôi đã phải đối mặt với vấn đề "Mysql go Away". Vì vậy, tôi đã cố gắng tối ưu hóa các truy vấn nhưng điều đó không giúp tôi sau đó tôi đã tăng giới hạn biến mysql được đặt thành giá trị thấp hơn theo mặc định.
Wait_timeout max_allowed_packet
Theo giới hạn những gì phù hợp với bạn, nó phải là Số bất kỳ * 1024 (byte). bạn có thể đăng nhập vào terminal bằng lệnh ' mysql -u username - p ' và có thể kiểm tra và thay đổi các giới hạn biến này.
Trên các tài khoản lưu trữ được chia sẻ của GoDaddy, thật khó để điều chỉnh các tệp PHP.ini, v.v. Tuy nhiên, có một cách khác và nó chỉ hoạt động hoàn hảo với tôi. (Tôi chỉ tải lên thành công file văn bản một 3.8Mb sql, chứa 3100 dòng và 145 cols. Sử dụng lệnh IMPORT trong phpMyAdmin, tôi đã nhận được sự sợ hãi máy chủ MySQL đã đi xa lỗi, và không có thêm thông tin.)
Tôi thấy rằng Matt Butcher đã có câu trả lời đúng. Giống như Matt, tôi đã thử tất cả các loại thủ thuật, từ xuất cơ sở dữ liệu MySQL thành các phần nhỏ, cho đến viết các tập lệnh phá vỡ các bản nhập lớn thành các phần nhỏ hơn. Nhưng đây là những gì đã làm việc:
(1) CPANEL ---> PHIM (nhóm) ---> BACKUP
(2a) Trong tiêu đề "Sao lưu một phần" ...
(2b) Trong "Tải xuống bản sao lưu cơ sở dữ liệu MySQL"
(2c) Chọn cơ sở dữ liệu của bạn và tải xuống bản sao lưu (bước này tùy chọn, nhưng khôn ngoan)
(3a) Trực tiếp ở bên phải của 2b, trong tiêu đề "Khôi phục sao lưu cơ sở dữ liệu MySQL"
(3b) Chọn tệp nhập .Query từ ổ đĩa cục bộ của bạn
(3c) Hạnh phúc thật sự sẽ là của bạn (trong thời gian ngắn ....) 5 giây
Tôi đã có thể sử dụng phương pháp này để nhập một bảng duy nhất. Không có gì khác trong cơ sở dữ liệu của tôi bị ảnh hưởng - nhưng đó là những gì (2) ở trên nhằm bảo vệ chống lại.
Ghi chú:
a. Nếu bạn không chắc chắn cách tạo tệp nhập .Query, hãy sử dụng phpMyAdmin để xuất bảng và sửa đổi cấu trúc tệp đó.
NGUỒN: Điều Matt Butcher 2010
max_allowed_packet
không giúp được gì.Tôi đã gặp lỗi tương tự như bạn khi nhập .sql
tệp vào cơ sở dữ liệu của mình qua Sequel Pro.
Lỗi vẫn còn sau khi nâng cấp max_allowed_packet
lên 512M
vì vậy tôi đã chạy nhập trong dòng lệnh thay vì:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Nó đã đưa ra lỗi sau:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Tôi tìm thấy một vài câu hỏi StackOverflow hữu ích:
Trong trường hợp của tôi, .sql
tập tin của tôi là một chút tham nhũng hoặc một cái gì đó. Kết xuất MySQL mà chúng tôi nhận được có hai tệp zip cần được nối với nhau và sau đó được giải nén. Tôi nghĩ rằng việc giải nén đã bị gián đoạn ban đầu, để lại tệp có một số ký tự và mã hóa kỳ lạ. Nhận một kết xuất MySQL mới và giải nén nó hoạt động đúng với tôi.
Chỉ muốn thêm điều này ở đây trong trường hợp những người khác thấy rằng việc tăng max_allowed_packet
biến không giúp ích được gì.
Không có giải pháp nào liên quan đến kích thước gói hoặc thời gian chờ tạo ra sự khác biệt đối với tôi. Tôi cần phải tắt ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
Tôi có cùng một vấn đề với
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
Trong tệp \ xampp \ mysql \ bin \ my.ini của phpmyadmin, chúng tôi chỉ nhận được
[mysqldump]
max_allowed_packet=110M
vốn chỉ dành cho mysqldump -u root -p dbname. Tôi đã giải quyết vấn đề của mình bằng cách thay thế mã trên bằng
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M