我有一个 30GB 的仅 innoDB 数据库,在从源服务器Lost connection to MySQL server during query when dumping
运行时一直保持mysqldump -u root -p --compress --max_allowed-packet=1G --net-buffer-length=32704 --single-transaction largedb> /home/backup/largedb.sql.gz
我将净读写超时设置为31536000
in my.cnf
,除此之外,我找不到任何其他关于它为什么会失去连接的信息。
所以我决定关掉mysql并rsync它们。对于 1GB 以下的表,这非常有效。我首先创建了数据库和表结构,然后运行ALTER TABLE {table} DISCARD TABLESPACE
将 .frm 和 .ibd 文件移动到数据库文件夹中,然后运行ALTER TABLE {table} IMPORT TABLESPACE
修复了除主表之外的所有表。
主表是 30GB,在导入表空间时,它会说Error in query (1034): Incorrect key file for table 'main'; try to repair it
There is no additional information in error.log
. 我用谷歌搜索,它似乎暗示如果您收到此错误但它是一个 innoDB,那么您的 tmpdir 中的磁盘空间可能会用完。我的 tmpdir 是/tmp
,我有 400GB 的空闲空间。
分析表结果
InnoDB: Tablespace has been discarded for table 'main'
InnoDB: Trying to get the free space for table `db`.`main` but its tablespace has been discarded or the .ibd file is missing. Setting the free space to zero. (errno: 11 - Resource temporarily unavailable)
Trying to get the free space for table `db`.`main` but its tablespace has been discarded or the .ibd file is missing. Setting the free space to zero. (errno: 11 - Resource temporarily unavailable)
Operation failed
检查表结果
db.main: InnoDB: Tablespace has been discarded for table 'main'
db.main: Tablespace has been discarded for table 'main'
db.main: Corrupt
谁能帮助我mysqldump
停止失去连接或如何修复 innoDB 表?我即将把表变成 MyISAM 并 rsync 它
我正在运行 Percona Mysql 8(基于 mysql 8)。
您不能 rsync 正在运行的数据库,但您知道,因为您说您停止了它。
我想让你在 mysqld 未运行(或从快照)的情况下 rsync,你必须从 datadir rsync ib_logfile* 和 ibdata* 文件。那么也没有必要
DISCARD/IMPORT TABLESPACE
。对于不关闭数据库的副本,xtrabackup 可能是最有效的解决方案。
如果您在目标上有现有数据库,则需要
mysqldump --no-data dbname
在目标上导入并导入以重新创建表结构元数据,但FLUSH TABLE ... FOR EXPORT
在复制之前您将在源中拥有。然后它们将是干净的并且可以使用ALTER TABLE ... IMPORT TABLESPACE