Differences

This shows you the differences between two versions of the page.

Link to this comparison view

backup_banco_de_dados_mysql_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Script para efetuar o backup do banco MySQL  ======
  
 +E ai galera, aqui segue um script para efetuar o dump do banco de dados <​nowiki>​MySQL</​nowiki>​.
 +
 +Caso for efetuar o backup de um servidor para outro tem que acertar a configuração do my.cnf da seguinte forma
 +<sxh apache>
 +vim /​etc/​mysql/​my.cnf
 +[...]
 +bind-address ​           = 0.0.0.0
 +</​sxh>​
 +
 +Agora precisamos dar acesso para o usuário que vai efetuar o backup no banco vou utilizar o exemplo para o usuário root
 +<sxh sql>
 +mysql -u root -p
 +GRANT ALL PRIVILEGES ON *.* TO root@'​%'​ IDENTIFIED BY '​S3NH4'​ WITH GRANT OPTION;
 +</​sxh>​
 +
 +Agora vamos a criação do nosso script de backup
 +<sxh bash>
 +vim /​usr/​src/​exporta_mysql.sh
 +#!/bin/bash
 +#
 +# exporta_mysql
 +#
 +# Script para realizar a exportação de bases de dados MySQL
 +# A exportação é feita base a base da estrutura e depois dos dados
 +#
 +# Autor : Douglas Q. dos Santos <​douglas.q.santos@gmail.com>​
 +# Manutenção:​ Douglas Q. dos Santos <​douglas.q.santos@gmail.com>​
 +#
 +#
 +#​----------------------------------------------------------------------
 +
 +# Este programa faz a configuração dos repositórios,​ chaves dos repositórios,​
 +# instala um conjunto básico de aplicativos necessários para a operação de um
 +# servidor utilizando o sitema Debian GNU/​Linux ​
 +#
 +# Exeplos: ​
 +#       $ ./​exporta_mysql.sh
 +# Após executar o script vai fazer uma seleção das bases de dados do Servidor
 +# vai armazenar em um arquivo e vai efetuar o backup das estruturas e depois
 +# vai efetuar o backup dos dados dos bancos e esses dados vão ser armazenados ​
 +# em uma estrutura com o sql das estruturas e o logs e um com o sql dos dados
 +# e os logs, após o processo finalizado é verificado quais logs estão vazios ​
 +# e são excluídos com isso garantimos que temos somente os logs com algum possível
 +# erro.
 +# nos temos a seguinte situação for END in $(cat ${BASES} | grep bancodedados)
 +# nessa situação efetuariamos a exportação de somente um determinado banco de dados
 +# caso contrário temos a seguinte situação: for END in $(cat ${BASES})
 +# nessa situação vamos exportar todos os bancos de dados.
 +# a primeira situação esta comentada por padrão.
 +#
 +#​---------------------------------------------------------------------
 +#
 +#
 +# Histórico:
 +# v1.0 2011-04-14, Douglas Q. dos Santos:
 +#       - Versão inicial
 +# Licença: http://​creativecommons.org/​licenses/​by-sa/​3.0/​legalcode
 +#​---------------------------------------------------------------------
 +clear
 +############​VALIDANDO O USUARIO QUE EXECUTANDO O SCRIPT##############################​
 +USU=$(whoami)
 +
 +if [ "​${USU}"​ != root ]; then
 +  echo -e
 +  echo -e "​=============================================================================="​
 +  echo -e " ESTE PROGRAMA PRECISA SER EXECUTADO COM PERMISSOES DE SUPERUSUARIO!"​
 +  echo -e " Abortando..."​
 +  echo -e "​=============================================================================="​
 +  echo -e
 +  exit 1
 +fi
 +
 +GREY="​\033[01;​30m"​
 +RED="​\033[01;​31m"​
 +GREEN="​\033[01;​32m"​
 +YELLOW="​\033[01;​33m"​
 +BLUE="​\033[01;​34m"​
 +PURPLE="​\033[01;​35m"​
 +CYAN="​\033[01;​36m"​
 +WHITE="​\033[01;​37m"​
 +CLOSE="​\033[m"​
 +
 +echo -e  "​${RED}####################################################################​${CLOSE}"​
 +echo -e "​${RED}#​ Este script estara trabalhando com o seguinte processo ${GREEN} $$ ${CLOSE} ​  ​${CLOSE}"​
 +echo -e  "​${RED}####################################################################​${CLOSE}"​
 +
 +sleep 3
 +
 +### COMANDOS USADOS NO SCRIPT ###
 +MYSQL=$(which mysql)
 +MYSQLDUMP=$(which mysqldump)
 +MKDIR=$(which mkdir)
 +GREP=$(which grep)
 +FIND=$(which find)
 +RM=$(which rm)
 +
 +### ARQUIVOS UTILIZADOS NO SCRIPT ###
 +BASES="/​srv/​dump/​bases"​
 +PERMISSOES="/​srv/​dump/​permissoes.sql"​
 +
 +### SENHAS DO USUARIO ROOT DO BANCO ###
 +SENHA="​S4NH4"​
 +
 +### IP DO SERVIDOR DE BANCO DE DADOS ###
 +SRV_BANCO="​10.101.0.26"​
 +
 +### DIRETORIOS USADOS NO SCRIPT ###
 +ESTRUTURA_BANCOS="/​srv/​dump/​bancos/​estrutura"​
 +DADOS_BANCOS="/​srv/​dump/​bancos/​dados"​
 +LOGS_ESTRUTURA="/​srv/​dump/​logs/​estrutura"​
 +LOGS_DADOS="/​srv/​dump/​logs/​dados"​
 +
 +### VALIDA OS DIRETORIO NECESSARIOS ###
 +if [ ! -d ${ESTRUTURA_BANCOS} ];then
 +  ${MKDIR} -p ${ESTRUTURA_BANCOS} 2> /dev/null
 +fi
 +
 +if [ ! -d ${LOGS_ESTRUTURA} ];then
 +  ${MKDIR} -p ${LOGS_ESTRUTURA} 2> /dev/null
 +fi
 +
 +if [ ! -d ${DADOS_BANCOS} ];then
 +  ${MKDIR} -p ${DADOS_BANCOS} 2> /dev/null
 +fi
 +
 +if [ ! -d ${LOGS_DADOS} ];then
 +  ${MKDIR} -p ${LOGS_DADOS} 2> /dev/null
 +fi
 +
 +### FAZ A RELACAO DAS TABELAS DO BANCO E ARMAZENA NO ARQUIVO ${BASES} ###
 +echo -e "​${GREEN} FAZENDO RELACÃO DAS TABELAS DO BANCO DE DADOS${CLOSE}"​
 +sleep 3
 +${MYSQL} -u root -p${SENHA} -h ${SRV_BANCO} -e "​SELECT schema_name from information_schema.schemata"​ --column-names=FALSE | ${GREP} -v information_schema > ${BASES}
 +
 +### FAZ DUMP DOS USUARIOS E SUAS SENHAS E FAZ DUMP DAS PERMISSOES DOS USUARIOS NAS TABELAS
 +#echo -e "​${GREEN} FAZENDO DUMP DOS USUARIOS,​SENHAS E SUAS PEMISSOES NAS TABELAS ${CLOSE}"​
 +#sleep 3
 +#​${MYSQLDUMP} -u root -p${SENHA} -h ${SRV_BANCO} mysql user db > ${PERMISSOES}
 +
 +
 +### FAZ O DUMP DAS TABELAS RELACIONADAS NO ARQUIVO ${BASES} ###
 +echo -e "​${GREEN} FAZ DUMP DAS TABELAS RELACIONADAS ANTERIORMENTE${CLOSE}"​
 +#for END in $(cat ${BASES} | grep bancodedados)
 +for END in $(cat ${BASES})
 +do
 +### DUMP DA ESTRUTURA ###
 +echo -e "​${GREEN} DUMP DA ESTRUTURA DO BANCO ${RED} ${END} ${CLOSE} ${CLOSE}"​
 +sleep 2
 +${MYSQLDUMP} -u root -p${SENHA} -h ${SRV_BANCO} -B ${END} -R -d -v --add-drop-database=TRUE --trigger=FALSE > ${ESTRUTURA_BANCOS}/​${END}_estrutura.sql 2> ${LOGS_ESTRUTURA}/​${END}.error
 +
 +### DUMP DOS DADOS ###
 +echo -e "​${GREEN} DUMP DOS DADOS DO BANCO ${RED} ${END} ${CLOSE} ${CLOSE}"​
 +sleep 2
 +${MYSQLDUMP} -u root -p${SENHA} -h ${SRV_BANCO} -B ${END} -R -c -t -e -v -K > ${DADOS_BANCOS}/​${END}_dados.sql 2> ${LOGS_DADOS}/​${END}.error
 +
 +### DUMP FULL DE TODOS OS BANCOS ###
 +#​${MYSQLDUMP} -u root -p${SENHA} -B ${END} -R -c -t -e -v --add-drop-database=TRUE ​ > ${DADOS_BANCOS}/​${END}_all.sql 2> ${LOGS_DADOS}/​${END}.error
 +done
 +
 +### REMOVE OS ARQUIVOS DE LOGS VAZIOS ###
 +echo -e "​${GREEN} REMOVENDO ARQUIVOS DE LOGS VAZIOS ${CLOSE}"​
 +sleep 2
 +${FIND} ${LOGS_ESTRUTURA} -empty -exec ${RM} -rf {} \;
 +${FIND} ${LOGS_DADOS} -empty -exec ${RM} -rf {} \;
 +
 +echo -e "​${GREEN} EXPORTAÇÃO FINALIZADA, VERIFIQUE OS ARQUIVOS DE LOGS ${CLOSE}"​
 +</​sxh>​
 +
 +Agora é só dar permissão no script
 +<sxh bash>
 +chmod +x exporta_mysql.sh
 +</​sxh>​
 +
 +Agora vamos rodar ele
 +<sxh bash>
 +/​usr/​src/​exporta_mysql.sh ​
 +####################################################################​
 +# Este script estara trabalhando com o seguinte processo ​ 15291    ​
 +####################################################################​
 + ​FAZENDO RELACÃO DAS TABELAS DO BANCO DE DADOS
 + FAZ DUMP DAS TABELAS RELACIONADAS ANTERIORMENTE
 + DUMP DA ESTRUTURA DO BANCO  mail  ​
 + DUMP DOS DADOS DO BANCO  mail  ​
 + DUMP DA ESTRUTURA DO BANCO  mysql  ​
 + DUMP DOS DADOS DO BANCO  mysql  ​
 + DUMP DA ESTRUTURA DO BANCO  roundcubemail  ​
 + DUMP DOS DADOS DO BANCO  roundcubemail  ​
 + DUMP DA ESTRUTURA DO BANCO  webmail2  ​
 + DUMP DOS DADOS DO BANCO  webmail2  ​
 + ​REMOVENDO ARQUIVOS DE LOGS VAZIOS ​
 + ​EXPORTAÇÃO FINALIZADA, VERIFIQUE OS ARQUIVOS DE LOGS 
 +</​sxh>​