Я намагався імпортувати великий файл sql через phpMyAdmin ... Але він постійно показував помилку
"Сервер MySql пішов"
Що робити?
max_allowed_packet
. Трохи грубо, але якщо це спрацьовує, ви можете знайти здорове значення.
Я намагався імпортувати великий файл sql через phpMyAdmin ... Але він постійно показував помилку
"Сервер MySql пішов"
Що робити?
max_allowed_packet
. Трохи грубо, але якщо це спрацьовує, ви можете знайти здорове значення.
Відповіді:
Як зазначено тут :
Дві найпоширеніші причини (і виправлення) для сервера MySQL пішли (помилка 2006):
Сервер вичерпав та закрив з'єднання. Як виправити:
переконайтеся, що змінна wait_timeout у файлі конфігурації my.cnf вашого mysqld є достатньо великою. У Debian:
sudo nano /etc/mysql/my.cnf
встановітьwait_timeout = 600
секунди (ви можете налаштувати / зменшити це значення, коли помилка 2006 не буде), потімsudo /etc/init.d/mysql restart
. Я не перевіряв, але значення за замовчуванням для wait_timeout може становити близько 28800 секунд (8 годин).Сервер скинув неправильний або занадто великий пакет. Якщо mysqld отримує занадто великий або неправильний пакет, він припускає, що з клієнтом щось пішло не так і закриває з'єднання. Ви можете збільшити максимальний розмір пакету, збільшивши значення max_allowed_packet у файлі my.cnf. У Debian:,
sudo nano /etc/mysql/my.cnf
встановітьmax_allowed_packet = 64M
(ви можете налаштувати / зменшити це значення, коли помилка 2006 року відсутня), потімsudo /etc/init.d/mysql restart
.
Редагувати:
Зауважте, що файли опцій MySQL не мають своїх команд, уже доступних як коментарі (як, наприклад, у php.ini). Таким чином , ви повинні ввести який - або зміна / Твік в my.cnf
або my.ini
і розмістити їх в mysql/data
каталозі або в будь-якому з інших шляхів, при правильній групі опцій , таких як [client]
, [myslqd]
і так далі Наприклад:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
Потім перезавантажте сервер. Щоб отримати їх значення, введіть у клієнт mysql:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
запит MySQL), і файл, який я імпортував, мав кілька дуже великих записів. Я відкрив файл my.ini (у мене працював Windows) і встановив значення для цього:, max_allowed_packet = 64M
перезапустив MySQL і повторно запустив імпорт.
wait_timeout
лінію
Для мене це рішення не вийшло, тому я виконав
SET GLOBAL max_allowed_packet=1073741824;
в моєму SQL-клієнті.
Якщо ви не можете змінити це за допомогою запущеної служби MYSql, слід зупинити службу та змінити змінну у файлі "my.ini".
Наприклад:
max_allowed_packet=20M
php.ini
файл (як запропонував @GBD у відповіді), так і конфігураційний файл MySQL, my.ini
щоб він працював.
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
одного клієнта та імпортування великого .sql
файлу в інший сеанс буде добре.
Якщо ви працюєте над XAMPP, ви можете виправити проблему MySQL Server, яка пішла з наступних змін.
відкрийте файл my.ini my.ini - це місце розташування (D: \ xampp \ mysql \ bin \ my.ini)
змінити наступні значення змінних
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
Якщо ви працюєте зі значеннями за замовчуванням, то у вас є багато місця для оптимізації конфігурації mysql.
Перший крок, який я рекомендую, - це збільшити max_allowed_packet до 128М.
Потім скачайте скрипт настройки Tuning Primer MySQL і запустіть його. Він надасть рекомендації для декількох аспектів вашого конфігурації для кращої роботи.
Також погляньте на коригування значень тайм-ауту як у MySQL, так і в PHP.
Наскільки великий (розмір) файл, який ви імпортуєте, і чи можете ви імпортувати файл за допомогою клієнтського командного рядка mysql замість PHPMyAdmin?
Я вирішив свою проблему цим коротким файлом /etc/mysql/my.cnf:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
Інша причина, по якій це може статися, втрачає пам'ять. Перевірте / var / log / messages та переконайтеся, що ваш my.cnf не налаштований так, щоб mysqld виділяв більше пам'яті, ніж ваша машина.
Ваш процес mysqld насправді може бути вбитий ядром, а потім заново запустити процес "safe_mysqld", не усвідомлюючи цього.
Використовуйте верхню частину і спостерігайте за розподілом пам’яті під час її роботи, щоб побачити, що таке ваш зал.
зробіть резервну копію my.cnf перед її зміною.
У мене була ця помилка та інші пов'язані з ними, коли я імпортував файл SQL розміром 16 ГБ. Для мене редагування my.ini та встановлення наступного (на основі декількох різних публікацій) у розділі [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
Якщо ви працюєте під Windows, перейдіть до панелі управління, сервісів та подивіться деталі для MySQL, і ви побачите, де знаходиться мій.ini. Потім після редагування та збереження my.ini перезапустіть службу mysql (або перезавантажте комп'ютер).
Якщо ви використовуєте HeidiSQL, ви також можете встановити деякі або всі з них за допомогою цього.
Я оновив "max_allowed_packet" до 1024М, але він все ще не працював. Виявляється, мій сценарій розгортання працював:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
Не забудьте чітко вказати більшу кількість з командного рядка, якщо ви донігуєте це таким чином.
Якщо ваші дані включають BLOB
дані:
Зауважте, що імпорт даних із командного рядка, здається, заглушує дані BLOB, внаслідок чого помилка "MySQL-сервер пішла".
Щоб уникнути цього, заново створіть mysqldump, але з --hex-blob
прапором:
http://dev.mysql.com/doc/refman/5.7/uk/mysqldump.html#option_mysqldump_hex-blob
який запише файл даних із шістнадцятковими значеннями, а не двійковими серед іншого тексту.
У PhpMyAdmin також є опція "Дамп двійкових стовпців у шістнадцятковій нотації (наприклад," abc "стає 0x616263)", що працює добре.
Зауважте, що існує давня помилка (станом на грудень 2015 року), що означає, що GEOM
стовпці не перетворені:
резервне копіювання таблиці стовпцем GEOMETRY за допомогою mysqldump?
тому використання такої програми, як PhpMyAdmin, здається єдиним вирішенням (опція, зазначена вище, правильно перетворює стовпці GEOM).
Якщо потрібно тривалий час, а потім збільшити wait_timeout
змінну.
Якщо вона не вдається негайно, збільште max_allowed_packet
змінну; це все ще не працює, переконайтеся, що команда дійсна SQL. У шахти були нецільові котирування, які все накрутили.
Крім того, якщо це можливо, розгляньте обмеження кількості вставок однієї команди SQL до, скажімо, 1000. Ви можете створити скрипт, який створює декілька висловлювань з однієї, повторно вводячи частину INSERT ... кожну n вставку.
У мене з'явилася аналогічна помилка .. для вирішення цього просто відкрийте файл my.ini..в рядку немає 36 змінити значення максимально дозволеного розміру пакету, тобто. max_allowed_packet = 20М
Переконайтеся, що процес mysqld не перезапускається через таких менеджерів сервісів, як systemd.
У мене ця проблема була бродлива з центсом 7. Налаштування конфігурації не допомогло. Виявилося, це було систематизовано, що вбивало службу mysqld кожного разу, коли вона забирала занадто багато пам'яті.
У мене сьогодні була подібна помилка при дублюванні бази даних (MySQL-сервер пішов ...), але коли я намагався перезапустити mysql.server перезапуск, у мене з’явилася помилка
ERROR! The server quit without updating PID ...
Ось як я це вирішив: я відкрив програми / утиліти / та запустив Монітор активності
quit mysqld
тоді вдалося вирішити проблему помилок із
mysql.server restart
Я роблю великі обчислення, які передбачають, що з'єднання mysql залишається тривалий час і з великими даними. я стикався з цим питанням "Mysql go away". Тож я спробував оптимізувати запити, але це мені не допомогло, тоді я збільшив обмеження змінних mysql, яке за замовчуванням встановлено на нижнє значення.
wait_timeout max_allowed_packet
Для обмеження того, що вам підходить, повинно бути будь-яке число * 1024 (байти). Ви можете увійти до терміналу, використовуючи команду ' mysql -u ім'я користувача - p ' і можете перевірити та змінити ці змінні межі.
У GoDaddy, що ділиться обліковими записами хостингу, складно налаштувати файли PHP.ini тощо. Однак є інший спосіб, і він просто прекрасно працював для мене. (Я тільки що успішно завантажив 3,8 Мб .sql текстовий файл, що містить 3100 рядків і 145 cols. Використовуючи команду IMPORT в phpMyAdmin, я отримав жахливий MySQL-сервер, який пішов з помилки, і більше інформації немає.)
Я виявив, що Метт Батчер мав правильну відповідь. Як і Метт, я спробував усілякі хитрощі - від експорту баз даних MySQL в шматки розміру кусання, до написання сценаріїв, які розбивають великий імпорт на менші. Але ось що спрацювало:
(1) CPANEL ---> ФАЙЛИ (група) ---> РЕКЛАМА
(2a) Під заголовком "Часткове резервне копіювання" ...
(2b) У розділі "Завантажити резервну копію бази даних MySQL"
(2c) Виберіть свою базу даних та завантажте резервну копію (цей крок необов'язково, але розумно)
(3a) Прямо праворуч від 2b, під заголовком "Відновлення резервної копії бази даних MySQL"
(3b) Виберіть файл імпорту .SQL з локального диска
(3c) Справжнє щастя буде вашим (незабаром ....). 5 секунд
Мені вдалося скористатися цим методом для імпорту однієї таблиці. Ніщо інше в моїй базі даних не постраждало - але саме цим кроком (2) покликаний захистити.
Примітки:
a. Якщо ви не впевнені, як створити файл імпорту .SQL, використовуйте phpMyAdmin для експорту таблиці та модифікації цієї файлової структури.
ДЖЕРЕЛО: Метт Батчер 2010 Стаття
max_allowed_packet
не допомагає.Я отримував таку ж помилку, що і ви, коли імпортував .sql
файл у мою базу даних через Sequel Pro.
Помилка все ще зберігається після збільшення max_allowed_packet
до, 512M
тому я запустив імпорт у командному рядку замість:
mysql --verbose -u root -p DatabaseName < MySQL.sql
Це дало таку помилку:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
Я знайшов пару корисних запитань щодо StackOverflow:
У моєму випадку мій .sql
файл був трохи пошкоджений чи щось таке. Дамп MySQL, який ми отримуємо, складається з двох поштових файлів, які потрібно об'єднати, а потім розпакувати. Я думаю, що розпакування було перервано спочатку, залишивши файл із деякими непарними символами та кодуванням. Отримати свіжий дамп MySQL та розпакувати його належним чином працював для мене.
Просто хотіли додати це сюди, якщо інші виявлять, що збільшення max_allowed_packet
змінної не допомагає.
Жодне з рішень щодо розміру пакету чи тайм-аутів для мене не змінило жодного значення. Мені потрібно було відключити ssl
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/uk/encrypted-connections.html
У мене те саме питання з
$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);
У файлі \ xampp \ mysql \ bin \ my.ini phpmyadmin ми отримуємо лише
[mysqldump]
max_allowed_packet=110M
що саме для mysqldump -u root -p dbname. Я вирішив свою проблему, замінивши вказаний вище код
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M