Como criar um arquivo executável para atualizar o banco de dados mysql?

3

Eu tenho um servidor Ubuntu que hospeda meu aplicativo da web.

Mas devido a alguns motivos de segurança, não é visível pela Internet. O cliente precisa atualizar o banco de dados e atualizar alguns valores nele, mas, devido às mesmas razões de segurança, eu não tenho mais permissão, então eles me pediram para criar um arquivo executável (como arquivos em lote no Windows) que atualizará o banco de dados manualmente. às autoridades e explique-as a elas para que possam atualizar o banco de dados.

Digamos que eu tenha um banco de dados chamado myDb com um usuário dizer myUser e myPassword , e eu preciso executar esta consulta:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';

Como posso fazer isso?

    
por MoienGK 20.06.2014 / 08:34

2 respostas

6

Criando um script de comando

Se o script que você tem que criar é apenas para ser executado como está pelas pessoas que têm acesso ao servidor e se os dados a serem colocados no banco de dados são entregues a você (então nada dinâmico), você teria que fazer um script bash como este:

#!/bin/bash

if [ "x$1" == "x" ]; then
   echo "Usage: $0 <SQL commands file>"
   exit 1
fi

if [ ! -f "$1" ]; then
   echo "The file specified in parameter ($1) does not exist or is not readable"
   exit 2
fi

USER=myUser
PASS=myPassword
DB=myDB
SERVER=ipMysql

mysql -u$USER -p$PASS -h$ipMysql $DB < $1    

Copie todos os itens acima em um arquivo de teste que você pode chamar dataUpload.sh e torne-o executável: sudo chmod +x dataUpload.sh .

O que esse script faz?

  1. Verifique se você fornece um parâmetro obrigatório: o caminho para um arquivo de texto contendo o comando SQL para atualizar os dados no banco de dados (veja abaixo)
  2. Verifique se o arquivo fornecido no parâmetro está acessível pelo script
  3. Defina alguma variável com a credencial para conectar-se ao banco de dados (atenção de que essa é uma abordagem rápida que não leva em consideração algum aspecto de segurança: por exemplo, a senha será visível em texto não criptografado no script e na lista de processos - ps -ef ou ps auxwww quando o script for executado. Você pode procurar uma abordagem mais segura)
  4. Carregue os comandos SQL do arquivo SQL no banco de dados usando a linha de comando mysql client.

Um arquivo de comando SQL

Este arquivo de comando SQL é apenas um arquivo de texto contendo todo o comando SQL para INSERT ou UPDATE data que você teria feito se pudesse acessar o servidor. Um comando por linha, como neste exemplo:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
UPDATE myDb.member SET member_credutDueDate='2025-10-11 00:00:00';

e assim por diante.

Se você escrever um arquivo, digamos, chamado 20140620_dbupdate.sql , a pessoa que tiver acesso ao banco de dados só terá que executar dataUpload.sh 20140620_dbupdate.sql no prompt da linha de comando.

Ao dividir os comandos shell e SQL, você pode:

  1. teste facilmente a lógica que carrega dados no banco de dados
  2. passar apenas uma vez o script executável
  3. para atualização posterior, concentre-se apenas na criação de um arquivo de comandos SQL

Mais a fazer

Esta é uma primeira abordagem rápida para resolver o seu problema, para ser exaustivo eu precisaria cobrir:

  • Protegendo a senha
  • Fazendo uso de transações SQL
  • Mais detecção de erros e relatórios no script
por Benoit 20.06.2014 / 09:58
0

Você já tentou o script de shell para isso é o mesmo que o script em lote no Windows (mas mais poderoso)

    
por Gtr_py 20.06.2014 / 09:23