Posso copiar um banco de dados MySQL copiando os arquivos? O que os arquivos contêm exatamente?

8

Estou usando o banco de dados MySQL e usando uma máquina Ubuntu Linux.

Meu banco de dados chamado db_test , percebo que no caminho /var/lib/mysql/db_test , há arquivos com o sufixo .frm , .MYD , .MYI da seguinte forma:

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

Parece que cada grupo de arquivos .frm , .MYD , .MYI foi mapeado com uma tabela no banco de dados.

Eu tenho duas perguntas a seguir:

  1. Quais são os três arquivos exatamente?

  2. Se eu criar um novo diretório no caminho /var/lib/mysql/ say db_test_2 e copiar todos os arquivos do diretório db_test_1 para db_test_2 , ele também criará um novo banco de dados db_test_2 que tem exatamente o mesmo conteúdo (tabelas) como db_test_1 ?

Esta ação de movimentação de arquivos de banco de dados fisicamente cria o mesmo resultado que as seguintes ações de linha de comando:

  1. faça o dump do banco de dados db_test_1 out

  2. crie um novo banco de dados db_test_2

  3. em seguida, retorne o banco de dados db_test_1 para o novo banco de dados db_test_2 ?

Se assim for, parece que mover arquivos é muito mais rápido do que usar mysqldump para copiar bancos de dados (ou para importar dados de um banco de dados para outro banco de dados no MySQL). Alguma opinião sobre isso?

    
por Mellon 27.11.2011 / 13:19

2 respostas

5

  1. AFAIR, .frm é arquivo de descrição (onde a estrutura da tabela de banco de dados é descrita), .MYD é um arquivo com dados, .MYI é um arquivo com índices.

  2. Sim, a cópia será muito mais rápida. Mas há um problema: não é atômico. Sob alta carga de arquivos copiados será inconsistente e talvez até mesmo corrompido. Especialmente se você estiver usando um mecanismo mais "inteligente" como o InnoDB.

Editar: p.s. Você pode copiar estes arquivos com segurança, mas antes você deve parar o servidor mysql.

    
por 27.11.2011 / 15:43
4

Você tem uma ferramenta de linha de cmd que faz exatamente isso: mysqlhotcopy

Funciona bem com tabelas myisam, mas não com tabelas InnoDb.

Se você configurou seu servidor com lvm, e coloque seu / var / lib / mysql em um volume dedicado aqui é a maneira que eu recomendo fazer um backup muito rápido e de maneira não bloqueante de todos os seus bancos de dados:

mysql -U root -p
  > flush tables with read lock;

Isso libera todas as suas tabelas para o disco e bloqueia qualquer operação de r / w

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

Precisa ser adaptado à sua configuração, isso cria um instantâneo do sistema de arquivos do seu banco de dados. Não leva tempo

  > unlock tables;

Isso é feito, a operação R / W é retomada.

Agora você pode montar / dev / vg_myserver / lvMysql_snap e fazer um arquivo tar do seu banco de dados!

    
por 27.11.2011 / 21:02