comportamento do shell pipe com o MySQLDump

1

Estou usando o mysqldump para um grande banco de dados (vários GB) e importo o resultado de um pipe, por favor, veja os comandos abaixo, ele faz o pipe incremental, ou aguarde até que o primeiro termine e depois importe? Essa é uma boa maneira de importar grandes bancos de dados em servidores? Eu sei que você pode exportar gz, então pscp então importar. Alternativa rápida é bem vinda

mysqldump -u root -ppass -q mydatabase | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase

    
por Jeff Atwood 11.01.2010 / 09:10

4 respostas

1

Ele faz isso "incrementalmente" *. Especificamente, o segundo processo executará uma instrução mysql assim que a visualizar e a primeira enviará uma instrução mysql toda vez que encontrar uma nova linha de caractere \n .

* dependendo de como você define incremental.

    
por 11.01.2010 / 09:34
1

mysqldump gera comandos SQL que eliminam tabelas (se existirem), criam-nas e, em seguida, preenchem as tabelas uma linha por vez. Cada declaração é executada assim que é lida; isso inclui a atualização dos índices apropriadamente após cada instrução e a execução de qualquer registro que você tenha configurado. Ele é extremamente robusto e portátil e, portanto, maravilhoso para backup, mas é um mecanismo de transferência tão ineficiente quanto possível.

Se você estiver lidando com o conjunto de bancos de dados inteiro , poderá causar um curto-circuito nesse processo simplesmente copiando os arquivos do banco de dados (geralmente encontrados em /var/lib/mysql ). O formato binário para os mecanismos de armazenamento mais populares é portátil entre as arquiteturas, tornando uma cópia de arquivo relativamente robusta. No entanto, certifique-se de tomar medidas para impedir que os dados sejam alterados enquanto você copia, bloqueando as tabelas ou simplesmente encerrando o MySQL até que o processo de cópia (ou arquivamento) seja concluído.

Note que o MyISAM armazena todos os seus arquivos dentro do subdiretório do esquema, então /var/lib/mysql/mydb/ conterá tudo o que você precisa para o esquema ("banco de dados") chamado mydb . Basta copiar esse subdiretório para o outro servidor e pronto. No entanto, por padrão, as tabelas InnoDB armazenam seus dados em /var/lib/mysql/ibdata* e /var/lib/mysql/ib_logfile* , compartilhando esses arquivos entre todas as outras várias tabelas InnoDB no servidor. Então, se você estiver usando o InnoDB, mysqldump é sua única opção realmente segura, a menos que você esteja transferindo tudo .

    
por 17.08.2010 / 07:16
0

Para copiar rapidamente o banco de dados para o host remoto sobre o ssh, você pode usar:

mysqldump | gzip | ssh remotehost sh -c 'gunzip | mysql'

Além disso, geralmente é uma prática ruim especificar senhas diretamente na linha de comando.

    
por 06.02.2011 / 19:27
-1

Se você quiser importar um banco de dados compactado, poderá usar este comando.

zcat mydatabase.sql.gz | mysql -u root -ppass --host=xxx.xx.xxx.xx --port=3306 -C mydatabase
    
por 11.01.2010 / 09:46

Tags