Deseja um arquivo separado para armazenar o nome de usuário, a senha e o nome do banco de dados do mysql

2

Eu tenho um script que copia um banco de dados MySQL e compacta o arquivo. O que eu quero fazer é ter outro (editar) arquivo que pode alterar o nome de usuário, senha e nome do banco de dados. Então, de alguma forma, conectando esse arquivo a este script.

Em outro arquivo, quero algo que diz, por exemplo.

username =  "username"
password = "password"
database = c2duo_db

Depois, em um nome de script mysqlbackup.sh , alguns importam o nome de usuário e o banco de dados do arquivo.

#!/bin/sh

mysqldump -u"username" -p"password" --opt c2duo_db > /home/sh/c2duo_db-'date +%d%m%Y'.sql

cd /home/sh
tar -zcvf c2duo_db-'date +%d%m%Y'.tar.gz  *.sql
    
por Shehzad009 25.07.2011 / 12:20

2 respostas

5

Você pode fazer isso facilmente usando o comando source para importar o conteúdo de outro arquivo para o ambiente shell atual (no seu caso, seu script) e executá-lo lá.

Em db.conf :

username="username"
password="password"
database="database"

No seu script:

#!/bin/sh

source /path/to/db.conf
cd /home/sh
dumpfile_name=$database-$(date +%d%m%Y).sql

mysqldump -u"$username" -p"$password" --opt "$database" > $dumpfile_name
gzip $dumpfile_name

Notas:

  • Você nunca deve colocar um espaço após o operador de atribuição = ao atribuir variáveis de shell!
  • Eu fiz algumas coisas para limpar seu código. Eu não adicionei o novo despejo a um único arquivo tar como você estava fazendo. Eu mostrei como você pode compactar um arquivo individual. Se você quisesse usar o tar para que eles estivessem todos em um único arquivo, você pode fazer isso também, mas eu acho que ter arquivos de dump comprimidos individuais é bastante útil.
  • Mudei a operação cd para antes do comando mysqldump para que você não precise especificar o caminho para o arquivo de saída, pois esse é o diretório atual. Apenas salva código duplicado.

Editar: Mesmo com essa etapa concluída, parece que esta é uma solução incompleta para mim. Você pode estar interessado em como você pode passar valores usando argumentos. Por exemplo, você pode pegar o caminho codificado do arquivo de configuração do script acima e substituí-lo por:

#!/bin/sh

source "$1"
cd /home/sh
[...] # rest of script as above

Você poderia, então, executá-lo como ./mysqlbackup.sh /path/to/db.conf . Você pode até dar um passo adiante e escrever tudo em um script e fornecer todos os três valores como argumentos:

#!/bin/sh

username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above

... e chame como ./mysqlbackup.sh username password database .

    
por 25.07.2011 / 12:27
0

Você pode alterar o primeiro arquivo para:

s/username/joe/
s/password/secret/
s/database/c2duo_db/g

armazene-o como db.sed e chame-o com

sed -f db.sed mysqlbackup.sh > joeSqlbackup.sh

Para usuários / senhas e bancos de dados diferentes, você geraria scripts sed diferentes.

    
por 26.07.2011 / 02:41