Eu tenho um banco de dados somente innoDB de 30 GB que continua tendo Lost connection to MySQL server during query when dumping
ao executar mysqldump -u root -p --compress --max_allowed-packet=1G --net-buffer-length=32704 --single-transaction largedb> /home/backup/largedb.sql.gz
a partir do servidor de origem
Eu tenho tempos limite de leitura e gravação de rede definidos como 31536000
em my.cnf
e, além disso, não consigo encontrar nenhuma outra informação sobre por que estaria perdendo a conexão.
Então eu decidi que vou desligar o mysql e rsync-los. Para mesas com menos de 1 GB, isso funcionou perfeitamente. Eu primeiro criei o banco de dados e a estrutura da tabela, em seguida, executei ALTER TABLE {table} DISCARD TABLESPACE
mover os arquivos .frm e .ibd para a pasta do banco de dados e, em seguida, executei o ALTER TABLE {table} IMPORT TABLESPACE
que corrigiu todas as tabelas, exceto a principal.
A tabela principal tem 30 GB e ao importar o tablespace diz Error in query (1034): Incorrect key file for table 'main'; try to repair it
Não há informações adicionais no error.log
. Eu pesquisei e parece sugerir se você receber esse erro, mas é um innoDB, então você pode estar ficando sem espaço em disco no seu tmpdir. Meu tmpdir é /tmp
e tenho 400GB livres.
ANALISAR na tabela resulta em
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
VERIFICAR nos resultados da tabela em
db.main: InnoDB: Tablespace has been discarded for table 'main'
db.main: Tablespace has been discarded for table 'main'
db.main: Corrupt
Alguém pode me ajudar mysqldump
a parar de perder a conexão ou como posso reparar a tabela innoDB? Estou prestes a transformar a mesa em MyISAM e rsync-lo
Estou executando o Percona Mysql 8 (baseado no mysql 8).
Você não pode rsync em um banco de dados em execução, mas sabe disso desde que disse que o parou.
Eu rsync com o mysqld não rodando (ou de um snapshot), você tem que rsync os arquivos ib_logfile* e ibdata* do datadir. Então não há necessidade de
DISCARD/IMPORT TABLESPACE
qualquer um.Para uma cópia sem desligar o banco de dados, o xtrabackup é provavelmente a solução mais eficiente.
Se você tiver bancos de dados existentes no destino, precisará
mysqldump --no-data dbname
importar no destino para recriar os metadados da estrutura da tabela, mas teráFLUSH TABLE ... FOR EXPORT
na origem antes de copiar. Então eles estarão limpos e podem ser importados comALTER TABLE ... IMPORT TABLESPACE