Como mover automaticamente tabelas específicas do MySQL de uma máquina para outra?

1

Eu tenho um banco de dados MySQL com tabelas na forma de "shard_0" , "shard_1 ", "shard_2" , etc.

Eu quero adicionar outro servidor de banco de dados e mover os fragmentos com numeração par ( "shard_0" , "shard_2" , "shard_4" , ...) para a nova máquina.

Como faço isso? Há muitas tabelas de modo ideal que eu não teria que digitar cada nome de tabela individualmente, mas fazer algo automaticamente.

Obrigado

    
por Continuation 29.10.2010 / 11:53

3 respostas

2

Você pode despejar as tabelas como esta

#!/bin/bash

DATABASE="YourDatabaseName"
TNAME=shard_
TVAL="0"

while [ $TVAL -lt 10 ]
do
     mysqldump -u user -pPassword "$DATABASE" "$TNAME$TVAL" > "$TNAME$TVAL.sql"
    TVAL=$[$TVAL+2]
done

Você vai acabar com os arquivos shard_0.sql ... shard_8.sql. Transferi-los para a nova máquina como quiser, mas algo como o código abaixo deve funcionar

for FILE in 'ls shard_*.sql'
do
   scp "$FILE" user@newhost:"$FILE"
done

Em seguida, importe os arquivos para o banco de dados na nova máquina

for FILE in 'ls shard_*.sql'
do
   mysql -u user -pPassword YourDataBaseName <"$FILE"
done
    
por 29.10.2010 / 18:34
2

Você pode usar o seguinte script de shell:

table="shard_"
for i in 'seq 0 10' ; do
        r='expr $i % 2'
        if [ $r -eq 0 ] ; then
                table_name="$table$i"
                echo "Exporting Table: $table_name"
                mysqldump -u user -pPass database $table_name > "$table_name.sql"
                # Here, you can copy/transfer the file
        fi
done
    
por 29.10.2010 / 16:16
2

A sintaxe irá variar dependendo do idioma que você deseja usar, mas como você deseja as tabelas pares, você percorrerá as tabelas no banco de dados e adicionará uma instrução condicional (if) para verificar o nome usando o módulo operador (restante de uma divisão, neste caso dividindo por 2) para determinar se é ou não um número par. Se for par, faça o mysql dump, caso contrário pule.

no pseudocódigo:

  • para cada tabela no banco de dados
  • analisa o número do nome da tabela
    • se% 2 == 0 #% 2 for "módulo 2 igual a 0"; "módulo é às vezes chamado de" mod "
      • {mysqldump [opções];}
    • end if
  • próximo
  • rsync / scp para outro servidor

Em seguida, no outro servidor, importe seus dumpfiles.

    
por 29.10.2010 / 14:47