傳輸 innodb 表
我有一個 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
inmy.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 inerror.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