[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Integra��o com mySQL
From: |
nogueira_jr |
Subject: |
Integração com mySQL |
Date: |
Thu, 14 Jun 2007 15:12:07 -0300 |
Amigos:
Usando a experiência do Julio C. Neves e do canivete suiço do Aurélio.Net,
escrevi as seguintes rotinas (sujeitas a 100% de alteração por quem achar
necessário - mas postem aqui, porque quero aprender mais):
Arquivo (1): cria_sys.sh (cria um database TESTE usando o arquivo (2)
cria_sys.sql) Depois chama a rotina (3) cria_sys1.sh que vai criar a tabela
PRODUTOS e colocar alguns itens lá dentro.
Arquivo (4): destroi_sys.sh (que apaga as tabelas e o database criados no
arquivo acima)
Basico: Ter o mySQL instalado e com o ROOT definido.
Arquivo (1)-----------------------:
#!/bin/bash
clear
modo=t
read -p "Modo [g]ráfico ou modo [t]exto ? : " modo
[ "$modo" ] || modo=t
if [ $modo -ne "t" ]; then
modo=g
fi
echo ==================================================================
echo Sistema de implantação de banco de dados mySQL
echo ------------------------------------------------------------------
echo ================================================================== >
mc2_db.log
echo Sistema de implantação de banco de dados mySQL >> mc2_db.log
echo ------------------------------------------------------------------ >>
mc2_db.log
# ======================= variaveis pré-fixadas:
nome_root=root
nome_db=teste # DEVE ser alterado cfme sistema !!!
senha_root=
deu_erro=1 #0=nao 1=sim
# ...aqui outras
# ==============================================
while true; do
echo Somente o ROOT pode usar esta rotina.
echo
if [ $modo = "g" ]; then
nome_root=$( dialog --stdout --inputbox 'Digite seu nome:' 0 0 $nome_root
)
[ "$nome_root" ] || nome_root=root # verifica se não deu o nome
senha_root=$( dialog --stdout --title 'Senha de acesso' --insecure
\
--passwordbox 'Por favor, confirme a senha do root:' 0 0 )
else
read -p "Informe o nome do ROOT [ $nome_root ]: " nome_root
[ "$nome_root" ] || nome_root=root # verifica se não deu o nome
read -p "Senha do ROOT (não será mostrada na tela): " -s senha_root
[ "$senha_root" ] || break # verifica se não deu a senha
fi
# senha errada
mysql -u $nome_root -p$senha_root -e " " >> mc2_db.log
if [ $? -ne 0 ]; then
echo
echo ERRO de acesso ao mySQL [nome e/ou senha]
echo ERRO de acesso ao mySQL [nome e/ou senha] >> mc2_db.log
break
fi
clear
echo ==================================================================
echo Sistema de implantação de banco de dados mySQL
echo ------------------------------------------------------------------
if [ $modo = "g" ]; then #modo grafico
dialog \
--title 'INSTALANDO O SISTEMA' \
--msgbox 'Criando database principal' \
0 0
dialog \
--title 'INSTALANDO O SISTEMA' \
--msgbox 'Criando tabela: PRODUTOS' \
0 0
else #modo texto
echo INSTALANDO SISTEMA
echo Criando database principal $nome_db
mysql -u $nome_root -p$senha_root -e "create database if not exists
$nome_db;" >> mc2_db.log
# verificar retorno, se erro...
if [ $? -ne 0 ]; then
echo
echo ERRO na criação do database...
echo ERRO na criação do database... >> mc2_db.log
break
fi
# Agora chama mySQL usando arquivo de lote cria_sys.sql e gravando log em
mc2_db.log:
echo Criando as tabelas e preenchendo com conteúdo default...
echo " Tabela PRODUTOS (cria_sys1.sql)"
mysql -u $nome_root -p$senha_root $nome_db -t -vvv < cria_sys1.sql >>
mc2_db.log
if [ $? -ne 0 ]; then
echo
echo ERRO na criação da tabela PRODUTOS...
echo ERRO na criação da tabela PRODUTOS... >> mc2_db.log
break
fi
fi
deu_erro=0
break
done
echo
echo ==================================================================
echo ================================================================== >>
mc2_db.log
if [ $deu_erro -eq 1 ]; then
echo Processo de implantação NÃO encerrado corretamente!!!
echo " ==="
echo Verifique o arquivo de log: mc2_db.log
echo Processo de implantação NÃO encerrado corretamente!!! >> mc2_db.log
else
echo Processo de implantação encerrado corretamente. Parabens!!!
echo Processo de implantação encerrado corretamente. Parabens!!! >>
mc2_db.log
fi
echo Bye...
echo
Arquivo (2)-----------------------:
-- cria_sys.sql
-- rotina que cria todas as tabelas do banco de dados master (database) para
mySQL em modo batch
--
-- =============== cria as tabelas (se não existirem):
-- 1a: tabela produtos:
CREATE TABLE IF NOT EXISTS produtos (
codigo DOUBLE(13,0) UNSIGNED,
descricao VARCHAR(40),
estoque INTEGER UNSIGNED DEFAULT 0,
preco DECIMAL(10,2) DEFAULT 0.00,
PRIMARY KEY (codigo)
);
-- da direitos para um usuario: usernome, na tabela acima
-- GRANT select,insert,update,delete ON produtos TO 'usernome'@'localhost'
-- identified by 'usersenha';
-- FLUSH PRIVILEGES;
-- Se todas as tabelas começarem com um prefixo comum, pode-se dar
-- direitos globais:
-- GRANT select,insert,update,delete ON pref*.* TO 'usernome'@'localhost'
-- identified by 'usersenha';
-- FLUSH PRIVILEGES;
-- Outra opção (e melhor) é dar previlégios de acesso a um grupo:
-- GRANT select,insert,update,delete ON pref*.*|produtos TO GROUP meugrupo;
-- FLUSH PRIVILEGES;
-- 1b: preenche tabela produtos (IGNORE pula registros duplicados):
INSERT IGNORE INTO produtos VALUES
(1234567890123, "produtos certo", 100, 1.99),
(2345678901231, "produto errado", 110, 2.99),
(3456789012312, "produtos nao sei", 2100, 51.00),
(4567890123123, "produto ruim", 130, 2.00),
(5678901231234, "produtos bom", 1, 12.66),
(6789012312345, "produtos mais", 0, 41.00),
(7890123123456, "produtos menos", 710, 51.87),
(8901231234567, "produtos talvez", 330, 21.29),
(9012312345678, "produto oito", 830, 3821.00)
;
-- select codigo, descricao, estoque, LPAD(FORMAT(preco,2),20," ") AS
-- "preco de venda R$" from produtos;
-- 2a: proxima tabela:
-- 2b: dados desta tabela
Arquivo (3)-----------------------:
-- cria_sys1.sql
-- tabela produtos:
CREATE TABLE IF NOT EXISTS produtos (
codigo DOUBLE(13,0) UNSIGNED,
descricao VARCHAR(40),
estoque INTEGER UNSIGNED DEFAULT 0,
preco DECIMAL(10,2) DEFAULT 0.00,
PRIMARY KEY (codigo)
);
-- da direitos para um usuario: usernome, na tabela acima
-- GRANT select,insert,update,delete ON produtos TO 'usernome'@'localhost'
-- identified by 'usersenha';
-- FLUSH PRIVILEGES;
-- Se todas as tabelas começarem com um prefixo comum, pode-se dar
-- direitos globais:
-- GRANT select,insert,update,delete ON pref*.* TO 'usernome'@'localhost'
-- identified by 'usersenha';
-- FLUSH PRIVILEGES;
-- Outra opção (e melhor) é dar previlégios de acesso a um grupo:
-- GRANT select,insert,update,delete ON pref*.*|produtos TO GROUP meugrupo;
-- FLUSH PRIVILEGES;
-- 1b: preenche tabela produtos (IGNORE pula registros duplicados):
INSERT IGNORE INTO produtos VALUES
(1234567890123, "produtos certo", 100, 1.99),
(2345678901231, "produto errado", 110, 2.99),
(3456789012312, "produtos nao sei", 2100, 51.00),
(4567890123123, "produto ruim", 130, 2.00),
(5678901231234, "produtos bom", 1, 12.66),
(6789012312345, "produtos mais", 0, 41.00),
(7890123123456, "produtos menos", 710, 51.87),
(8901231234567, "produtos talvez", 330, 21.29),
(9012312345678, "produto oito", 830, 3821.00)
;
-- select codigo, descricao, estoque, LPAD(FORMAT(preco,2),20," ") AS
-- "preco de venda R$" from produtos;
-- Use cria_sys2.sql, cris_sys3.sql e assim em diante para as demais
tabelas.
Arquivo (4)-----------------------:
#!/bin/bash
clear
echo ==================================================================
echo Sistema de implantação de banco de dados mySQL
echo Rotina para destruir sistema implantado: database e tabelas
echo ------------------------------------------------------------------
echo ================================================================== >
mc2_db.log
echo Sistema de implantação de banco de dados mySQL >> mc2_db.log
echo Rotina para destruir sistema implantado: database e tabelas >>
mc2_db.log
echo ------------------------------------------------------------------ >>
mc2_db.log
# ======================= variaveis pré-fixadas:
nome_root=root
nome_db=teste # DEVE ser alterado cfme sistema !!!
senha_root=
deu_erro=1 #0=nao 1=sim
# ...aqui outras
# ==============================================
while true; do
echo Somente o ROOT pode usar esta rotina.
echo
read -p "Informe o nome do ROOT [ $nome_root ]: " nome_root
[ "$nome_root" ] || nome_root=root # verifica se não deu o nome
read -p "Senha do ROOT (não será mostrada na tela): " -s senha_root
[ "$senha_root" ] || break # verifica se não deu a senha
# senha errada
mysql -u $nome_root -p$senha_root -e " " >> mc2_db.log
if [ $? -ne 0 ]; then
echo
echo ERRO de acesso ao mySQL [nome e/ou senha]
echo ERRO de acesso ao mySQL [nome e/ou senha] >> mc2_db.log
break
fi
clear
echo ==================================================================
echo Sistema de implantação de banco de dados mySQL
echo Rotina para destruir sistema implantado: database e tabelas
echo ------------------------------------------------------------------
echo DESTRUINDO SISTEMA
mysql -u $nome_root -p$senha_root $nome_db -vvv -e "USE $nome_db;" >>
mc2_db.log
if [ $? -ne 0 ]; then
echo
echo ERRO de abertura do database $nome_db...
echo ERRO de abertura do database $nome_db... >> mc2_db.log
break
fi
echo
echo Apagando tabela PRODUTOS
mysql -u $nome_root -p$senha_root $nome_db -vvv -e "DROP TABLE produtos;"
>> mc2_db.log
if [ $? -ne 0 ]; then
echo
echo ERRO na destruição da tabela PRODUTOS...
echo ERRO na destruição da tabela PRODUTOS... >> mc2_db.log
break
fi
# outras tables aqui
echo Apagando database principal $nome_db
mysql -u $nome_root -p$senha_root $nome_db -vvv -e "DROP DATABASE
$nome_db;" >> mc2_db.log
# verificar retorno, se erro...
if [ $? -ne 0 ]; then
echo
echo ERRO na destruição do database...
echo ERRO na destruição do database... >> mc2_db.log
break
fi
deu_erro=0
break
done
echo
echo ==================================================================
echo ================================================================== >>
mc2_db.log
if [ $deu_erro -eq 1 ]; then
echo Processo de destruição NÃO encerrado corretamente!!!
echo " ==="
echo Verifique o arquivo de log: mc2_db.log
echo Processo de destruição NÃO encerrado corretamente!!! >> mc2_db.log
else
echo Processo de destruição encerrado corretamente. Parabens!!!
echo Processo de destruição encerrado corretamente. Parabens!!! >>
mc2_db.log
fi
echo Bye...
echo
======================================= fim
Espero ter ajudado e agradeço publicamente ao Júlio e Aurelio.net pelas
lições!!!
Aguardo crÃticas e sujestões.
Nogueira
address@hidden
PS: Estou terminando as mesmas rotinas para SQLite3 !!!
[As partes desta mensagem que não continham texto foram removidas]
- Integração com mySQL,
nogueira_jr <=