No universo de bancos de dados em nuvem, a necessidade de restaurar backups pode surgir devido a várias razões: um erro humano, falha em algum sistema ou até mesmo para criar um ambiente de teste. Independentemente do motivo, ter uma ferramenta que simplifique esse processo é essencial.
Apesar do Google Cloud Platform (GCP) oferecer uma solução robusta e escalável com o Cloud SQL, a restauração de backups pode ser um processo que exige múltiplos passos e certa familiaridade com a plataforma. Foi pensando nisso que desenvolvi o GCP Restore Tool.
Por Que Usar o GCP Restore Tool?
A ferramenta foi projetada com o objetivo de tornar o processo de restauração mais amigável e menos propenso a erros. Com uma interface gráfica intuitiva, você pode selecionar projetos, instâncias e o backup desejado para restaurar com apenas alguns cliques.
A maior vantagem? Você não precisa ser um expert em GCP ou lidar com comandos complexos. A ferramenta cuida de tudo para você.
Você será redirecionado para a tela de autenticação do console da GCP, faça a autenticação.
Olhe no terminal e ele terá retornado com algumas informações sobre a localização do arquivo
“application_default_credentials.json”
Esse arquivo é o que você deve carregar pelo botão “Load GCP Credentials”
Na seleção à esquerda, selecione o projeto e a instância de origem nos menus dropdown correspondentes.
Clique no botão “Load Backups” e a ferramenta irá listar todos os backups disponíveis para a instância escolhida.
Na seção à direita, selecione o projeto e a instância onde deseja restaurar o backup.
Após confirmar sua seleção, clique no botão “Restore”. A ferramenta fará todo o trabalho pesado para você, garantindo que o backup selecionado seja restaurado na instância de destino escolhida.
Este processo só funciona sobrescrevendo uma instância pré-existente, logo, você precisa criar uma instância no projeto de destino ou entender que esta atividade vai sobrescrever a instância de destino, tenha certeza de ter selecionado a instância certa.
Se tudo der certo, você vai receber uma mensagem que o processo foi enviado para a GCP, todo o processo ocorre em background pela GCP, então acompanhe pelo portal para saber o status da atividade.
No final, a instância restaurada vai ter o nome, IP, etc da instância que ela sobrescreveu, mas todos os usuários, senhas, bancos, ajustes pontuais, etc. da instância original.
Você pode baixar e acessar o código fonte no GitHub.
ATENÇÃO !!!
A ferramenta está em testes, então faça testes antes de executar a operação em produção.
Existem cenários que você precisa entender o que está acontecendo no ambiente, na sua aplicação, no SO, reiniciar a máquina e perder o que está acontecendo não é uma opção.
Se a aplicação é consistente na geração de Logs, ou o Windows consegue manter os logs de um problema enquanto a maquina está “travada” já ajuda consideravelmente, mas existem cenários que infelizmente tudo para de uma tal forma que infelizmente só um reboot salva, mas vc vai perder a rastreabilidade do problema.
Para situações como essa, alguns servidores possuem bem próximo ao botão de liga/desliga um outro botão de interrupção do SO onde força o despejo de memória através de uma Tela Azul da Morte para o arquivo de dump para uma análise posterior do ocorrido (verificar o manual do seu fabricante).
Para outros cenários, principalmente quando você não tem acesso ao servidor físico, existe a opção de adicionar duas chaves de registro que vão gerar esse BSOD no seu Windows (Cliente ou Servidor).
Windows Registry Editor Version 5.00
; For PS/2 keyboards
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"CrashOnCtrlScroll"=dword:00000001
; For USB keyoards
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters]
"CrashOnCtrlScroll"=dword:00000001
Adicionadas estas chaves, reinicie o seu Windows.
Pressionando CTRL + 2x Scroll Lock o Windows vai iniciar o processo da Tela Azul.
Atenção !!!
Existem outras configurações necessárias para que isso funcione direito e você tenha o que analisar !
Espaço em disco (Normalmente ninguém se preocupa onde está o Page File nem mesmo a configuração do Dump)
Configuração do Dump (Se você nunca mexeu ele é Full RAM e vai gerar o arquivo na unidade C)
Mais espaço em Disco (A geração do arquivo de Dump vem com a memória RAM e o conteúdo do PF, no final do processo o Windows gera um PF novo)
Tempo (é totalmente variável já que trata-se de toda a memória da maquina sendo armazenada em um arquivo, quanto mais RAM usada maior é o arquivo)
Se você conseguir gerar um dump bem sucedido, vai conseguiu analisar com o WinDBG.
Cache-Control é um cabeçalho HTTP que consiste em um conjunto de configurações que permite com que você especifique como, quando e por quanto tempo um um cache acontecerá.
Quando você visita um website, seu browser copia partes dos componentes desse website para um diretório para que experiência seja mais rápida. Quando você revisita esse site muitas partes do site não são carregadas do servidor web, mas sim do cache que está na sua maquinas, você pode usar o Cache-Control para definir as regas de como esses conteúdo será carregado, como por quanto tempo o browser pode fazer cache, se ele vai fazer cache de algum componente ou algum tipo de arquivo específico.
É importante entender que cache é muito bom para a experiência do usuário final, fazê-lo ter que ir até seu servidor web para todas as requisições pode fazer a experiência com seu produto ser desagradável, mas é muito mais importante você entender o que realmente pode ficar na máquina do usuário e o que deve ser carregado dinamicamente desconsiderando o lado do usuário, afinal, dependendo do seu tipo de conteúdo, uma página mau configurada, um componente mau testado, ou um chat-bot onde precisa existir uma comunicação mais dinâmica pode ser impactado.
Cache-Control: no-cache
no-cache significa que o recurso não pode ser reutilizado sem primeiro ser checado se ele foi alterado ou atualizado em sua origem. Usualmente um cabeçalho ETag é usado para isso.
Cache-Control: no-store
no-store é similar ao no-cache onde o conteúdo não pode ser reutilizado nem cacheado. Entretanto, diferente da outra opção o no-store força que todo o conteúdo seja baixado novamente da fonte, desconsiderando a ETag.
Cache-Control: public
Uma resposta contendo public significa que está autorizado que o cache seja feito por qualquer parte envolvida, não apenas o cliente final, neste caso estamos falando de caches intermediários como proxys, gateways, CDN’s, etc.. Para essa situação é recomendado que seja adicionado o max-age afim de garantir que em algum momento o cache tando to usuário final quanto do intermediário sejam limpos.
Cache-Control: private
A opção private significa que apenas o browser do solicitante pode fazer cache do conteúdo, e os intermediários não devem fazer cache do conteúdo.
Cache-Control: max-age=<seconds>
Esta opção indica ao browser por quanto tempo ele deve considerar o conteúdo daquele cache como passível de utilização, após o termino desse tempo novas requisições devem recarregar todo o conteúdo.
Cache-Control: s-maxage=<seconds>
s-maxage é similar ao max-age. O “s” significa shared e é relevante apenas para os CDNs ou outro cache intermediário. Esta opção sobrescreve o max-age e expires.
Cache-Control: no-transform
Caches intermediários podem, as vezes, alterar o formato ou compressão das imagens para melhorar a performance. O no-transform diz aos intermediários para que não alterem o formato das imagens.
Exemplos de implementação:
Web Pages (HTML)
Para as páginas WEB (HTML) adicione as seguintes tags <meta> nas páginas que você quer que o controle de cache seja diferente do browser (lembrando que o código precisa estar na sessão <head> da página):
Para começar essa pequena maratona nada melhor que começar pelo básico.
Vamos registrar um domínio !
Já imagino que você tem alguma coisa em mente… mas antes, vamos para o básico.
Para que serve um domínio?
Um domínio serve para várias coisas, a principal é um endereço humanamente entendível que auxilia pessoas e outros serviços de computador a chegarem em algum lugar/serviço para ter a resposta de alguma coisa, simples assim,,,,
Em outras palavras, é pra ajudar e personalizar a forma com que vão chegar no seu site, ou para você mandar aquele email com um @ diferente dos gratuitos,,, ao invés de decorar um IP para conseguir acessar algum site ou serviço você usa a resolução de nome para ficar mais fácil,,,, Ex. como você chegou aqui? andando? decorando o IP do servidor desse site? você chegou porque digitou https://www.leka.com.br
Claro que tem uma explicação bem mais técnica do que isso, mas se você chegou até aqui provavelmente não quer saber.
Onde registro um domínio?
Legal, já entendi pra que serve e quero muito ter um domínio,,, mas como fazer?
Primeira coisa é saber se você quer um domínio com o final .br ou não, isso faz uma grande diferença.
Domínios com final .br são administrados pela Registro.br (registro.br), é a entidade governamental responsável pelo registrar (sistema de registros de nomes de domínios, IP, rotas de tráfego, etc.)
Cada país tem direito de registrar o final junto a ICANN e tem seus devidos processos legais que devem ser seguidos para registrar algum domínio com um final diferente como .ca (Canadá) .uk (Inglaterra)
Para domínios .com existem algumas entidades que a câmara de comércio americana homologou para fazer esse tipo de serviço, Ex. Godaddy, Domain.com, etc.,
No Brasil os preços são fixos não importando o domínio. (a título de curiosidade em 09/22 o valor é de R$40/ano)
Fora daqui, ai o valor varia muito dependendo do quanto nobre é o domínio, podendo variar de alguns dólares a milhares ou milhões de dólares)
Para ficar simples vamos usar a Registro.br, simples, nacional e da pra pagar no cartão de crédito.
Como registro um domínio?
Agora que já sabemos onde registra um domínio, vamos para a parte de como registrar um domínio.
O registro de um domínio pode ser feito por uma pessoa física ou jurídica, para a maioria dos domínios .br, salvo os .org.br, .ong.br, puro .br, .b.br,,, (tá tem uma lista dos que você ou não pode registrar) é um processo bem simples.
Para começar você precisa criar uma Entidade (basicamente registrar uma conta), essa conta vai gerenciar as informações de cobrança, serviço de DNS, ser o contato caso o pessoal da Registro.br tenha que falar com você.
Você vai poder delegar partes da administração do domínio para outras Entidades, por exemplo, cobrança uma pessoa específica pra pagar a conta, técnico outra pessoa responsável para administrar o DNS.
Atenção: Se pedir ajuda de alguém, peça para usar seus dados para criar a conta e registrar o domínio, pois no BR a troca de entidades mantenedoras de domínio é extremamente burrocrático !
Criando a conta:
Para criar a conta clique em “ACESSAR CONTA“
Ele vai para uma tela de acesso a uma conta já existente, olha mais em baixo e tem um link para “CRIAR CONTA”
Vai aparecer um formulário para ser preenchido, obviamente preencha-o com cuidado e preste muita atenção ao email e a senha que você vai usar.
Após clicar em “CRIAR CONTA” você vai receber um email para ativar sua conta, veja que em nenhum momento escolheu um usuário apenas digitou a senha, a conta de usuário é gerada pelo sistema da Registro.br.
ATENÇÃO !!! NÃO ESQUEÇA ESSE USUÁRIO E SENHA !!! ele é importante para registrar seu domínio e pagar a anuidade !!!
Depois que você criou sua conta e entrou no sistema da Registro.br
Agora basicamente é saber se sua criatividade é boa e se você teve a sorte de ser a primeira pessoa a pensar o nome que quer.
Clique em “REGISTRE”
Vai aparecer aquela mesma tela inicia do site deles, onde agora você vai pesquisar pelo domínio que quer registrar.
Caso o domínio que você quiser já tenha dono vai aparecer assim:
Não adianta chorar,,, o primeiro que chega é o primeiro que se serve…
Se você achar um domínio que te interesse e que esteja disponível ele vai aparecer assim:
Você pode registrar quantos domínios quiser, tudo depende do limite do seu cartão de crédito.
Clicando em “REGISTRAR” ele vai para uma segunda onde você vai preencher novamente algumas informações, com o CPF ou CNPJ de quem vai ser o dono desse domínio. Na tela seguinte ele vai trazer algumas informações sobre o cadastro da pessoa que você forneceu o dado na tela anterior e bem lá em baixo tem a caixa de ler e aceitar os itens do contrato e clicar em “REGISTRAR”
Nesse momento o sistema vai fazer algumas checagens sobre o registro do domínio, espere um email com um link para clicar e executar o pagamento, a tela é bem simples e prática, não tem o que dar errado,,, teoricamente,,,, presta atenção pra não fazer merd* !!!
Acabou
Basicamente é isso, você criou uma conta na Registro.br e registrou seu primeiro domínio, parabéns !!!
No próximo post vamos hospedar seu domínio em um servidor de DNS para poder começar a usar ele de verdade, pois nesse momento ele não serve de nada…
Algumas vezes as pessoas me perguntam como eu fiz para registrar meu domínio, onde hospedo o site, como fiz para criar o blog, se é difícil de manter, quanto custa, etc., etc., etc.
Vou dar início a um conjunto de posts para te ajudar desde como registrar um domínio (para chamar de seu), a criação de uma infraestrutura dedicada para hospedar um site wordpress com o mínimo de manutenção necessária, emails e mais algumas coisas que eu achar que sejam legais para dar aquela incrementada.
Para que fique bem,,, mas bem,,, claro: Em algum certo momento haverão custos que SÃO DE SUA INTEIRA RESPOSABILIDADE, não existe filantropia para alguns serviços (se eu achar algum de graça que faça a mesma coisa coloco o link)
Essa página deve funcionar como um índice para esse conteúdo.
Que o SQL pode rodar em container já não é novidade tem um tempinho.
A facilidade que isso nos trás para testar recursos, novidades, configurações, bugs, etc. ajudou demais.
Só o trabalho de subir um SO, configurar todo o SO, atualizações do SO, baixar a instalação do SQL, todo o processo de instalação, atualização, configuração já cansa só de lembrar.
Tá certo que com a vantagem na nuvem podemos subir qualquer configuração a qualquer momento, só dependendo do limite do cartão de crédito, mas com o Docker, da pra fazer basicamente a mesma coisa sem precisar de uma conta em alguma nuvem, sem ter que ficar instalando um monte de binário com um monte de biblioteca, não se preocupando se está no patch certo do SO, etc.
Basicamente com duas linhas de comando você consegue “rodar” qualquer SQL Server do 17 até o 22 em qualquer cumulative update que houve nesse meio tempo.
Para começar, instale o Docker Desktop (https://www.docker.com/get-started/);
Após alguns restarts e atualizações você deve ter ele pronto no seu PC.
Agora, no Terminal, PowerShell, CMD digite o comando abaixo:
docker pull mcr.microsoft.com/mssql/server
Espere ele carregar algumas configurações
Em seguida vem a mágica com esse segundo comando:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest
E pronto, basicamente só isso e você vai ter um SQL Server Developer Edition 2022 rodando no seu PC
Claro que tem seus detalhes, nessa configuração simples tudo o que acontece no docker fica dentro do docker, se você apagar o container todas as bases que você criou, registros, etc. serão apagadas, o backup também conta.
Por padrão ele não integra com autenticação windows.
Se você procurar nos serviços ele não aparece listado.
Basicamente para conectar é seu hostname e a porta 1433 com usuário SA e a senha digitada ali em cima.
Caso precise da lista de todas as releases que você pode subir com o Docker a lista encontra-se aqui (https://hub.docker.com/_/microsoft-mssql-server).
A algum tempo atrás fiz um trabalho que teoricamente parecia simples, extrair dados de um banco transacional e mandar para um Redshift para análilse.
Claro que após bater cabeça alguns minutos entendi que imporar dados diretamente para o Redshift iria ser no mínimo conturbado e instável.
Fazendo uma análise das opções vi que a AWS disponibilizou um método muito parecido com o do SQL Server para importar arquivos diretamente para dentro do banco mas claro ao invés de fazer isso através de um servidor, é possível fazer isso através do S3.
A forma mais simples é basicamente:
copy tabela_destino
from 'S3://bucket/arquivo'
iam_role 'arn:aws:iam::01234567890:role/MinhaRegraDoRedshift'
Se o arquivo for muito grande e foi dividido ele tem que terminar com um numeral incremental 1 2 3 4 …
Se o arquivo for compactado, o comando de COPY tem que ser incrementado com GZIP.
Para mais informações tem esse link da AWS abaixo:
Por incrível que pareça o Redshift sofre com problemas de Lock e Block da mesma forma que um banco transacional qualquer.
Como qualquer post sobre nuvem, até o momento dessa publicação, o Redshift não tem uma interface que monitora Lock e Block, ela monitora conexões ativas, querys em execução mas não lock e block.
A query para monitorar o Redshift é a seguinte:
select a.txn_owner, a.txn_db, a.xid, a.pid, a.txn_start, a.lock_mode, a.relation as table_id,nvl(trim(c."name"),d.relname) as tablename, a.granted,b.pid as blocking_pid ,datediff(s,a.txn_start,getdate())/86400||' days '||datediff(s,a.txn_start,getdate())%86400/3600||' hrs '||datediff(s,a.txn_start,getdate())%3600/60||' mins '||datediff(s,a.txn_start,getdate())%60||' secs' as txn_duration
from svv_transactions a
left join (select pid,relation,granted from pg_locks group by 1,2,3) b
on a.relation=b.relation and a.granted='f' and b.granted='t'
left join (select * from stv_tbl_perm where slice=0) c
on a.relation=c.id
left join pg_class d on a.relation=d.oid
where a.relation is not null;
Com as opções de serviço de nuvem “bombando” freneticamente para quase tudo que temos em TI, e outros serviços, fica fácil de escolher um serviço qualquer e simplesmente clicar em START e começar a usar.
Como bons profissionais, sabemos que por trás desse “START” roda uma imensidão de coisas para fazer esse simples deploy começar a funcionar, mas um recurso que é extremamente utilizado, ainda mais hoje, acaba ficando de lado porque é tão simples que alguns esquecem, o serviço de resolução de nomes, também conhecido como DNS.
Provavelmente 99% do que você usa tanto na internet quanto “em casa” é resolvido por nome, esse blog por exemplo, você chegou aqui pelo endereço de nome, não da pra acessá-lo por IP, seu serviço de email, um site qualquer, aquele endereço no listener do SQL, etc.
Mesmo sendo uma requisição simples em UDP na porta 53, essa requisição gera um trafego de internet, para cada vez que alguém consulta algum endereço, toda uma mágica tem que acontecer, basicamente é assim:
A requisição da aplicação é encaminhada para para o SO
Essa solicitação passa para o mini-driver de rede e procura no cache para saber se tem alguma coisa em cache para adiantar o serviço, caso não tenha ele…
pega a lista dos endereços de DNS cadastrados na interface
requisita ao DNS cadastrado a resolução de nome para o endereço solicitado
se os servidores cadastrados tiverem em cache o endereço ele devolve a ao requisitante caso não,,,
Vão para os ROOT´s cadastrados para iniciar a consulta pública,
tudo começa no “.” depois o sufixo que pode ser “com”, “net”, “br”, “ca”, etc…
Depois localiza o nome intermediário do domínio, que é o nome em si, e resolve o DNS master e slave
conecta no DNS master e slave e resolve o SOA
pergunta sobre o RR do endereço em questão e aí a resposta pode variar para um A, MX, AAA, TXT, CNAME, etc.
volta com o resultado para o servidor de DNS lá cadastrado na interface, faz o cache pelo TTL, e devolve a resolução do nome para a interface solicitante com o TTL do registro
Basicamente, porque é um pouco mais complexo que isso, esse é o processo feito para cada vez que é requisitada uma resolução de nome, tudo isso em UDP e o mais rápido possível.
Por padrão, quando é feita uma consulta de DNS esse método é direto, um RR para um domínio e apenas isso, mas existe um método de consulta que é o ANY que significa basicamente um traga todas as informações disponíveis do domínio requisitado.
Essas “todas as informações” são compostas de:
Nomes do servidores DNS
serial
refresh da zona
retry
expiração
TTL da zona
email do responsável
nome do servidor de resposta primário
MX
text
e o IP de resposta para o root
Certo, mas qual o problema?
O volume trafegado é maior, o tempo de conexão com o DNS é maior e o volume de requisições pode afetar o desempenho na experiência, para dar time out de requisição de DNS o serviço pode demorar até 2 segundos para resolver o endereço, imagina isso para uma aplicação onde do total do tempo gasto 2 segundos foram apenas para resolver nome, onde ela vai ter que tentar novamente por houve time-out.
Existe um método de ataque que é o de amplificação de DNS, onde uma onda de requisição ANY sobrecarrega o serviço causando um DDoS e sem DNS sem aplicação.
Na ponta do lápis estamos falando em uma requisição direta requisitar alguma coisa em torno de 44 bytes, enquanto uma requisição ANY (pode variar) mas para uma média dica em 890 bytes.
Não parece muita coisa certo? agora imagina isso para um servidor de DNS respondendo para não apenas suas requisições mas para todos os domínios cadastrados nele, mais replicar para um secundário, mais atualizações vindas de aplicações.
Como evitar requisições ANY?
Basicamente, adicione um RR no DNS do tipo HINFO com alguma informação.
Foi um grande prazer ter participado do Data Secrets #38.
Quem tiver a oportunidade de assistir segue o vídeo:
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.