我有一台 Ubuntu 服务器 12.04,其 /tmp 分区上的 ext4 文件系统已损坏:
$ 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,因为我不知道它是否能正确重新启动。
答案1
您可以使用 mysql cli 指向另一个目录
set global tmpdir = "/path/to/dir".
这个新的 tmpdir 实际上可以创建为 tmpfs 并存储在内存中,而不是实际损坏的文件系统中。
答案2
你的问题更严重。基本上,日志用简单的英语说的是“抱歉 - 我无法再保持文件系统一致性,我放弃了,并切换到只读模式,以避免彻底破坏它”。这是一个极其需要优先处理的严重问题。尽快向托管商提出支持问题。同时尝试执行以下操作以获取偏僻的备份
mysqldump --host servername dbname > dbname.sql
由于系统处于错误状态,这当然可能会失败。
检查 /etc/my.cnf 并查看设置
[mysqldump] tmpdir=/tmp
但现在你面临着一个潜在的“先有鸡还是先有蛋”的问题,因为如果你编辑 /etc/my.cnf,你可能需要重新启动 MySQL 才能使更改生效。