MySQL CREATE TABLESPACE: ERROR 3121

O MySQL continua com certas dificuldades para grandes bancos de dados.

Em versões mais antigas, todas as tabelas InnoDB ficavam em um único arquivo. Depois, passou-se a um arquivo por tabela. E no MySQL 5.7 passou a ser possível criar uma TABLESPACE, com o arquivo em outro diretório (até então, a opção era utilizar um link simbólico, o que trazia outros problemas).

Além de na versão 8.0 não ser possível ter mais de um arquivo por TABLESPACE (o que seria ótimo para balancear o I/O entre dois discos), ocorre um erro ao criar uma TABLESPACE (que não acontecia na versão 5.7):

mysql> CREATE TABLESPACE zabbix ADD DATAFILE '/data/zabbix.ibd' Engine=InnoDB;
ERROR 3121 (HY000): CREATE TABLESPACE data file must be in one of these directories './'.
mysql> show variables like 'innodb_directories ';
Empty set (1.43 sec)

mysql>

Olhando a documentação, vi que agora as TABLESPACEs só podem ser criadas em diretórios definidos pelo parâmetro abaixo.

mysql> show variables like 'innodb_directories';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| innodb_directories |       |
+--------------------+-------+
1 row in set (0.00 sec)

mysql>

O problema é que este parâmetro não pode ser alterado ONLINE – o arquivo de configuração deve ser alterado, e o MySQL reiniciado. Ou seja, se um disco encher, e você adicionar outro filesystem, para utiliza-lo terá que reiniciar o MySQL.

mysql> show variables like 'innodb_directories';
+--------------------+--------+
| Variable_name      | Value  |
+--------------------+--------+
| innodb_directories | /data/ |
+--------------------+--------+
1 row in set (0.15 sec)

mysql> CREATE TABLESPACE zabbix ADD DATAFILE '/data/zabbix.ibd' Engine=InnoDB;
Query OK, 0 rows affected (0.26 sec)

mysql>

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.