{"id":52,"date":"2010-12-16T16:07:00","date_gmt":"2010-12-16T16:07:00","guid":{"rendered":"http:\/\/artigos.marcomapa.com\/?p=52"},"modified":"2011-09-11T19:23:43","modified_gmt":"2011-09-11T19:23:43","slug":"script-simples-para-backup-de-servidores-web","status":"publish","type":"post","link":"https:\/\/marcomapa.com\/artigos\/script-simples-para-backup-de-servidores-web\/","title":{"rendered":"Script simples para backup de servidores web"},"content":{"rendered":"<p>A forma mais simples de fazer backup das bases de dados do MySQL \u00e9 simplesmente salvar o conte\u00fado da pasta \"\/var\/lib\/mysql\", criando um arquivo .tar.gz ou mesmo copiando os arquivos diretamente para outra parti\u00e7\u00e3o. O maior problema \u00e9 que as bases de dados s\u00e3o alteradas continuamente durante a opera\u00e7\u00e3o do banco de dados, o que leva a c\u00f3pias inconsistentes. Se alguns dos arquivos dentro da pasta com a base mudam no meio da c\u00f3pia, o backup conter\u00e1 uma mistura de dados novos e antigos, uma receita para o desastre.<\/p>\n<p>A forma mais segura \u00e9 parar o servi\u00e7o do MySQL antes de fazer o backup, garantindo assim que nada ser\u00e1 alterado durante a c\u00f3pia, como no exemplo abaixo:<\/p>\n<p># \/etc\/init.d\/mysql stop<\/p>\n<p># tar -zcvf mysql.tar.gz \/var\/lib\/mysql\/<\/p>\n<p># \/etc\/init.d\/mysql start<\/p>\n<p>Um exemplo de script de backup simples para fazer um backup completo dos arquivos da pasta \"\/var\/www\", contendo os arquivos de todos os sites hospedados no servidor e tamb\u00e9m da base de dados do MySQL, incluindo as datas em que os backups foram realizados nos nomes dos arquivos seria:<\/p>\n<p>#!\/bin\/sh<\/p>\n<p># Acessa a pasta onde os backups ser\u00e3o salvos<\/p>\n<p>cd \/var\/backup<\/p>\n<p># Cria uma vari\u00e1vel contendo a data atual<\/p>\n<p>DATA=`date +%Y-%m-%d-%H.%M`<\/p>\n<p># Faz backup da pasta \/var\/www<\/p>\n<p>tar -zcvf www-$DATA.tar.gz \/var\/www<\/p>\n<p># Para o MySQL e faz backup das bases de dados<\/p>\n<p>\/etc\/init.d\/mysql stop<\/p>\n<p>tar -zcvf mysql-$DATA.tar.gz \/var\/lib\/mysql<\/p>\n<p>\/etc\/init.d\/mysql start<\/p>\n<p>Ao executar o script, voc\u00ea teria dois arquivos, como em \"www-2008-06-27-07.21.tar.gz\" e \"mysql-2008-06-27-07.21.tar.gz\". Veja que a data inclu\u00edda nos nomes dos arquivos propositalmente cont\u00e9m (al\u00e9m da data) tamb\u00e9m a hora e os minutos em que foram gerados, de forma que voc\u00ea saiba exatamente quando os arquivos foram gerados e obtenha sempre arquivos de nomes diferentes, mesmo que o script seja executado v\u00e1rias vezes em sequ\u00eancia.<\/p>\n<p>Para automatizar a execu\u00e7\u00e3o do script, voc\u00ea pode adicionar uma entrada no arquivo \"\/etc\/crontab\", como em:<\/p>\n<p>59 4 * * * root \/usr\/local\/bin\/script-backup<\/p>\n<p>Esta entrada faria com que o script fosse executado todos os dias \u00e0s 4:59 da manh\u00e3, sempre gerando dois novos arquivos com a data de quando foram executados. Com isso, ficaria faltando apenas copiar ou mover os arquivos regularmente para outro servidor, onde eles forem ficar arquivados.<\/p>\n<p>A limita\u00e7\u00e3o deste script \u00e9 que ele desativa temporariamente o servidor MySQL, causando alguns segundos (ou minutos) de downtime. \u00c9 poss\u00edvel fazer um backup online, sem parar o servidor usando o mysqldump, mas isso j\u00e1 \u00e9 tema para outro post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A forma mais simples de fazer backup das bases de dados do MySQL \u00e9 simplesmente salvar o conte\u00fado da pasta<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,8,5],"tags":[],"class_list":["post-52","post","type-post","status-publish","format-standard","hentry","category-hardware","category-linux","category-web"],"_links":{"self":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/52","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":1,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"predecessor-version":[{"id":121,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/posts\/52\/revisions\/121"}],"wp:attachment":[{"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcomapa.com\/artigos\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}