Как сделать резервную копию базы данных MySQL, когда /tmp только для чтения?

У меня есть сервер Ubuntu 12.04 с поврежденной файловой системой ext4 в моем разделе / ​​tmp:

$ dmesg | tail
[25300713.878456] end_request: I/O error, dev vda, sector 2019854
[25300713.882430] Aborting journal on device dm-0-8.
[25300713.969861] end_request: I/O error, dev vda, sector 1965862
[25300713.972127] Buffer I/O error on device dm-0, logical block 196608
[25300713.973351] lost page write due to I/O error on dm-0
[25300713.973450] JBD2: I/O error detected when updating journal superblock for dm-0-8.
[25300746.138426] EXT4-fs error (device dm-0): ext4_journal_start_sb:327: Detected aborted journal
[25300746.139792] EXT4-fs (dm-0): Remounting filesystem read-only
[25387373.536038] EXT4-fs (dm-0): error count: 2
[25387373.536043] EXT4-fs (dm-0): initial error at 1407997573: ext4_journal_start_sb:327
[25387373.536047] EXT4-fs (dm-0): last error at 1407997573: ext4_journal_start_sb:327
[25473881.056039] EXT4-fs (dm-0): error count: 2
[...]

Я на VPS, и я не знаю, как это исправить. Прежде чем сделать что-то, что может сломать все, я хочу сделать резервную копию сервера, особенно базы данных MySQL.

Теперь я попытался сделать это:

ssh username@ip  "mysqldump -u user -ppwd db" > ~/Bureau/db.sql

Но он жалуется, что не может выполнять некоторые запросы из-за только для чтения /tmp.

Моя вторая мысль состояла в том, чтобы переименовать /tmp (или размонтировать его) и создать ссылку / tmp на одном из рабочих разделов. Это не сработало, жалуется / TMP занят.

Я хотел бы избежать перезапуска MySQL, если это возможно, так как я не знаю, будет ли он перезапущен правильно.

2 ответа

Решение

Вы можете указать еще один каталог с MySQL Cli

set global tmpdir = "/path/to/dir".

Этот новый tmpdir может быть фактически создан как tmpfs и сохранен в памяти, а не в поврежденной файловой системе.

У вас есть более серьезная проблема. По сути, журнал говорит на простом английском языке: "Извините, я больше не могу поддерживать согласованность файловой системы, я сдаюсь и переключаюсь в режим только для чтения, чтобы избежать его полного удаления". Это чрезвычайно серьезный вопрос, который имеет приоритет. Поднимите проблему поддержки с хостером как можно скорее. Тем временем попробуйте сделать следующее, чтобы получить удаленную резервную копию

mysqldump --host servername dbname > dbname.sql

что, конечно, может дать сбой, если система находится в ошибочном состоянии.

Проверьте /etc/my.cnf и посмотрите настройки для [mysqldump] tmpdir=/tmp

но теперь вы столкнулись с потенциальной проблемой с курицей и яйцом, поскольку, если вы редактируете /etc/my.cnf, вам может потребоваться перезапустить MySQL, чтобы изменения вступили в силу.

Другие вопросы по тегам