ATUALIZAR TABELA DB MYSQL (SERVIDOR) PARA DB LOCAL

DAMASCENO.CESAR 28/01/2016 14:46:44
#456628
Boa tarde pessoal, tenho um aplicação rodando normal que busca os dados no servidor MySQL, até aí tudo bem, mas preciso montar um bd local para caso haja falha na rede o usuário possa abrir a aplicação com bd local e continuar trabalhando. Se for fazer do meu jeito (entenda-se gambiarra) vai rodar mas ficará muito código e um código bem sujo (rsrs). Gostaria de receber de vocês algumas dicas de como fazer isso corretamente.
Estava pensando em usar mdb ou accdb para banco local (access) e como essa aplicação só vai rodar no final de semana e em um único PC, acho que dá conta este db.
A atualização do Db local será feito pelo usuário na sexta-feira pois durante a semana o PC fica desligado (só é usado no final de semana)
E, caso haja falha na rede no final de semana, gostaria de inverter a situação e atualizar o Db MySQL na segunda-feira.
Trabalho com POO em camadas, talvez não 100% certo mas quase lá

Desde já agradeço a ajuda.
ACCIOLLY 28/01/2016 17:13:29
#456639
Trabalho em uma escola de ensino fundamental. Aqui temos um sistema que tem um datacenter em determinada cidade. Todos os dados de certa forma sao salvos nesse data center. Mas primeiramente esses dados sao salvos localmente em uma base MySql Mesmo. Então todos os dias em um determinado horário, o servidor local se encarrega de gerar um lote em XML e mandar para o servidor onde está o data center.
E com o mysql dá pra fazer alem dessa forma, simplesmente gerando um sql.
A única diferença que você está querendo fazer é que você quer fazer a atualização do banco local. Aqui na escola é feito a atualização do servidor a partir do banco local. O que acho a coisa certa a ser feita.
DAMASCENO.CESAR 29/01/2016 08:31:45
#456659
ACCIOLY, o problema é que no meu caso, vários outros setores já abastecem o o banco de dados durante a semana e apenas este setor, com uma maquina, é usado no final de semana, e apenas no final de semana, então, preciso este banco de dados local nessa máquina para que, caso haja falha na rede, este setor tenha as informações no bd local e, devido a essa falha, seja necessário atualizar o bd do servidor. Vi alguma coisa em SQL onde se copia as tabelas de um bd para outro, mas estava mais ou menos assim:
INSERT into [Base Testes].TBTESTE002 SELECT * from tbteste001

A lógica eu entendi, já usei isso com Access, mas com MySQL eu não sei como montar o caminho do bd, seria algo do tipo:

INSERT into [Server=192.168.0.10; Database=MeuBd; Uid=user; Pwd=senha].MinhaTb SELECT * FROM TbDados

ou é de outro jeito?
ALVAROVB2009 29/01/2016 09:29:48
#456661
Damasceno , tenho um programa que faço o que vc precisa e a única coisa que faço é montar uma conexão exclusiva para esse banco , ou seja, tenho 2 conexões uma para o bd local e o outro para a rede
O código de atualização é assim
Bd1 - Banco Local
Bd2 - Bando Rede

Rs = [Ô]Select * from minhatabela[Ô],db1, 3,3
while not rs.eof
db2.execute ([Ô]insert into meubancoservidor(campos) values (dadosdo Rs)[Ô])
rs.movenext
wend

Resumidamente é isso, passo os dados da tabela local para a tabela da rede

Obs
Uso um config na máquina que guarda o caminho até o banco de dados, pois se tiver alguma formatação ou algo assim e mudar o mapeamento e/ou o ip do servidor , basta atualizar o config que volta a conexão

Aqui vai o que tenho no meu modulo AbreBanco
Public Sub AbreBanco()
Set Db2 = New ADODB.Connection
Set Db = New ADODB.Connection
Db.Open [Ô]Driver={MySQL ODBC 5.1 Driver};Server=[Ô] & (iniReadKey(App.Path & [Ô]\config.ini[Ô], [Ô]DADOS[Ô], [Ô]Diretorio[Ô])) & [Ô];Database=Bancolocal;User=usuario; Password=senha;Option=3; (fonte site Connection Strings).[Ô]

On Error GoTo TrataErro
Db2.Open [Ô]Driver={MySQL ODBC 3.51 Driver};Server=[Ô] & (iniReadKey(App.Path & [Ô]\config.ini[Ô], [Ô]DADOS[Ô], [Ô]DiretorioRede[Ô])) & [Ô];Database=BancoRede;User=usuario; Password=senha;Option=3; (fonte site Connection Strings).[Ô]
BancoRede = True
Exit Sub
TrataErro:
[ô]Caso tenha um problema com a rede, marca que o banco não esta conectado e a atualização ficará pendente até a rede voltar
BancoRede = False
On Error Resume Next
End Sub

Acho que isso pode te ajudar, qqer coisa da um toque ai
DAMASCENO.CESAR 29/01/2016 09:49:38
#456662
ALVARO, vou testar aqui e depois retorno o resultado, tou meio enrolado agora então talvez demore um pouco o retorno
obrigado
ACCIOLLY 29/01/2016 09:54:42
#456663
Cara sinceramente não conhecia esse método na SQL! rsrsrs. Vou dar uma estudada. Mas isso provavelmente pode causar problemas com chaves primárias. A menos que todos os dados do servidor também estejam presentes na máquina local. Se esse for o caso sugiro que utilize o mesmo SGDB na máquina local e importe a dll MySqlBackup.
Vá no menu Tools >> NuGet Package Maneger >> Package Maneger Console e digite PM> Install-Package MySqlBackup.NET. Feito isso a dll vai estar dentro do seu projeto já referenciada.
Depois é só utilizar essas funções de exportar e importar (Backup/Restore)

Backup
string constring = [Ô]server=localhost;user=root;pwd=qwerty;database=test;[Ô];
string file = [Ô]C:\\backup.sql[Ô];
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ExportToFile(file);
conn.Close();
}
}
}


Restore
string constring = [Ô]server=localhost;user=root;pwd=qwerty;database=test;[Ô];
string file = [Ô]C:\\backup.sql[Ô];
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ImportFromFile(file);
conn.Close();
}
}
}


O que isso faz? Ele gera e importa um arquivo de backup *.sql dentro dele tem todos os dados do banco inteiro. Se vc abrir e le ele vai estar assim CREATE IF NO EXISTS isso para as tabelas. Os dados ele só vai insertar o que não existir também, e assim vai.

Agora se a unica operação que você vai fazer no final de semana é insert, aí já sugiro se trabalhar com XML, que é algo mais leve, vc não precisa colocar a chave primária (principalmente se for auto incremental) pra não gerar duplicidade, e tals...
KURTGU 29/01/2016 11:41:44
#456664
Citação:

:
Cara sinceramente não conhecia esse método na SQL! rsrsrs. Vou dar uma estudada. Mas isso provavelmente pode causar problemas com chaves primárias. A menos que todos os dados do servidor também estejam presentes na máquina local. Se esse for o caso sugiro que utilize o mesmo SGDB na máquina local e importe a dll MySqlBackup.
Vá no menu Tools >> NuGet Package Maneger >> Package Maneger Console e digite PM> Install-Package MySqlBackup.NET. Feito isso a dll vai estar dentro do seu projeto já referenciada.
Depois é só utilizar essas funções de exportar e importar (Backup/Restore)

Backup

string constring = [Ô]server=localhost;user=root;pwd=qwerty;database=test;[Ô];
string file = [Ô]C:\backup.sql[Ô];
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ExportToFile(file);
conn.Close();
}
}
}


Restore
string constring = [Ô]server=localhost;user=root;pwd=qwerty;database=test;[Ô];
string file = [Ô]C:\backup.sql[Ô];
using (MySqlConnection conn = new MySqlConnection(constring))
{
using (MySqlCommand cmd = new MySqlCommand())
{
using (MySqlBackup mb = new MySqlBackup(cmd))
{
cmd.Connection = conn;
conn.Open();
mb.ImportFromFile(file);
conn.Close();
}
}
}


O que isso faz? Ele gera e importa um arquivo de backup *.sql dentro dele tem todos os dados do banco inteiro. Se vc abrir e le ele vai estar assim CREATE IF NO EXISTS isso para as tabelas. Os dados ele só vai insertar o que não existir também, e assim vai.

Agora se a unica operação que você vai fazer no final de semana é insert, aí já sugiro se trabalhar com XML, que é algo mais leve, vc não precisa colocar a chave primária (principalmente se for auto incremental) pra não gerar duplicidade, e tals...



TEM ESSAS DUAS FUNCOES EM VB.NET?
ALVAROVB2009 29/01/2016 14:39:07
#456668
Resposta escolhida
ACCIOLLY

A forma que vc colocou esta fazendo uma exportação geral do banco e não é isso que o DAMASCENO precisa, pois o pc só vai funcionar aos finais de semana e/ou quando tenha falha na rede, então ele precisa apenas dos dados que são lançados nesse período e não necessariamente essa máquina fique ligada na rede
Após essa [Ô]exportação[Ô], ele poderá apagar os dados desse banco para que sempre fique zerado ou então no comando Sql, ele selecione a data
Da forma que passei vc exporta somente a tabela que é usada e implementa os dados no banco do servidor

Apenas uma coisa, o exemplo que dei é em vb6, más o .net não foge muito disso, o que importa é a idéia
DAMASCENO.CESAR 29/01/2016 16:48:08
#456682
Pessoal, tou numa correria tremenda e ainda não deu pra testar tudo, como nunca conectei por drive odbc, tou apanhando um pouco pra fazer funcionar, mas chego lá.
Como tá encerrando o expediente, só continuo na segunda e [Ô]quando[Ô] funcionar, posto aqui pra voces, se não surgir mais algumas duvidas no meio disso rsrs.
Obrigado a todos por enquanto e bom fim de semana!
ACCIOLLY 29/01/2016 19:00:41
#456686
Citação:

TEM ESSAS DUAS FUNCOES EM VB.NET?


Sim, só fazer a conversão pro vb.net e fica assim:

Dim caminho As String = [Ô]SERVER=127.0.0.1;DATABASE=seubanco;UID=root;PWD=;[Ô]

Public Sub Backup()
Dim Arquivo As String = [Ô]C:\\banco.sql[Ô]
Using conn As New MySqlConnection(caminho)
Using cmd As New MySqlCommand()
Using mb As New MySqlBackup(cmd)
cmd.Connection = conn
conn.Open()
mb.ExportToFile(Arquivo)
conn.Close()
End Using
End Using

End Using

End Sub

Public Sub Restore()
Dim Arquivo As String = [Ô]C:\\banco.sql[Ô]
Using conn As New MySqlConnection(caminho)
Using cmd As New MySqlCommand()
Using mb As New MySqlBackup(cmd)
cmd.Connection = conn
conn.Open()
mb.ImportFromFile(Arquivo)
conn.Close()
End Using
End Using

End Using

End Sub

DAMASCENO.CESAR 01/02/2016 13:08:30
#456840
ACCIOLY, tem como escolher as tabelas que se quer fazer o Backup ou só é possivel do Banco inteiro?
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas