[FUG-BR] script para migrar contas qmail cdb para mysql

renato martins renatobsd em gmail.com
Domingo Fevereiro 1 21:08:19 BRST 2009


Alguns dias atrás procurava uma maneira de migrar centenas de usuario do
banco padrão do qmail o cdb para mysql
achei que o o mysql seria mais fácil de fazer backup e de montar uma
redundandia de servidores , mas depois de procurar bastante não achei muita
coisa só o contrario do mysql para cdb e um script em perl que no meu caso
nao funcionou pois eu nao tinha vários modulos perl instalados,  vi que não
era uma coisa assim muito dificil e pensei em escrever esse script em php
pois eu tinha o php instalado com suporte a mysql tudo já funionando e ai
ficou muito fácil.
Como não tenho blog nem nada disso resolvi colocar aqui como email para que
esse script possa ajudar os colegas que um dia vão precisar ou estão
precisando.
se voce já tem o qmail rodadando com cdb você só vai precisar reinstalar o
vpopmail com suporte mysql
no caso de uma migração de um servidor velho para um novo instale o qmail
com vpopmail e suporte ao mysql
copie a pasta domain para o novo servidor com o vadddomain crie novamente o
dominio ( o vdadddomain vai dar um erro posi o diretorio do dominio ja
existe mais vai criar tudo certinho e nao vai apagar nada das contas vai
ficar tudo la mesmo ai e so salvar esse script como ex:
php-vpopmail-cdb-to-mysql.php alterar o usuario e senha o caminho do
vpopmail e rodar no console mesmo
php php-vpopmail-cdb-to-mysql.php
se nao der nem um erro seus usuarios já foram para o mysql :)

   <?php
 /*
 * 01.08.2009 Renato Martins
 */

// script criado para migrar usuarios do qmail em arquivos cdb para mysql
$DOMAIN = "midia.com.br";

# Where did you install VPopMail ?
$VPOPMAILHOME = "/usr/local/vpopmail";

# The name of your mySQL server.
$SERVER = "localhost";

# Username to login to the mySQL server.
$USER = "usuario_db_vpopmail";

# The password for mySQL server.
$PASSWORD = "Senha_db_vpopmail";

# Database for VPopMail.
$DATABASE = "vpopmaildb";

# You shouldn't need to change anything after this line.
$d=explode(".", $DOMAIN);
$DOMAIN_TABLE =($d[0]);

# Create the domain table.
//$sql = "CREATE TABLE $DOMAIN_TABLE ( pw_name varchar(32) DEFAULT '' NOT
NULL, pw_passwd varchar(255) DEFAULT '' NOT NULL, pw_uid int(11), pw_gid
int(11), pw_gecos varchar(255), pw_dir varchar(255), pw_shell varchar(255),
KEY stress_test_com_idx (pw_name))";

// inicio da conexão do banco e seleciona a data base
$db=mysql_connect( 'localhost', $USER, $PASSWORD )or die ("Não Foi Possivel
Se Conectar Ao Banco ").mysql_error();
mysql_select_db($DATABASE, $db)or die ("Não Foi Possivél Selecionar
Banco").mysql_error();



// Open vpasswd file
$row=file($VPOPMAILHOME.'/domains/'.$DOMAIN.'/vpasswd');
$c='0';
if(is_array($row)){

    foreach ($row as $linha) {
           //$linha=$row[$c];
           list($v_name, $v_passwd, $v_uid, $v_gid, $v_gecos, $v_dir,
$v_shell) = explode(":", $linha);
           /*
           echo ("\n"."email :".$v_name.
                 "\n"."Dominio: ".$DOMAIN.
                 "\n"."Senha: ".$v_passwd.
                 "\n"."user-id: ".$v_uid.
                 "\n"."Group-id :". $v_gid.
                 "\n"."Comentario: ". $v_gecos.
                 "\n"."Diretorio :".$v_dir.
                 "\n"."Shell: ". $v_shell
                 );
           */
           $sql=("INSERT INTO `vpopmail` (`pw_name` ,`pw_domain`
,`pw_passwd` ,`pw_uid` ,`pw_gid` ,`pw_gecos` ,`pw_dir` ,`pw_shell`)
           VALUES ('$v_name', '$DOMAIN', '$v_passwd', '$v_uid', '$v_gid',
'$v_gecos', '$v_dir', '$v_shell');");
           $insere=mysql_query($sql)or die ("nao pude fazer o
insert").mysql_error();
          // echo "\n".$sql;
           //$c=($c + 1);

        }
        mysql_close($db);
    }

?>


Mais detalhes sobre a lista de discussão freebsd