Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leox

[Resolvido] Backup de dados MySQL em C++

Recommended Posts

Olá galerinha... sou novo aqui no Fórum do imasters e este é o primeiro lugar onde estou recorrendo a ajuda dos caros colegas internautas.

 

É o seguinte, estou desenvolvendo um programinha em C++ como trabalho da faculdade, utilizando MySQL e Navicat como gerenciador do banco.

 

O projetinho está ficando legal mas quero desenvolver uma rotina para realizar backup da minha base de dados, mas ainda não tenho a mínima idéia de como se faz.

 

Já procurei na internet, mas o que encontro são apenas rotinas para php, Java, Delphi, e para banco do firebird, etc...

Eu necessito de uma rotina para C++ mesmo. (Ou seja, para introduzir no programa).

 

Algumas coisas entendi das outras rotinas, mas não sei incorporar em C++.

 

Quem conhecer alguma ferramenta ou ter essa rotina, uma ajuda é bem vinda. ^_^

 

Obs.: Estou programando no CodeGear Rad 2009.

 

Desde já agradeço pela compreensão dos senhores.

 

Saudações. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leox,

 

Baixe o conector no site do MySQL, com isso bastará fazer algumas consultas simples http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://dev.mysql.com...nector-cpp.html

 

Você encontrará exemplos de uso do conector em http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://forge.mysql.c..._Usage_Examples

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leox,

 

Baixe o conector no site do MySQL, com isso bastará fazer algumas consultas simples http://dev.mysql.com...nector-cpp.html

 

Você encontrará exemplos de uso do conector em http://forge.mysql.c..._Usage_Examples

 

Valeu JB, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

O conector já tenho e estou trabalhando com ele,... o que eu preciso mesmo é como posso fazer com que o meu programa realize o backup/restauração da minha base de dados ao invés do gerenciador MySQL, que como no meu caso é o Navicat.

 

No Navicat, já sei como fazer o backup das tabelas e tudo mais... Porém quero que o usuário ao acessar o meu programa

possa apenas em clicar Backup e em seguida escolher o local para armazenar o mesmo. Mesma coisa com a restauração.

 

Como eu disse, eu encontrei na internet, vários métodos de como fazer isso em PHP, Delphi entre outras linguagens e em

diferentes tipos de banco de dados.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

"desc <table>" para salvar a estrutura da tabela e "select * from <table>" para salvar o conteúdo, não seria é o suficiente?

Você possui muito conteúdo nas tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

"desc <table>" para salvar a estrutura da tabela e "select * from <table>" para salvar o conteúdo, não seria é o suficiente?

Você possui muito conteúdo nas tabelas?

Valeu ScreenBlack, ;)

 

Estou conectando ao banco de dados através de um DataSet, se eu colocar "desc <table>" e o select, como farei para salvá-los em um local específico? http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Não existe uma ferramenta que simplificaria isso não... tipo, selecionar o banco e realizar um backup... e vice-versa: selecionar o backup e realizar a restauração. :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para retornar a estrutura como ela foi criada use:

show create table <table>;

E para o conteúdo, exporte ele no formato de inserção:

SELECT CONCAT('INSERT INTO <tabela> ( <coluna_1>, <coluna_2>, <...>) VALUES (' <coluna_1> ', ' <coluna_2> ', ' <...> ');' );

Trocando o nome das tabelas e colunas pelos da sua estrutura do banco.

Depois disso, para recuperar o conteúdo, basta rodar no banco o conteúdo exportado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para retornar a estrutura como ela foi criada use:

show create table <table>;

E para o conteúdo, exporte ele no formato de inserção:

SELECT CONCAT('INSERT INTO <tabela> ( <coluna_1>, <coluna_2>, <...>) VALUES (' <coluna_1> ', ' <coluna_2> ', ' <...> ');' );

Trocando o nome das tabelas e colunas pelos da sua estrutura do banco.

Depois disso, para recuperar o conteúdo, basta rodar no banco o conteúdo exportado.

 

Então Screen... Na verdade não entendi como utilizar estes comandos... se são para utilizar no gerenciador do banco de dados, por exemplo, um usuário leigo não saberá como fazer esse processo.

 

Eu rodei no meu gerenciador e rodou de boa, mas não sei como seria o retorno para o meu programa. http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Eu gostaria que em apenas um clique o usuário pudesse realizar o backup do mesmo, sem inserção de códigos, etc... :mellow:

 

Se estiver certo, então me desculpe pois ainda estou na faculdade, e pra isso que estou buscando ajuda, pois ainda estou aprendendo. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Também sou novato, ainda mais quando se trata de banco de dados.

Mas, uma solução que eu vejo para o seu caso seria, pegar o conteúdo retornado em 'show create table', encontrar quais são as colunas contidas na tabela, a partir disso montar o "SELECT ..." e gravar em arquivo (<arquivo>.sql) o resultado, tanto do 'show create table' quanto desse ultimo comando.

Assim, sempre que quiser recuperar o banco, basta carregar esse arquivo dentro do banco, recriando toda a estrutura com o conteúdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí sim te entendi...

 

Ou seja criar um arquivo (*.sql) com a estrutura e outro com os dados, certo? ;)

 

Mas aí que está... em primeiro lugar, eu não sei pegar o retorno do "desc <table>" e criar o arquivo...

 

Eu usarei dessa forma: frmDM->ADODataSetRegistros-> CommandText = "DESC registro";

 

Só que não sei como proceder com o retorno do mesmo para a criação do arquivo... você tem alguma idéia?! http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Desde já agradeço pela compreensão. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca usei ADO para conectar no banco.

Mas, acho que esse link pode te ajudar:

http://www.codeguru.com/cpp/data/mfc_database/ado/article.php/c6729__2/Using-ADO-from-C.htm

 

No final do artigo, existe um arquivo chamado "Database.zip", que possui um código fonte com tratamento para conexão ao banco.

 

Obrigado Screen... lá mostra como conectar e tudo mais... mas isso já estou manjando bem... estou utilizando um DataModule que mesmo fiz... estou programando no C++ Builder 2009 em modo gráfico e nele há boas ferramentas e quase todas são bem fáceis de manusear... :)

 

Porém só não sei como fazer com que o meu programa faça o tal backup da base de dados. :(

 

Acho que vou desistir de realizar backup... se der pau... o usuário não terá direito a backup!!! B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enfim galerinha...

 

Depois de tanta procura na internet, encontrei um material (rotina) para realizar backup...

 

Estive lendo sobre e existe um método de como fazer um backup através de uma ferramenta: mysqldump.

 

Então neste link: http://www.scriptbrasil.com.br/forum/lofiversion/index.php/t114357.html tem uns scripts para a rotina de backup em Delphi usando essa ferramenta, porém não conheço nada de Delphi ainda... Gostaria que alguém me ajudasse a decifrar e "traduzir" para o C++.

 

Só lembrando que estou desenvolvendo no C++ Builder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mysqldump já é conhecido por mim.

Ele é um executável, que faz parte das ferramentas do MySQL Server.

As soluções que encontrei, usando ele em código-fonte, foi chamar diretamente o executável para fazer o backup.

Documentação oficial:

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

 

Vale lembrar que ele faz lock das tabelas, portanto, é aconselhável executá-lo em momentos de baixo acesso ou a partir de um banco slave, pois as requisições feitas ao banco só serão processadas após a liberação do lock.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok ScreenBlack... ;)

 

Consegui de boa... aprendi através do mysqldump no prompt do Windows. :clap:

 

Através de: "C:\Users\Leox>C:\wamp\bin\mysql\mysql5.1.36\bin\mysqldump.exe -uroot -p123 DataBase > table.sql"

 

Só tenho que aprender como posso chamar o cmd de dentro do meu programa para a realização de tal. B)

 

Fora isso, está tudo certo!!! ^_^

 

Muito obrigado aos senhores. ;)

 

P.S.: Aqui mesmo no IMasters tem uma matéria do nosso colega Wagner Bianchi que ensina direitinho: MySQLDUMP - Aprenda a fazer backup's de sua base de dados Parte 1. :joia:

 

Quem souber fazer abrir o "CMD" por comando no C++, me avise, pois na internet não tem muita coisa como o C++ pode fazer isso. :ermm:

 

P.S.: Aprendi abrir o "CMD" por comando no C++... é: system ("command /c c:\\diretorio\\arquivo.exe");

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.