Помилка mysqldump 2013


18

У мене встановлена ​​база даних, яку я хотів би зробити резервну копію в mysql. Проблема полягає в тому, що mysqldumpне вдалося експортувати таблицю 'maia_mail'

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

Він працює менше 30 секунд і виходить помилка, як зазначено вище.

Загальний розмір БД - 1,3 ГБ, таблиця maia_mail - 1,0 ГБ

У my.cnfмене є такий набір:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

Проконсультуйте або дайте поради щодо того, як скинути базу даних?


170 Гб вільного місця. Це те ж саме, я перебуваю на машині db увімкнено або віддалено
garfink

копії електронної пошти, головним чином, дані varchar
garfink

1300M була нещодавньою зміною, проблема існувала і тоді, коли вона була встановлена ​​також за замовчуванням 16M. Сервер також був перезапущений після зміни на 1300М.
garfink

Я повернувся до 16М за замовчуванням. дамп призводить до тієї ж помилки 2013 року в рядку 15
garfink

Відповіді:


13

Я міг би легко запропонувати змінити параметри InnoDB, які можуть бути важкою рукою просто для того, щоб змусити mysqldump працювати. Можливо, вам не сподобається те, що я пропоную, але я вважаю, що це найкращий (єдиний) варіант. Ось це іде:

ПРИКЛАД №1: Вимкнути розширені вставки

Налаштування mysqldump за замовчуванням буде включати в себе об'єднання сотень чи тисяч рядків в одну ВСТУП. Це відоме як розширена INSERT. Це викликає деякий перевищення за межі просто max_allowed_packet .

Я відповів на публікацію назад Sep 01, 2011( MySQL-сервер пішов, перешкоджаючи імпорту великих відвалів ), де я обговорював те, що роблю те саме, що імпортувати великий mysqldump. Я вважаю, що відключення розширеного INSERT також допоможе створити клопіткий mysqldump.

mysqldump -u root --skip-extended-insert -p maia > maia.sql

Погані новини: Що це робить для створення команди INSERT для кожного рядка. Це, безумовно, збільшить час, необхідний для виконання mysqldump. Отже, це також збільшиться з часом, необхідним для перезавантаження (можливо, в 10-100 разів).

Я обговорював skip-extended-insertраніше

ПРЕДЛОЖЕННЯ №2: скидання двійкових даних у вигляді шістнадцяткових (ОПЦІЙНО)

Щоб зробити бінарні дані mysqldump більш байтними, переносьте такі дані в шістнадцятковий

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

Погані новини: Це пошкодить mysqldump трохи більше

СПРОБУВАТИ !!!

Бічна примітка: Максимальний розмір max_allowed_packet - 1G


5

Я також отримував ту саму помилку під час спроби скинути 12 ГБ бази даних. Я зробив наступні зміни, щоб він працював.

  1. налаштовано max_allowed_packet до 1024М
  2. налаштовано net_read_timeout до 7200
  3. налаштовано net_write_timeout до 7200

Примітка: Я знаю, що значення тайм-ауту занадто великі (7200 секунд, тобто 20 годин). Але я це зробив задумливо, щоб виключити будь-який шанс. Я зараз знаходжу оптимальне значення тайм-ауту.


2
Для інших користувачів: це налаштування на сервері, а не в конфігураційному файлі mysqldump. Також 7200 секунд - це 2 години, а не 20.
Марк

встановити глобальний net_read_timeout = 120; встановити глобальний net_write_timeout = 900; працював на мене
kasi

2

Просто включіть у конфігураційний файл my.ini (Windows) або my.cnf (Linux) наступне.

[mysqld]
max_allowed_packet=1024M 

[mysqldump]
max_allowed_packet=1024M 
net_read_timeout=3600 
net_write_timeout=3600

2
Розділи повинні бути навпаки.
OrangeDog

1

Переконайтеся, що у вас є достатня кількість пам'яті для скидання. Будь ласка, продовжуйте перевіряти пам'ять під час отримання дампа, наприклад, використовуючи таку команду:

free -mt

Якщо ви пам’ятаєте вихлопну пам’ять, приймаючи скидання, ви отримаєте

mysqldump: Помилка 2013: втрачено з’єднання


1

Я знайшов:

--max-allowed-packet=1G --net-buffer-length=32704

... змушує його працювати там, де раніше не було (надійно), незважаючи на чисті зміни часу очікування / запису, TCP keepalives тощо.

Ці max_allowed_packetпараметри самі по собі не змусити його працювати, тому не може вимагатися , якщо net_buffer_lengthвикористовується. - ральф-болтон

Модифікація max-allowed-packetі net-buffer-lengthздається набагато кращою, ніж відключення розширених вставок. - Крістофер

Дивіться також Що таке max_allowed_packet досить великий, і чому мені потрібно його змінити?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.