Eu tenho que shard um banco de dados mysql. Eu quero começar com 12 fragmentos em 2 máquinas. Qual é a melhor maneira de mover alguns deles quando quero adicionar um novo servidor?

1

Todas as tabelas são InnoDb. Eu prefiro não usar mysqldump, porque o tamanho dos shards será de cerca de 200 GB (cerca de 700 milhões de linhas), e isso levará muito tempo.

Eu esperava apenas parar o mysql por uma hora, copiar os arquivos de dados para uma nova máquina e iniciar o backup. Mas você não pode fazer isso com o InnoDb, pois alguns dados estão no espaço de tabela compartilhado. Mesmo se eu tiver o conjunto de opções innodb_file_per_table.

Este não é um site, mas um aplicativo personalizado, usado por dezenas de milhares de pessoas agora, de modo que o tempo de atividade e o desempenho são importantes. Eu suponho que eu poderia adicionar lógica em meu aplicativo de servidor para permitir o rebalanceamento / movimentação gradual de um fragmento.

Alguém tem uma ideia melhor?

    
por Tim 07.04.2010 / 17:48

5 respostas

0

O xtrabackup Percona parece fazer o que é necessário. Especificamente, se você tiver inndb_table_per_file set, você pode fazer um backup "quente" de tabelas innodb em um banco de dados, e importá-los para outra instância mysql.

Veja estes passos para saber como:

link

    
por 10.04.2010 / 02:24
1

Você pode experimentar o innodb hotcopy do link

Um pouco caro, mas parece que você pode obter uma cópia de avaliação.

    
por 07.04.2010 / 18:45
1

Se você criar uma tabela depois de ativar a opção innodb_file_per_table , todo o conteúdo da tabela deverá ser armazenado em arquivos exclusivos da tabela.

Em caso de falha ...

Se não for um problema manter os logs binários indefinidamente, você pode fazer um dump de dados antes de carregar qualquer dado. Esse despejo inicial pode ser usado para inicializar a replicação. Então é só uma questão de esperar que a replicação se atualize antes de tentar fazer a troca.

Como alternativa, se você já estiver usando a replicação para backups, poderá configurar a replicação no servidor de backup. A penalidade óbvia é que os backups ficariam offline durante o despejo do banco de dados.

Terceira opção, você sempre pode copiar todo o conteúdo do MySQL para um novo servidor, iniciá-lo e depois soltar qualquer coisa que não esteja usando.

    
por 07.04.2010 / 19:00
0

você possivelmente poderia colocar mysqlproxy entre appserv e seus servidores de aplicativos para adicionar alguma lógica [aviso - ele tem impacto no desempenho ].

você também pode usar a replicação do mysql - mas ainda assim você precisará fazer o bootstrap a partir do backup completo.

ps.

é ver outros propondo mysqlhotcopy. então olhe para xtrabackup - mesmo, mas de código aberto.

    
por 07.04.2010 / 18:11
0

Oferecemos uma solução para isso usando nossa tecnologia dbShards. Podemos fornecer um conjunto de servidores secundários para seus bancos de dados existentes, com replicação confiável. Em seguida, você pode pesquisar novamente os servidores secundários sem desativar seus bancos de dados principais (principais) e fazer a transição sem problemas para os servidores de fragmentos adicionais.

Para mais informações, você pode ler sobre isso em: link

    
por 16.10.2010 / 19:08