Mysql

傳輸 innodb 表

  • May 16, 2020

我有一個 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

我將淨讀寫超時設置為31536000in 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 itThere is no additional information in error.log. 我用Google搜尋,它似乎暗示如果您收到此錯誤但它是一個 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

引用自:https://dba.stackexchange.com/questions/267290