InnoDB “Tabela xx está cheia” durante alterações no banco de dados

1

Estou executando o Percona Mysql Server 5.6.14-56 no CentOS 6.3 64bit.

O servidor tem muito memória RAM (96GB) e armazenamento livre. Tipo de sistema de arquivos: ext4

dev/sda6     ext4   1093623528  56576512 981494148   6% /mysqlstorage

Eu tentei fazer algumas alterações em uma tabela com registros de 42M (cerca de 12,5gb de tamanho (cerca de 50% disso são índices)), e hoje ele me mostrou o erro Table Is Full.

Eu verifiquei as variáveis carregadas, e innodb_data_file_path = ibdata1:12M:autoextend mostra no meu gerenciador mysql.

Esse banco de dados é ao vivo e eu prefiro corrigir esse problema sem (ou com o mínimo) tempo de inatividade.

file-per-table está ativo ibdata1 é de cerca de 3,9 GB

De MYSQL LOGS:

2015-02-19 01:43:04 7fe921f4b700 InnoDB: Error: Write to file (merge) failed at offset 356515840.
InnoDB: 1048576 bytes should have been written, only 1036288 were written.
InnoDB: Operating system error number 28.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 28 means 'No space left on device'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html

Como eu faria isso?

// EDITAR

Desde que fiz esta pergunta, aprendi que, durante essa "alternação", meu / tmp rapidamente preenche até 100%. Uma vez que atinge 100%, o mysql envia essa mensagem de erro.

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             50395844   1745156  46090688   4% /
tmpfs                 37105808         0  37105808   0% /dev/shm
/dev/sda1               495844     37092    433152   8% /boot
/dev/sda5              4080064     73740   3799068   2% /tmp
/dev/sda6            1093623528  56576524 981494136   6% /storage

Como posso aumentar com segurança o tamanho de / tmp sem nenhum tempo de inatividade?

    
por Mr.Boon 19.02.2015 / 09:18

1 resposta

2

A alteração da tabela envolve a partição / tmp como armazenamento intermediário para tabelas temporárias criadas explicitamente e implicitamente. Você tem que usar o tmpdir em uma partição grande o suficiente. Adicione a próxima linha ao my.cnf

tmpdir = /path/to/the/mysqltmp
    
por 19.02.2015 / 09:31