[FUG-BR] (Off-Topic) Dúvida MySQL

Carlos Eduardo Carvalho cartola.bsd em gmail.com
Segunda Junho 4 11:12:59 BRT 2007


Pois é, a sugestão do João acho que atende. Outra opção é fazer do
/home um link para o /usr/local, mas isso pode não te atender. Outra
forma seria gerar um dump do mysql, substituir o texto no dump, que
nada mais é que um arquivo texto (e aí tem inúmeras maneiras de
substituir texto) e recarregar o dump, que em geral já tem tags SQL
que removem e recriam os conteúdos todos. Ex (o dólar representa o
prompt):

$ mysqldump --opt suabase -u usuario -p > dump.sql
$ sed -i "" -e 's/home/usr\/local/g' dump.sql
$ mysql -u usuario -p suabase < dump.sql

Claro: mantenha um backup antes e certifique-se de que ninguém está
acessando a base no momento da alteração. Um backup pode até ser uma
cópia do dump.sql

Claro também que isso só dará certo assumindo-se que não há a string
"home" em outras partes da sua base. Se tiver, pode editar o dump.sql
antes, que tem toda a base "suabase" e deixar apenas a tabela
necessária.

Abs, Cartola.

Em 01/06/07, Joao Rocha Braga Filho<goffredo em gmail.com> escreveu:
> On 6/1/07, Rodrigo Lorenz <lorenzhills em gmail.com> wrote:
> > Saudações pessoal,
> >
> >             Vou fazer a atualização de um servidor de e-mail com Qmail
> > e estou usando vpopmail + mysql. Na presente instalação os
> > domínios/usuários ficam dentro de /home/vpopmail/domains, portando a
> > saída do SELECT na coluna pw_dir da tabela vpopmail fica assim por
> > exemplo:
> >
> > +------------------------------------------------------------------------+
> > | pw_dir
> >                   |
> > +------------------------------------------------------------------------+
> > | /home/vpopmail/domains/testando.com.br/postmaster       |
> > | /home/vpopmail/domains/testando2.com.br/postmaster     |
> > | /home/vpopmail/domains/testando.com.br/megatherion     |
> > | /home/vpopmail/domains/testando2.com.br/megatherion   |
> > +------------------------------------------------------------------------+
> > 4 rows in set (0.00 sec)
> >
> > Nas ocorrências de "/home/" gostaria de substituir para "/usr/local/".
> > Para alterar apenas um registro é fácil usando os comandos UPDATE, SET
> > e WHERE, mas para alterar todos registros eu não estou conseguindo, e
> > no meu caso são mais de 5.000 registros. Se alguém puder dar uma dica
> > de como fazer eu agradeço.
> >
> > Obrigado a todos pela atenção
> >
>
> Eu sei pouco de SQL, mas a sugestão seria um programa para ler todos
> os registros, pegando este campo (só ele deve ser o suficiente), Modificando
> a string e fazendo um UPDATE.
>
> Sugestõa dois, e talvez mais fácil.
>
> Faça uma query no mysql, salvando o resultado em um arquivo (acho
> que opção tee), Depois rode o seguinte script:
>
> uniq < ARQUIVO | sort | uniq | sed 's/\(\/home\)\(.*\)/UPDATE pw_dir
> FROM VALUES (\/usr\/local\2) WHERE pw_dir = \'\1\2\';/' | mysql
> --user=... --password... banco_de_dados
>
> Nota, acima é uma linha só.
>
> PERIGO!!!!!!!!!!!!!!!!!! Não tenho certeza se toda a sintaxe acima está certa,
> então sugiro testar em uma cópia antes.
>
>
> Boa Sorte,
>     João Rocha.
>
>
> > Rodrigo Lorenz
> > -------------------------
> > Histórico: http://www.fug.com.br/historico/html/freebsd/
> > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
> >
>
>
> --
> "Sempre se apanha mais com as menores besteiras. Experiência própria."
>
> goffredo em goffredo.eti.br
> goffredo em gmail.com
> http://www.goffredo.eti.br
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>


Mais detalhes sobre a lista de discussão freebsd