В моей старой системе Debian основной жесткий диск недавно перешел в режим только для чтения из-за проблем с диском. У меня есть база данных MySQL на сервере, которую я хотел бы сделать резервную копию, прежде чем пытаться восстановить жесткий диск.
К счастью, у меня есть еще один смонтированный диск, который не находится в режиме только для чтения, поэтому я смогу запустить mysqldump сбросить в него базу данных. Однако я получаю следующую ошибку: mysqldump:
mysqldump: Couldn't execute 'show fields from `xxx`': Can't create/write to file '/tmp/#sql_b96_0.MYI' (Errcode: 30) (1)
Очевидно, это связано с тем, что основной диск находится в режиме только для чтения.
Есть ли способ обойти это?
Используйте переменную среды TMPDIR, чтобы указать mysqldump, где разместить временные файлы, и указать для него место, доступное для записи.
export TMPDIR=/mnt/writable_drive/tmp ; mysqldump dbname >/mnt/writable_drive/backup.sql
mysqldump пытается создать временные файлы на вашем мертвом диске.
Попробуйте переместить / tmp на новый жесткий диск:
mkdir /mnt/newhdd/tmp
mount --bind /mnt/newhdd/tmp /tmp
Это должно позволить вашей системе нормально работать, пока вы не завершите дамп.
Другими хорошими вариантами были бы: сделать дамп с удаленного компьютера или остановить mysqld и просто скопировать файлы mysql в новую систему (что хорошо, даже если mysqldump работает, ОСОБЕННО, если у вас есть проблемы с таблицами).
Если вы не можете просто смонтировать файловую систему rw в / tmp и получить удовольствие от mysql, у вас есть другие варианты:
1) использовать удаленные команды mysql; т.е. войти в систему удаленно и сохранить удаленно
2) передать весь вывод mysqldump в файловую систему rw
3) запустите все файлы mysql db после остановки mysqld и повторно используйте их в работоспособной системе.
4) купите новый диск, подключите его, загрузитесь с LiveCD или загрузочной флешки, смонтируйте старый и новый, используйте dd, чтобы воссоздать старый на новом.
.... может быть, еще 10 других способов.