shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] replicação


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] replicação
Date: Thu, 28 Dec 2006 14:20:47 -0200

Por favor,

TODOS os interessados em ajudar o Sr Fernando nas suas atividades de
banco de dados e que saiam do escopo da lista o façam em PVT para ele
atraves do email: address@hidden

Imagino que muitos da lista de shell script (incluindo eu) terão o
prazer de ajudar no uso das ferramentas mágicas do universo NIX quando
a questão rumar para "usar shell script". Se for imprescindível   usar
uma ferramenta não usual de forma integrada com alguma fagulha de
shell script, que seja informado um link externo como o sourceforge, a
pagina do criador da ferramenta ou, em ultimo caso, o codigo fonte no
pastebin (que possui syntax highlight!!) -- http://pastebin.com/

Lembrando que no rodapé da lista é possivel ler:

Esta lista não admite a abordagem de outras liguagens de programação,
como perl, C etc. Quem insistir em não seguir esta regra será moderado
sem prévio aviso.

Quem não concordar entre em contato em PVT,  boas entradas de ano novo à todos.

On 12/28/06, address@hidden
<address@hidden> wrote:






olá Fernando,

 Realmente você está fora do escopo da lista, mas vamos lá, O que eu
 percebi é que você não pode apagar a tabela, então nem o rsync nem o
 mysqldump. A solução do Remulo é a mais indicada, porem pelo que você
 falou nenhuma das aplicações é slave ou master, e sim dois bancos
 redundantes. Uma saída que utilizo é o datapipe, que você roda em um dos
 lados com a porta do mysql, assim quando acessar o banco(fará isso
 normalmente, como se fosse local) os dados serão processados no servidor
 que está apontando. estou enviando o source do datapipe, só de o comando

 gcc -o datapipe pipefakeps.c

 Atenciosamente,

 Rangel Perez Sardinha
 <address@hidden>

 =====================================
 Pragya Technologies Brazil

 Rua Alagoas, 135
 Ribeirao Preto - SP - Brasil
 Mobile: +55 16 9137 8609
 Office: +55 16 3904 9657
 =====================================

 -----Corte aqui <pipefakeps.c>-----------------
 /*

 The following is an interesting snippet of code I wrote recently. It
 makes a data pipe between a listen port on the machine it's being run on
 and a port on a remote machine. For example, running
   datapipe 2222 23 your.machine.com

 would create a port 2222 on the local machine that, if telnetted to,
 would
 be the same as telnetting to port 23 on your.machine.com. This can be
 used
 for a variety of purposes: redirect IRC connections so that identd shows
 the username of the datapipe process; redirect sendmail direct
 connections
 for the same reason; even use on a firewall machine to give access to an
 internal service (ftpd, for instance). Cascaded datapipes make for
 interesting traceback dilemmas. Questions and comments accepted.

 Compile with:
     cc -o datapipe -O datapipe.c
 On boxes without strerror() (like SunOS 4.x), compile with:
     cc -o datapipe -O -DSTRERROR datapipe.c

 Run as:
     datapipe localport remoteport remotehost [fakeps (tested on Linux)]

 It will fork itself into the background.

 /*
  * Datapipe - Create a listen socket to pipe connections to another
  * machine/port. 'localport' accepts connections on the machine running
  * datapipe, which will connect to 'remoteport' on 'remotehost'. Fairly
  * standard 500 xxxx extended errors are used if something drastic
  * happens.
  *
  * (c) 1995 Todd Vierling
  * fakeps no(c) 1998 fusys
  *
  * Define STRERROR while compiling on a SunOS 4.x box
  */

 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/wait.h>
 #include <netinet/in.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <unistd.h>
 #include <netdb.h>
 #include <time.h>

 #ifdef STRERROR
 extern char *sys_errlist[];
 extern int sys_nerr;
 char *undef = "Undefined error";

 char *strerror(error)
   int error;
 {
   if (error > sys_nerr)
     return undef;
   return sys_errlist[error];
 }
 #endif
 #define CIAO_PS "bfi_2"

 main(argc, argv)
   int argc;
   char **argv;
 {
   int lsock, csock, osock;
   FILE *cfile;
   char buf[4096];
   struct sockaddr_in laddr, caddr, oaddr;
   int caddrlen = sizeof(caddr);
   fd_set fdsr, fdse;
   struct hostent *h;
   struct servent *s;
   int nbyt;
   unsigned long a;
   unsigned short oport;
   int i, j, argvlen;
   char *bfiargv[argc+1];
   char *fintops = CIAO_PS ;

   if (argc < 4) {
     fprintf(stderr,"Usage: %s localport remoteport remotehost
 fakeps\n",argv[0]);
     return 30;
   }

   for(i=0; i < argc; i++) {
     bfiargv[i] = malloc(strlen(argv[i]) + 1);
     strncpy(bfiargv[i], argv[i], strlen(argv[i]) + 1);
    }
   bfiargv[argc] = NULL;
   argvlen = strlen(argv[0]);
   if (argvlen < strlen(CIAO_PS)) {
     printf("Se vuoi fregare davvero ps vedi di lanciarmi almeno come
 superFunkyDataPipe !\n") ;
     abort();
    }
   if(bfiargv[4]) fintops=bfiargv[4] ;
   strncpy(argv[0], fintops, strlen(fintops));
   for(i = strlen(fintops); i < argvlen; i++) argv[0][i] = '\0';
   for(i=1; i < argc; i++) {
     argvlen = strlen(argv[i]);
     for(j=0; j <= argvlen; j++)
       argv[i][j] = '\0';
    }

   a = inet_addr(argv[3]);
   if (!(h = gethostbyname(bfiargv[3])) &&
       !(h = gethostbyaddr(&a, 4, AF_INET))) {
     perror(bfiargv[3]);
     return 25;
   }
   oport = atol(bfiargv[2]);
   laddr.sin_port = htons((unsigned short)(atol(bfiargv[1])));
   if ((lsock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
     perror("socket");
     return 20;
   }
   laddr.sin_family = htons(AF_INET);
   laddr.sin_addr.s_addr = htonl(0);
   if (bind(lsock, &laddr, sizeof(laddr))) {
     perror("bind");
     return 20;
   }
   if (listen(lsock, 1)) {
     perror("listen");
     return 20;
   }
   if ((nbyt = fork()) == -1) {
     perror("fork");
     return 20;
   }
   if (nbyt > 0)
     return 0;
   setsid();
   while ((csock = accept(lsock, &caddr, &caddrlen)) != -1) {
     cfile = fdopen(csock,"r+");
     if ((nbyt = fork()) == -1) {
       fprintf(cfile, "500 fork: %s\n", strerror(errno));
       shutdown(csock,2);
       fclose(cfile);
       continue;
     }
     if (nbyt == 0)
       goto gotsock;
     fclose(cfile);
     while (waitpid(-1, NULL, WNOHANG) > 0);
   }
   return 20;

  gotsock:
   if ((osock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
     fprintf(cfile, "500 socket: %s\n", strerror(errno));
     goto quit1;
   }
   oaddr.sin_family = h->h_addrtype;
   oaddr.sin_port = htons(oport);
   memcpy(&oaddr.sin_addr, h->h_addr, h->h_length);
   if (connect(osock, &oaddr, sizeof(oaddr))) {
     fprintf(cfile, "500 connect: %s\n", strerror(errno));
     goto quit1;
   }
   while (1) {
     FD_ZERO(&fdsr);
     FD_ZERO(&fdse);
     FD_SET(csock,&fdsr);
     FD_SET(csock,&fdse);
     FD_SET(osock,&fdsr);
     FD_SET(osock,&fdse);
     if (select(20, &fdsr, NULL, &fdse, NULL) == -1) {
       fprintf(cfile, "500 select: %s\n", strerror(errno));
       goto quit2;
     }
     if (FD_ISSET(csock,&fdsr) || FD_ISSET(csock,&fdse)) {
       if ((nbyt = read(csock,buf,4096)) <= 0)
         goto quit2;
       if ((write(osock,buf,nbyt)) <= 0)
         goto quit2;
     } else if (FD_ISSET(osock,&fdsr) || FD_ISSET(osock,&fdse)) {
       if ((nbyt = read(osock,buf,4096)) <= 0)
         goto quit2;
       if ((write(csock,buf,nbyt)) <= 0)
         goto quit2;
     }
   }

  quit2:
   shutdown(osock,2);
   close(osock);
  quit1:
   fflush(cfile);
   shutdown(csock,2);
  quit0:
   fclose(cfile);
   return 0;
 }

 -----------corte aqui-----------------------------



  -----Mensagem original-----
 De: address@hidden
 [mailto:address@hidden] Em nome de Remulo
 Enviada em: quarta-feira, 27 de dezembro de 2006 15:47
 Para: address@hidden
 Assunto: Re: [shell-script] replicação

 Prezado Amigo,

 estou respondendo, mesmo sabendo que isso está fora do escopo do shell,
 pois
 o que vc quer é que seus bancos estejam com a mesma informação.

 o que vc quer, o proprio mysql irá fazer pra vc, e nao o shell. vc terá
 que
 dizer que um banco é o master, e o outro é slave, portamto nada a ver
 com
 shell.

 procupe em uma lista de banco de dados sobre replicação que vc resolverá
 seu
 problema logo.

 atenciosamente,

 Em 27/12/06, Fernando Simon <fsimonbr@yahoo.
 <mailto:fsimonbr%40yahoo.com.br> com.br> escreveu:
 >
 > Pois eh, tenho um problema ai, não posso dropar e recriar as tabelas,
 > tendo em vista que as duas base estão sendo usadas, digo tem uma
 aplicação
 > desktop que usa uma base a outra uma aplicação web, quando é
 modificado o
 > registro de uma, deve modificar o mesmo, somente o mesmo, registro na
 outra
 > base. :-/
 >
 > Fernando
 >
 > ----- Mensagem original ----
 > De: Reinaldo Carvalho <reinaldoc@gmail. <mailto:reinaldoc%40gmail.com>
 com <reinaldoc%40gmail.com>>
 > Para: shell-script@ <mailto:shell-script%40yahoogrupos.com.br>

 yahoogrupos.com.br <shell-script%40yahoogrupos.com.br>
 > Enviadas: Terça-feira, 26 de Dezembro de 2006 21:14:52
 > Assunto: Re: [shell-script] replicação
 >
 > rsync não é o mais aconselhado, visto que necessita parar o banco.
 >
 > Use o mysqldump...
 >
 > no servidor:
 > mysqldump -u root -p DB tabela > tabela.sql
 >
 > para replicar:
 > mysql -u root -p DB < tabela.sql
 >
 > Veja, que a tabela do segundo será removida, e então recriada igual ao
 > primeiro.
 >
 > --
 > Reinaldo Carvalho
 >
 > On 12/26/06, Fernando Simon <fsimonbr@yahoo. com.br> wrote:
 > > Olá pessoal, Feliz Natal e um próspero Ano Novo!
 > >
 > > Pessoal, estou precisando de uma forcinha, preciso criar um script
 que
 > atualize um banco de dados de acordo com o outro, se possível,
 atualize
 > somente algumas tabelas, teria como fazer isso via shellscript?
 > > Os dois banco de dados são mysql.
 > >
 > > Se alguém tiver outra idéia de como fazer isso, fico grato pelas
 > colaborações.
 > >
 > > Muito Obrigado!
 > >
 > > Abraços,
 > > Fernando
 > >
 > > ____________ _________ _________ _________ _________ __
 > > Fale com seus amigos de graça com o novo Yahoo! Messenger
 > > http://br.messenger .yahoo.com/
 > >
 > > [As partes desta mensagem que não continham texto foram removidas]
 > >
 > >
 > >
 > > ------------ --------- --------- --------- --------- --------- -
 > > Esta lista não admite a abordagem de outras liguagens de
 programação,
 > como perl, C etc. Quem insistir em não seguir esta regra será moderado
 sem
 > prévio aviso.
 > > ------------ --------- --------- --------- --------- --------- -
 > > Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br
 > > ------------ --------- --------- --------- --------- --------- -
 > > Esta lista é moderada de acordo com o previsto em http://www.listas-
 <http://www.listas-discussao.> discussao.
 > cjb.net
 > > ------------ --------- --------- --------- --------- --------- -
 > > Servidor Newsgroup da lista: news.gmane.org
 > > Grupo: gmane.org.user- groups.programmi ng.shell. brazil
 > >
 > >
 > > Links do Yahoo! Grupos
 > >
 > >
 > >
 >
 > __________________________________________________
 > Fale com seus amigos de graça com o novo Yahoo! Messenger
 > http://br.messenger <http://br.messenger.yahoo.com/> .yahoo.com/
 >
 > [As partes desta mensagem que não continham texto foram removidas]
 >
 >
 >

 [As partes desta mensagem que não continham texto foram removidas]

 [As partes desta mensagem que não continham texto foram removidas]






--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

[Prev in Thread] Current Thread [Next in Thread]