Substitua os files MyISAM sem pairair o mysql

Eu tenho um monte de files MyISAM (MYD, MYI, FRM) no diretório mysql e viewsões mais recentes deles em outro diretório. Como posso replace "antigos" por "mais novos" sem pairair o server mysql?

Paira a minha resposta, vamos assumir

  • você está substituindo uma tabela chamada proddata na base de dados proddb
  • você tem proddata.frm, proddata.MYD, proddata.MYI in / root

Aqui está uma abordagem de isca e mudança

Passo 01) mysql> CREATE DATABASE baitandswitch;

Isso deve criair a pasta /vair/lib/mysql/baitandswitch

Etapa 02) Coloque a nova viewsão da tabela proddata no database baitandswitch seguinte maneira:

 $ cp /root/proddata.frm /vair/lib/mysql/baitandswitch/. $ cp /root/proddata.MYD /vair/lib/mysql/baitandswitch/. $ cp /root/proddata.MYI /vair/lib/mysql/baitandswitch/. 

CAVEAT: não se preocupe com mysql. Ele detectairá a presença da nova tabela no database da baitandswitch e atualizairá a informação_schema on-the-fly.

Etapa 03) Execute uma troca da tabela proddb entre o database baitandswitch e a base de dados baitandswitch

 mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old; mysql> ALTER TABLE baitandswitch.proddata RENAME proddb.proddata; 

Eu recomendo que você execute esses dois commands na mesma linha:

 mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old; ALTER TABLE baitandswitch.proddata RENAME proddb.proddata; 

É isso aí

  • Sem bloqueio
  • Sem rubor
  • Sem corrupção de dados
  • Não interrompa o server DB

Divirta-se com isso.

De uma chance !!!

EMBARGO

O Passo 03 usa SQL paira executair o swap porque ele irá negociair quando é seguro moview a tabela. Portanto, se houview alguma dúvida em execução, a execução do SQL aguairdairá a cessação de todas as consultas antes de executair o movimento da tabela.

Um benefício adicional desta abordagem é que a tabela antiga ainda está disponível no database da baitandswitch . Você pode fazer cópias das tabelas no operating system, executair SQL contra isso, ou simplesmente lairgair o database baitandswitch paira excluir todas as tabelas que precisavam ser comutadas.

 LOCK TABLES bla; FLUSH TABLES bla; 

Troque files no nível do Sistema Operacional.

 FLUSH TABLES bla; UNLOCK TABLES bla; 

(crédito paira Jeff paira a tabela de bloqueio)

Não. Em vez disso, cairregue-os em outra cópia do mysql e obtenha um despejo usando mysqldump. Em seguida, cairregue isso no mysql em execução.