Подтвердить что ты не робот

Mysqldump: Получил errno 32 при записи

Я использовал этот script в течение многих лет на моем VPS. И он все еще работает.

DBLIST=`mysql -uroot -pROOT_PASSWORD -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'`
MYSQLDUMP_OPTIONS="-uroot -pROOT_PASSWORD --single-transaction --routines --triggers"
BACKUP_DEST="/home/backup/db/"
for DB in `echo "${DBLIST}"`
do
    mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip > ${BACKUP_DEST}/${DB}.sql.gz &
done
wait
tar -czvf /home/backup/db2/`date +\%G-\%m-\%d`_db.tar.gz ${BACKUP_DEST}

Теперь я перехожу на другой хостинг. Я пытаюсь использовать тот же script (конечно, я изменил ROOT_PASSWORD с новыми учетными данными), но я не знаю, почему я это получаю:

mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
4b9b3361

Ответ 1

20:47:59 0 ~] $ perror 32
OS error code  32:  Broken pipe

Таким образом, errno 32 является "сломанной трубой". Вы передаете вывод mysqldump на gzip, поэтому это означает, что gzip завершен до завершения mysqldump. Может быть, например, потому что ваш диск заполнен, или gzip превзошел любое максимальное время/использование CPU вашего хоста.

Ответ 2

Убедитесь, что папка/home/backup/db/(которую вы используете для хранения резервной копии) имеет разрешение на запись (для быстрой проверки: попробуйте использовать chmod -R 777 в этой папке и запустите script, чтобы сделать уверен).

Ответ 3

У меня была та же проблема из-за нескольких опечаток.

1.) Я неправильно набрал имя пользователя db. У меня был "db_user_1", когда он действительно был "db_user1".

2.) После трубы я забыл > in has gzip > myfile.tar.gz.

Но я рекомендую вам перейти на mysql 5.6+ asap, поэтому вы можете остановить просмотр паролей базы данных другими пользователями.

Просмотрите этот ответ в stackoverflow.

Ответ 4

Столкнувшись с той же проблемой. Я не знаю, почему именно, но если вы добавите утилиту PV, пришли к выводу, что все работает. Возможно, это зависит от вашей оболочки bash/sh.

sudo apt-get install pv

PipeViewer - очень полезная утилита, она позволяет визуализировать процессы записи на диск, например.

Script например

mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip | pv > ${BACKUP_DEST}/${DB}.sql.gz

Ответ 5

Его старая тема, но я сталкиваюсь с этой проблемой и обнаруживаю, что:

мое имя файла: db_26/03.tar.gz, что вызывает ошибку, например aboves; но когда я делаю: db.tar.gz нет ошибки.

Итак, вы должны проверить свое имя файла

Ответ 6

Проверьте, существует ли папка в вашем местоположении, /home/backup/db/

если нет, создайте каждую подпапку.

Команда: mkdir/home/backup/db/

затем снова запустите команду.

Ответ 7

Я был удивлен, что не мог сделать свалку своей БД, я смог сделать это накануне. Теперь я получил эту ошибку.

Как сказано в сообщении nos, сообщение об ошибке означает Broken pipe, что означает, что вывод не может быть записан на диск. В моем случае мой SSH-пользователь не имел права писать в папке, в которой я настроил таргетинг в моей инструкции mysqldump.

Вы можете вывести свой дамп в каталог /home/your _user, чтобы увидеть его, все равно получите ту же ошибку. Это решило мою проблему.

Ответ 8

Errno 32 является "сломанным трубой", поэтому любая ошибка, которая происходит с получателем канала (в данном случае gzip), вызовет errno 32. Если структура каталогов изменилась и ваш ${BACKUP_DEST} больше не ссылается на каталог, который существует эта проблема возникла бы.

Я бы отлаживал это, связав что-то еще с вашей командой gzip или создав несжатую резервную копию, не связанную с gzip.

Ответ 9

Я видел эту ошибку, когда вывод mysqldump на s3cmd. Это было вызвано неправильной версией s3cmd. В Ubuntu Trusty и Debian Wheezy пакетная версия команды s3cmd не поддерживает stdin (потому что у них есть версия 1.1.0).

Ответ 10

Я использовал mysqldump из CLI и пытался подключиться к gzip и/или файлу и получить ошибку "отказался".

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

Чтобы обойти это, вы можете использовать команду tee в сочетании с sudo:

mysqldump --single-transaction --routines --events --triggers --add-drop-table --extended-insert -u backup -h 127.0.0.1 -p --all-databases | gzip -9 | sudo tee /var/backups/sql/all_$(date +"%Y_week_%U").sql.gz > /dev/null

| sudo tee /var/backups/... - это то, что позволяет нам подключаться к каталогу, который доступен только для записи root. > /dev/null подавляет tee от выгрузки его вывода непосредственно на экран.

Ответ 12

из-за ограничения на FTP-сервер

Квота файлов В настоящее время вы используете 1000 из 1000 файлов в плане резервного копирования.

поэтому я удаляю некоторые файлы