Иногда мне нужно скопировать базу данных MySQL (db1) в другую базу данных (db2). Я нашел эту команду, чтобы быть кратким и эффективным:Piping mysqldump to mysql
mysqldump --opt db1 | mysql db2
Он работал отлично, но теперь он порывает с следующей ошибкой:
ERROR 1064 (42000) at line 1586: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE 'some_table_name'': MySQL server ' at line 1
Первое, что приходит на ум, что база данных слишком велик (несжатый SQL-дамп> 1G, 1090526011 байт на данный момент, если быть точным) для его прокладки таким образом. Когда я делаю mysqldump > file
, а затем mysql < file
, он отлично работает, никаких ошибок. Таблица, указанная в сообщении об ошибке (some_table_name), не является большой или специальной.
Вторая идея исходит от впечатления, что сообщение об ошибке может быть усечен, и что он говорит
"...MySQL server has gone away"
Краткое исследование, которое говорит, что это возможно, что максимальное количество открытых файлов (для MySQL и/или системы) является достиг. Поэтому я попытался добавить --skip-lock-table
в mysqldump
и поднял open-files-limit
, но не повезло, такая же ошибка.
Очевидное решение состоит в том, чтобы делать дамп, а затем импортировать (как хорошо работает), но трубопровод кажется мне лучше и чище (дайте мне знать, если я ошибаюсь), плюс мне любопытно узнать, какие причины Эта проблема. Я попал в какой-то предел, влияющий на командный трубопровод?
Я делал это на сервере хостинга, используя MySQL 5.1.60 в Linux и на моей машине dev - MySQL 5.1.58 на Linux. Последнее дает несколько иную ошибку:
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table
other_table_name
at row: 7197
UPDATE: Проблема решается делать отдельный дамп и импорт, без трубы. Хотя я чувствую, что это не совсем ответ на мой вопрос, предложения ssmusoke были наиболее точными, что привело к принятому ответу.
Я сомневаюсь, что нагрузка настолько высока, что соединение падает. Даже если это так, мне было бы странно, что он всегда терпит неудачу в одном и том же месте (та же таблица), верно? Во всяком случае, этот процесс был написан по сценарию, но когда он начал терпеть неудачу, мне пришлось вытащить его и начать анализировать «вручную», и теперь это (я надеюсь, что временно) работает через файл. Тем не менее, я хотел бы знать, в чем причина этого. Спасибо за предложения. – parserr