Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Backup MySQL


Guest --João Paulo --

Pergunta

Guest --João Paulo --

Olá pessoal, estou precisando de ajuda para fazer um backup, vi alguns tutoriais sobre o MySQLDump mas não consegui entender como funciona, se fosse possível, explicar como eu poderia fazer um backup com os seguintes dados, com duas tabelas, só para mim aprender a fazê-lo, acredito que o backup será enviado para um txt, já que o backup físico segundo me informei não é recomendado fazer.

Banco= CADASTRO

Tabela CLIENTES

cd_cliente integer

nome Varchar(30)

Tabela PRODUTOS

cd_produto integer

descricao Varchar(30)

Ah, utilizo o MySQL 3.23 - Zeos 6.51 - Delphi 7

Se puder dar uma resposta eu agradeço, gostaria que de repente fosse realizado o backup à partir de um botão, aí, tendo o backup bonitinho e seguro, vou enviar para um FTP(Mas isso eu sei fazer).

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Oi, '--João Paulo --'

Dê uma olhada neste tópico que escrevi para auxiliar o pessoal de delphi que usa mysql.

rotina de backup para bancos mysql, programa completo

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --João Paulo --

Olá Dennis, estou a testar o seu exemplo, mas onde eu coloco o caminho do banco e o local a ser armazenado o backup?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá Dennis, estou a testar o seu exemplo, mas onde eu coloco o caminho do banco e o local a ser armazenado o backup?

É Denis Com um N não com NN.

O caminho do banco já deve ter sido definido no na variável de ambiente do windows que tem o nome "path".

O caminho de destino está em --result-file=backup.sql. Veja o fragmento do código do programa abaixo.

procedure TfrmBackup.ExecutarBackup;
var aa,mm,dd, hh, mmm, ss, sss: word;
   aux : string;
begin
   aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=3306 ';
   aux := aux + '--user=root --result-file=backup.sql --databases sase"';
Olá Dennis, estou a testar o seu exemplo, mas onde eu coloco o caminho do banco e o local a ser armazenado o backup?
É Denis Com um N não com NN. O caminho do banco já deve ter sido definido no na variável de ambiente do windows que tem o nome "path". O caminho de destino está em --result-file=backup.sql (é parâmetro do mysqldump). Veja o fragmento do código do programa abaixo.
procedure TfrmBackup.ExecutarBackup;
var aa,mm,dd, hh, mmm, ss, sss: word;
   aux : string;
begin
   aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=3306 ';
   aux := aux + '--user=root --result-file=backup.sql --databases sase"';

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --João Paulo --

Denis, desculpa a minha ignorância neste assunto, mas eu não entendi, eu coloco um MysqlDump dentro da pasta do meu projeto ?, e como faço para ele fazer backup somente do banco que eu quiser ? Tenho que colocar alguma ZQuery ou algo assim?

eu fiz assim mas não funcionou, a pasta do programa está em C:\programa

var aa,mm,dd, hh, mmm, ss, sss: word;
   aux : string;
begin
   aux := 'cmd.exe \c "mysqldump --opt --flush-logs --triggers  --port=3306 ';
   aux := aux + '-- --result-file=backup.sql --databases sase"';
   lblmensagem.Caption := 'Aguarde. Efetuando Backup';
   lblMensagem.Refresh;
   if not createProcessSimple(aux) then
      lblMensagem.Caption := 'BACKUP NÃO FOI PROCESSADO!'
   else
   begin
      decodedate(date, aa, mm, dd);
      decodetime(time, hh, mmm, ss, sss);
      if FileExists('BACKUP.SQL') then
      begin
         aux := inttostr(aa);
         if mm < 10 then
            aux := aux + '0' + inttostr(mm)
         else
            aux := aux + inttostr(mm);
         if dd < 10 then
            aux := aux + '0'+ inttostr(dd)
         else
            aux := aux + inttostr(dd);
         if hh < 10 then
            aux := aux + '0'+ inttostr(hh)
         else
            aux := aux + inttostr(hh);
         if mmm < 10 then
            aux := aux + '0'+ inttostr(mmm)
         else
            aux := aux + inttostr(mmm);
         if ss < 10 then
            aux := aux + '0'+ inttostr(ss)
         else
            aux := aux + inttostr(ss);
         aux := aux + '.sql';
         RenameFile('backup.sql', aux);
         lblMensagem.Caption := 'Backup Realizado!';
      end;
   end;

Não abriu o prompt e não encontrei o arquivo gerado pelo backup.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, '--João Paulo --'!

Em primeiro lugar, não há o que desculpar. Todos nós estamos aprendendo a todo o momento.

Respondendo suas dúvidas.

..., eu coloco um MysqlDump dentro da pasta do meu projeto ?
Não. basta você direcionar o PATH do windows da máquina do servidor, local onde deverá ficar este programa, para que fique mapeado o caminho dos binários do banco MySQL. Que, se não me falha a memória, para a versão 3.23 do mysql é esse o caminho: c:\Mysql\Bin

...e como faço para ele fazer backup somente do banco que eu quiser?
Basta voce substituir o nome do banco de dados passado como parâmetro para o mysqldump em --databases sase.

No exemplo acima o nome do banco está em vermelho.

Tenho que colocar alguma ZQuery ou algo assim?
Não. O programa que passei é completo e deve ser executado diretamente no console da máquina do servidor do banco.

eu fiz assim mas não funcionou, a pasta do programa está em C:\programa
Não funcionou porque cometi o erro de não informá-lo que o nome do banco estava escrito na passagem de parâmetro do mysqldump, não o informei que você deveria renomear o nome do banco de "sase" (nome do meu banco de dados) para o nome do seu banco de dados e, porque a variável de ambiente PATH do seu servidor de banco deveria contemplar o que informei na primeira resposta.

Não abriu o prompt e não encontrei o arquivo gerado pelo backup.
O nome do arquivo gerado pelo backup será colocadp na pasta onde estiver o executável do backup e o nome do arquivo seguirá a seguinte regra de formação:

aaaammddhhMMss.sql onde:

aaaa = Ano

mm = Mes

dd = Dia

hh = Hora

MM = Minuto

ss = Segundo.

Assim, um backup não será sobreposto por outro.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --João Paulo --

Olá Denis , eu adicionei o nome do banco e tirei o ítem

--triggers
Do código aí gerou o arquivo o código ficou assim

aux := 'cmd.exe /c "c:\mysql\bin\mysqldump.exe --opt --flush-logs  --port=3306 ';
   aux := aux + '--user=root --result-file=backup.sql --databases teste_backup"';
aí ele gerou um arquivo assim na pasta do programa em um arquivo de texto(Que é a estrutura das mihas taelas de teste)
-- MySQL dump 8.22 -- -- Host: localhost Database: teste_backup --------------------------------------------------------- -- Server version 3.23.53-max-nt -- -- Current Database: teste_backup -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ teste_backup; USE teste_backup; -- -- Table structure for table 'cliente' -- CREATE TABLE cliente ( codigo int(11) default NULL, nome varchar(20) default NULL, rua varchar(20) default NULL ) TYPE=MyISAM; -- -- Dumping data for table 'cliente' -- INSERT INTO cliente VALUES (1,'pedro','rua1'); INSERT INTO cliente VALUES (2,'maria','rua2'); INSERT INTO cliente VALUES (3,'carla','rua3'); INSERT INTO cliente VALUES (8,'Antonio','Avenida'); -- -- Table structure for table 'produto' -- CREATE TABLE produto ( codigo int(11) default NULL, descricao varchar(20) default NULL, valor double(15,3) default NULL ) TYPE=MyISAM; -- -- Dumping data for table 'produto' -- INSERT INTO produto VALUES (1,'margarina',2.500); INSERT INTO produto VALUES (2,'potinho',1.050); INSERT INTO produto VALUES (5,'carrinho',5.000);
que é o que precisava,Será que a parte que eu tirei do código vai interferir em alguma coisa? agora uma outra perguntinha :D como eu faço para restaurar o banco,eu fiz essa linha(Basedo na chamada do seu exemplo), posso utilizar ela ou tenho que fazer alguma alteração?
ShellExecute(handle,'open', 'cmd.exe',Pchar('/c c:\programa\mysql.exe teste_backup < c:\programa\backup.sql'),nil, SW_SHOW );

Link para o comentário
Compartilhar em outros sites

  • 0

'--João Paulo --',

Você remouveu a parte do código delphi que renomeava o arquivo para aaaammddhhMMss.sql como referenciei no post anterior?

Se não removeu, seu código abaixo

ShellExecute(handle,'open', 'cmd.exe',Pchar('/c c:\programa\mysql.exe teste_backup < c:\programa\backup.sql'),nil, SW_SHOW );

não vai funcionar.

respondendo suas questões:

...que é o que precisava,Será que a parte que eu tirei do código vai interferir em alguma coisa?
Não. Vua versão do MySQl não usa triggers e seu mysqldump não contempla esta opção. Fez bem em retirar. Valeu.
...como eu faço para restaurar o banco,eu fiz essa linha(Basedo na chamada do seu exemplo), posso utilizar ela ou tenho que fazer alguma alteração?

Faltou você informar o parâmetro de usuário no mysql.exe (seria -u root -p sua_senha)

No Mysqldump, se você tiver senha tem que usar o parâmetro de --password=sua_senha

Outra forma, que é a que uso, é dentro do mysql.exe digite:

souce nomedoarquivobackup.sql

Como dica: Evite deixar mastigado para o usuário final a forma de recuperar o bakup. Certamente ele vai fazer caca.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --João Paulo --
Você removeu a parte do código delphi que renomeava o arquivo para aaaammddhhMMss.sql como referenciei no post anterior?

Não removi não, deixei da forma que estava, só removi o triggers, então para não ocorrer erros, vou deixar um campo para entrada do nome do backup
Evite deixar mastigado para o usuário final a forma de recuperar o bakup. Certamente ele vai fazer caca.

bem lembrado, acho que vou criar um usuário no sistema somente para manutenção, assim o usuário comum não poderá fazer esse tipo de operação, somente o backup.

Obrigado Denis pela ajuda...

Finalmente aprendi a fazer o backup(Na verdade eu já havia encntrado o seu exemplo antes, mas não consegui fazer sozinho).

Abraço!!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...