O MySQL pode usar vários diretórios de dados em diferentes dispositivos de armazenamento físico

3

Estou executando o MySQL com seu diretório de dados em um SSD de 128Gb. Eu estou lidando com grandes conjuntos de dados (~ 20Gb) que são carregados e processados semanalmente, cada um armazenado em um banco de dados separado para fins de comparações de ponto de tempo. Colocar todos os dados em um único banco de dados é inviável porque o desempenho em bancos de dados tão grandes já é um problema. No entanto, não posso manter mais de 6 conjuntos de dados no SSD por vez. Agora estou descarregando manualmente o disco giratório 2Tb mais antigo a cada semana, e removendo o banco de dados para liberar espaço para o novo. Mas se eu precisar de um dos bancos de dados "arquivados" (uma ocorrência semi-regular) eu tenho que abandonar um atual (após o dumping), recarregá-lo, fazer o que eu preciso, então inverter os resultados.

Existe uma maneira de configurar o MySQL para usar vários diretórios de dados, digamos, um no SSD e outro no disco giratório de 2Tb, e "mesclá-los" de forma transparente? Se eu pudesse fazer isso, o arquivamento não significaria mais "sair completamente do banco de dados", mas, em vez disso, significa "movido para o dispositivo físico lento". O tempo necessário para fazer minhas consultas em um disco giratório seria menor do que o necessário para descarregar, descartar, carregar, descartar e recarregar completamente dois bancos de dados inteiros, portanto, isso é uma vantagem.

Pensei em usar algo parecido com unionfs, mas não consigo pensar em uma maneira de controlar qual banco de dados é armazenado em qual unidade física, porque ele funciona mesclando em um nível de diretório (pelo que entendi), então ainda estou preso com o uso de vários diretórios.

Qualquer ajuda apreciada, obrigado antecipadamente

    
por sirlark 27.10.2012 / 11:35

1 resposta

2

Primeiro, acho que devemos considerar que, para cada banco de dados db_name , ele armazenará uma pasta dentro de seu datadir (por exemplo, /var/lib/mysql ). Então, em teoria, você poderia ter apenas links simbólicos para as pastas em discos diferentes. No entanto, isso tem outro problema: se você usa o mecanismo de armazenamento InnoDB, ele não armazena seus dados dentro da pasta. Em vez disso, ele usa um único arquivo de log, ibdata* .

Eu acho que isso é importante: como você apontou, unionfs é ótimo se tudo que você quer é uma união direta de dois sistemas de arquivos, mas não entende (ou aprecia) a semântica subjacente do armazenamento de apoio ao gravar dados .

Do topo da minha cabeça, eu não posso dizer que existe um sistema de arquivos que fará exatamente o que você quer - eu também acho que pode ser muito nicho.

No entanto, , acho que pode haver algumas coisas que você pode pesquisar para chegar onde deseja:

  • Executando duas cópias do MySQL, com seus próprios diretórios de dados separados. Você pode então usar um tipo de tabela FEDERATED para 'simular' o efeito de ter todos os dados dentro de uma única instância do MySQL.
  • Um pouco mais simples: links simbólicos, usando tipos de tabela MyISAM (isso exigirá alguns testes extensos quando se trata de descartar as tabelas, talvez você possa apenas truncá-los para evitar que o link seja perdido)
por 27.10.2012 / 16:27