Oferta Nacional - 234x60
Página Inicial > mysql > Como executar vários arquivos sql em um comando único pelo CMD do windows

Como executar vários arquivos sql em um comando único pelo CMD do windows

Olá!

Hoje vou mostrar para você uma maneira fácil e rápida para rodar vários arquivos sql em um servidor mysql através de um único comando, através do prompt de comando do windows (cmd).

A necessidade surgiu devido a uma reestruturação do banco de dados, onde vários arquivos sql são responsáveis pela criação e importação de dados, criação de novas tabelas, alteração da estrutura de tabelas dentre outras coisas. Era muito chato a cada alteração ou testes de um dos arquivos ter que apagar o banco, recriar e rodar todos os arquivos um por um.

Então vamos lá!

Primeiro vamos criar um novo banco para o exemplo, chamado meubanco:

DROP DATABASE IF EXISTS `meubanco`;
CREATE DATABASE `meubanco`;

Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco.sql (use um editor como o notepad para salvar).

CREATE TABLE  `tabela1` (
  id INT(11) NOT NULL AUTO_INCREMENT,
  descricao VARCHAR(45) NOT NULL,
  data DATETIME,
  PRIMARY KEY id,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE  `tabela2` (
  id INT(11) NOT NULL AUTO_INCREMENT,
  descricao VARCHAR(45) NOT NULL,
  data DATETIME,
  PRIMARY KEY id,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_estrutura.sql (para tornar mais fácil o processo, salve todos os arquivos sql na mesma pasta).

Agora vamos inserir alguns dados nas tabelas:


INSERT INTO tabela1 (descricao,data) VALUES
('Esta é a linha 1 da tabela 1','2009-09-16 13:45:12'),
('Esta é a linha2 da tabela 1',now()),
('Esta é a linha 3 da tabela 1',now()),
('Esta é a linha 4 da tabela 1',now());

INSERT INTO tabela2 (descricao,data) VALUES
 ('Esta é a linha 1 da tabela 2','2009-09-23 23:12:30'),
 ('Esta é a linha2 da tabela 2',now()),
 ('Esta é a linha 3 da tabela 2',now()),
 ('Esta é a linha 4 da tabela 2',now());

Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_dados.sql .

Agora suponhamos que você tenha feito a seguinte alteração na estrutura:


ALTER TABLE `tabela1` ADD COLUMN `usuario` INT(11) , ADD INDEX `ix_usuario`(`usuario`);

ALTER TABLE `tabela2` ADD COLUMN `id_tabela1` INT(11) , ADD INDEX `ix_id_tabela1`(`id_tabela1`);

Salve este arquivo, por exemplo, em C:dadosmeubancomeubanco_alteracao.sql, na mesma pasta que os outros.

Este exemplo é bem simples perto da real necessidade de se rodar vários arquivos sql, mas serve apenas para ilustrar uma situação em que realmente exista esta necessidade (como foi o meu caso, onde várias pessoas fizeram várias alterações em partes diferentes da estrutura de dados, e era necessário reestruturar o banco algumas vezes no mesmo dia, e várias vezes para testar localmente para não correr risco de perder os dados existentes no servidor live).

Voltando ao exemplo, abra o prompt de comando do windows (Iniciar => Executar => cmd), e teste se você consegue executar o mysql de qualquer pasta:

C:Documents and Settingsusuario>mysql – u root

Se você usa senha, use -p no final do comando. Verifique se sua tela ficou parecida com a tela abaixo:

C:Documents and Settingsusuario>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 26
Server version: 5.1.32-community MySQL Community Server (GPL)Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql>

Se você não conseguiu, você terá de setar o caminho para o mysql como uma variável de ambiente do windows. Para isso, entre no Painel de controle e abra Sistema (ou tecle simultaneamente a tecla com o logo do windows e a tecla Pause Break). Vá na guia Avançado e clique em Variáveis de Ambiente. Na janela que abre, selecione Path em Variáveis do sistema e clique em Editar. Na nova janela que abrir, em Valor da variável, acrescente o caminho para o mysql (no meu caso, C:Arquivos de programasMySQLMySQL Server 5.1bin). Certifique-se de que exista um ; separando o caminho que você acrescentou e os que já existiam, e que não existem espaços em branco antes e depois de ;. Salve e dê ok nas janelas. Pronto. Feche o cmd e tente novamente. Se conseguir, de exit para voltar a pasta e vá até a pasta dos arquivos sql:

mysql> exit
Bye

C:Documents and Settingsusuario>cd C:dadosmeubanco

C:dadosmeubanco>

Agora vamos criar o arquivo *.bat que fará a execução dos scripts sqls. Abra o bloco de notas ou seu editor preferido, e digite nele:


@echo OFF
echo Criando o banco de dados...
mysql -u root < meubanco.sql
echo Criando a estrutura de dados...
mysql -u root meubanco < meubanco_estrutura.sql
echo Inserindo os dados...
mysql -u root meubanco < meubanco_dados.sql
echo Alterando a estrutura...
 mysql -u root meubanco < meubanco_alteracao.sql
echo Fim do Script!

Salve o arquivo como cria_meubanco.bat. Volte ao prompt do windows, digite cria_meubanco e voilá! Se tudo correu bem, você verá a tela abaixo:

C:dadosmeubanco>cria_meubanco

Criando o banco de dados…
Criando a estrutura de dados…
Inserindo os dados…
Alterando a estrutura…
Fim do Script!

C:dadosmeubanco>

Pronto! Você acabou de criar um arquivo em lotes executável pelo prompt do windows, que poderá te poupar muito tempo no seu dia a dia de desenvolvedor.

Deixe seu comentário!

Até a próxima!

Related Posts Plugin for WordPress, Blogger...

Posts Relacionados:

Deixe seu comentário

  1. FabioCFL
    16, novembro, 2010 em 10:20 | #1
    Muito bom ainda não testei mas só de ter achado uma luz já fico feliz!!! Valeu postar seus conhecimentos; vou tentar distribuir uma aplicação em java com instalador e criar o BD no mysql com seu exemplo!!! Grato!
  2. henrique
    8, setembro, 2011 em 19:37 | #2
    Kara foda essa dica muit bom testei e da certinho com o xampp
  3. Daniel
    15, setembro, 2011 em 14:10 | #3
    Boa tarde! gostei muito do topico parabens, mais isso funciona somente para MYSQL?
    Funciona tambem para outros bancos de dados? como FireBird?
    obrigado
  4. Ruka
    16, outubro, 2012 em 16:33 | #4
    Cara, muito obrigado pela ajuda. Me ajudou muito!
  1. Nenhum trackback ainda.

SEO Powered by Platinum SEO from Techblissonline