it-swarm.com.ru

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

Я использовал этот скрипт в течение многих лет на моем 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}

Сейчас я переезжаю на другой хостинг. Я пытаюсь использовать тот же сценарий (конечно, я изменил 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
29
MultiformeIngegno
20:47:59 0 ~] $ perror 32
OS error code  32:  Broken pipe

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

35
nos

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

9
Francisco De La Fuente

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

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

  2. После канала я забыл > в gzip > myfile.tar.gz.

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

Проверьте этот ответ на StackOverflow.

8
Buttle Butkus

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

Sudo apt-get install pv

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

Скрипт например

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

Это старая тема, но я столкнулся с этой проблемой и обнаружил, что:

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

Поэтому вы должны проверить имя вашего файла

1
Muhammet Arslan

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

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

1
reor

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

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

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

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

1
Santiago Medina Chaverra

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

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

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

1
Brac

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

0
Ryan

Что помогло мне с этой проблемой

export LANG=C

до запуска mysqldump per https://github.com/netz98/n98-magerun/issues/771

0
Vladimir Strugatsky

Я использовал mysqldump из CLI и пытался передать в gzip и/или файл и получил сообщение об ошибке «Отказано в доступе». 

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

Чтобы обойти это, вы можете использовать команду 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 выводить свои выходные данные прямо на экран.

0
alexw