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
Ответы
Ответ 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
от выгрузки его вывода непосредственно на экран.
Ответ 11
Что помогло мне с этой проблемой
export LANG=C
до запуска mysqldump на https://github.com/netz98/n98-magerun/issues/771
Ответ 12
из-за ограничения на FTP-сервер
Квота файлов В настоящее время вы используете 1000 из 1000 файлов в плане резервного копирования.
поэтому я удаляю некоторые файлы