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

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

RES: [shell-script] replicação


From: rangel.sardinha
Subject: RES: [shell-script] replicação
Date: Thu, 28 Dec 2006 08:52:39 -0200

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]



reply via email to

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