получение потерянного соединения с mysql при использовании mysqldump даже с параметром max_allowed_packet - PullRequest
0 голосов
/ 31 октября 2018

Я хочу вывести определенную таблицу в базу данных моего удаленного сервера, которая работает нормально, но одна из таблиц составляет 9 м строк, и я получаю:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2002359

поэтому, прочитав онлайн, я понял, что мне нужно увеличить пакет max_allowed_packet, и его можно добавить в мою команду.

, поэтому я запускаю следующую команду для вывода моей таблицы:

mysqldump -uroot -h my.host -p'mypassword' --max_allowed_packet=512M db_name table_name | gzip  > dump_test.sql.gz

и по какой-то причине я все еще получаю:

Lost connection to MySQL server during query when dumping table `table_name` at row: 2602499

я что-то не так делаю?

это странно, всего 9 метров записей ... не слишком большой.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Используя комментарий JohnBigs выше, флаг --compress работал для меня.

Я ранее пытался --single-transaction, --skip-extended-insert и --quick без успеха.

0 голосов
/ 01 ноября 2018

Попробуйте добавить опцию --quick в команду mysqldump; лучше работает с большими столами. Он направляет строки из результирующего набора в выходные данные, а не отбрасывает всю таблицу, а затем записывает ее.

 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
 gzip  > dump_test.sql.gz

Вы также можете попробовать добавить параметр --compress в команду mysqldump. Это позволяет использовать более удобный сетевой протокол сжатого соединения с вашим сервером MySQL. Обратите внимание, что вам все еще нужна труба gzip; Сжатый протокол MySQL не заставляет дамп выходить из mysqldump сжатого.

Также возможно, что сервер тайм-аут подключения к клиенту mysqldump. Вы можете попробовать сбросить время ожидания. Подключитесь к вашему серверу с помощью других средств и выполните эти запросы, затем запустите задание mysqldump.

Они устанавливают таймауты на один календарный день.

    SET GLOBAL wait_timeout=86400;
    SET GLOBAL interactive_timeout=86400;

Наконец, если ваш сервер находится далеко от вашей машины (через маршрутизаторы и брандмауэры), возможно, что-то нарушает соединение mysqldump. Некоторые низшие маршрутизаторы и межсетевые экраны имеют ограничения по времени для сеансов NAT (трансляция сетевых адресов). Они должны поддерживать эти сеансы во время их использования, но некоторые этого не делают. Или, возможно, вы используете ограничение по времени или размеру, установленное вашей компанией для внешних подключений.

Попробуйте войти на машину ближе к серверу и запустить на нем mysqldump. Затем используйте другие средства (sftp?), Чтобы скопировать файл gz на свой компьютер.

Или, возможно, вам придется сегментировать дамп этого файла. Вы можете сделать что-то вроде этого (не отлажено).

mysqldump  -uroot -h my.host -p'mypassword'  \ 
          db_name table_name --skip-create-options --skip-add-drop-table \
          --where="id>=0 AND id < 1000000" | \
          gzip....

Затем повторите это с этими строками.

          --where="id>=1000000 AND id < 2000000" | \

          --where="id>=2000000 AND id < 3000000" | \
          ...

пока вы не получите все строки. Боль в шее, но это сработает.

...