<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Meu Diário Tech</title>
        <link>https://www.libre.tec.br/posts/</link>
        <description>Recent content in Posts on Meu Diário Tech</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>pt-br</language>
        <lastBuildDate>Wed, 17 Apr 2024 18:47:04 -0300</lastBuildDate>
        <atom:link href="https://www.libre.tec.br/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Para nunca mais esquecer - Debug de segredos do Github Actions</title>
            <link>https://www.libre.tec.br/posts/2024/04/para-nunca-mais-esquecer-debug-de-segredos-do-github-actions/</link>
            <pubDate>Wed, 17 Apr 2024 18:47:04 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2024/04/para-nunca-mais-esquecer-debug-de-segredos-do-github-actions/</guid>
            <description>Todas as vezes que eu preciso debugar um segredo do Github Actions, seja para confirmar se o erro foi meu ou do owner do repositório, ou simplesmente porque necessito muito desse segredo, perco bastante tempo no Google procurando esta solução.
Então, decidi deixar registrado aqui, tornando fácil consultar posteriormente.
A solução é criar uma sessão SSH através do tmate.
# Primeiro, faço echo do segredo para um arquivo dentro do workspace do workflow - name: Set up secret file env: DEBUG_PASSWORD: ${{ secrets.</description>
            <content type="html"><![CDATA[<p>Todas as vezes que eu preciso <em>debugar</em> um segredo do Github Actions, seja para confirmar se o erro foi meu ou do <em>owner</em> do repositório, ou simplesmente porque necessito muito desse segredo, perco bastante tempo no Google procurando esta solução.</p>
<p>Então, decidi deixar registrado aqui, tornando fácil consultar posteriormente.</p>
<p>A solução é criar uma sessão SSH através do tmate.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#75715e"># Primeiro, faço echo do segredo para um arquivo dentro do workspace do workflow</span>
- <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Set up secret file</span>
  <span style="color:#f92672">env</span>:
    <span style="color:#f92672">DEBUG_PASSWORD</span>: <span style="color:#ae81ff">${{ secrets.DEBUG_PASSWORD }}</span>
    <span style="color:#f92672">DEBUG_SECRET_KEY</span>: <span style="color:#ae81ff">${{ secrets.DEBUG_SECRET_KEY }}</span>
  <span style="color:#f92672">run</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">    echo $DEBUG_PASSWORD &gt;&gt; secrets.txt
</span><span style="color:#e6db74">    echo $DEBUG_SECRET_KEY &gt;&gt; secrets.txt</span>    

<span style="color:#75715e"># Agora, crio a sessão</span>
- <span style="color:#f92672">name</span>: <span style="color:#ae81ff">Run tmate</span>
  <span style="color:#f92672">uses</span>: <span style="color:#ae81ff">mxschmitt/action-tmate@v2</span>
</code></pre></div><p>Agora, basta acessar a sessão por SSH no link que é disponibilizado na saída do fluxo de trabalho e verificar o conteúdo do arquivo secrets.txt.</p>
<p>Referência: <a href="https://stackoverflow.com/questions/63003669/how-can-i-see-my-git-secrets-unencrypted">Stackoverflow</a></p>
]]></content>
        </item>
        
        <item>
            <title>Telegram vs ChatGPT - DevOps se aventurando com Python?</title>
            <link>https://www.libre.tec.br/posts/2023/04/telegram-vs-chatgpt-devops-se-aventurando-com-python/</link>
            <pubDate>Fri, 14 Apr 2023 16:43:30 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2023/04/telegram-vs-chatgpt-devops-se-aventurando-com-python/</guid>
            <description>Certo dia, eu precisava fazer uma consulta rápida no ChatGPT, mas a página web não estava funcionando corretamente no meu celular devido a problemas de conexão ou indisponibilidade temporária.
Não me senti confortável usando nenhum aplicativo disponível na Play Store. Foi então que considerei a possibilidade de criar um bot no Telegram integrado com a API da OpenAI, o que me pareceu uma ótima alternativa.
Decidi me aventurar e criei o meu primeiro bot no Telegram.</description>
            <content type="html"><![CDATA[<p>Certo dia, eu precisava fazer uma consulta rápida no ChatGPT, mas a página web não estava funcionando corretamente no meu celular devido a problemas de conexão ou indisponibilidade temporária.</p>
<p>Não me senti confortável usando nenhum aplicativo disponível na Play Store. Foi então que considerei a possibilidade de criar um bot no Telegram integrado com a API da OpenAI, o que me pareceu uma ótima alternativa.</p>
<p>Decidi me aventurar e criei o meu primeiro bot no Telegram.</p>
<p>Agora, estou trabalhando na parametrização da API por meio de comandos no meu bot no Telegram, como o <code>/config max_tokens=1024</code>.</p>
<p>Confira o meu repositório <a href="https://github.com/rafaelarcanjo/Telegram-vs-ChatGPT">aqui</a>. Sugestões são bem-vindas 🙂</p>
]]></content>
        </item>
        
        <item>
            <title>Oracle Free Tier</title>
            <link>https://www.libre.tec.br/posts/2022/01/oracle-free-tier/</link>
            <pubDate>Sat, 08 Jan 2022 22:39:03 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2022/01/oracle-free-tier/</guid>
            <description>Acredito que a Oracle quer conseguir atenção para seus serviços Cloud. E uma tentativa dessas é fornecer alguns serviços gratuitos, como bancos SQL e NoSQL e também um servidor Linux… OK OK… uma microinstância de até 1GB de RAM e 1 CPU. Suficiente para pequenos laboratórios.
Como utilizo alguns serviços para automatização de IoT em um Raspberry com o Home Assistant e Mosquitto e não possuo IP dedicado, necessito de uma VPS para realizar integração entre a Alexa e Google Assistant.</description>
            <content type="html"><![CDATA[<p>Acredito que a <strong>Oracle</strong> quer conseguir atenção para seus serviços <em>Cloud</em>. E uma tentativa dessas é fornecer alguns serviços gratuitos, como bancos <em>SQL</em> e <em>NoSQL</em> e também um servidor Linux… OK OK… uma microinstância de até 1GB de RAM e 1 CPU. Suficiente para pequenos laboratórios.</p>
<p>Como utilizo alguns serviços para automatização de <em>IoT</em> em um <strong>Raspberry</strong> com o <strong>Home Assistant</strong> e <strong>Mosquitto</strong> e não possuo <em>IP</em> dedicado, necessito de uma <em>VPS</em> para realizar integração entre a <strong>Alexa</strong> e <strong>Google Assistant</strong>. Hoje utilizo uma <em>VPS</em> da <strong>Locaweb</strong>, e acredito que as configurações da instância do <strong>Oracle</strong> seja mais que o suficiente, e o melhor, de graça.</p>
<p>Os requisitos para criar a microinstância é cadastrar em <a href="https://signup.cloud.oracle.com/">Oracle Free Tier</a>, confirmar a validade do e-mail, adicionar uma forma de pagamento e depois ir em <em>Launch Resources</em> e <em>Create a VM instance</em>, e finalmente, criar uma chave SSH ou mesmo importar e ser feliz… ou não… vai saber rs</p>
]]></content>
        </item>
        
        <item>
            <title>Instalação do ScreenFetch</title>
            <link>https://www.libre.tec.br/posts/2021/02/instala%C3%A7%C3%A3o-do-screenfetch/</link>
            <pubDate>Tue, 02 Feb 2021 15:28:18 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2021/02/instala%C3%A7%C3%A3o-do-screenfetch/</guid>
            <description>Finalmente fazendo a documentação do ScreenFetch, sempre que me deparo com a configuração, fico meio perdido.
Abaixo irei descrever como fiz no Ubuntu 20.04 e no openSUSE 15.2.
Ubuntu 20.04 Baixando e instalando:
sudo wget -c https://raw.github.com/KittyKatt/screenFetch/master/screenfetch-dev -O /usr/bin/screenfetch chmod +x /usr/bin/screenfetch Pelo motd do Ubuntu ser meio poluído, na minha opinião, eu prefiro usar os arquivos que eu editei com o tempo, então vou fazer backup dos arquivos originais e configurar com os meus.</description>
            <content type="html"><![CDATA[<p>Finalmente fazendo a documentação do ScreenFetch, sempre que me deparo com a configuração, fico meio perdido.</p>
<p>Abaixo irei descrever como fiz no Ubuntu 20.04 e no openSUSE 15.2.</p>
<h2 id="ubuntu-2004">Ubuntu 20.04</h2>
<p>Baixando e instalando:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sudo wget -c https://raw.github.com/KittyKatt/screenFetch/master/screenfetch-dev -O /usr/bin/screenfetch
chmod +x /usr/bin/screenfetch
</code></pre></div><p>Pelo <em>motd</em> do Ubuntu ser meio poluído, na minha opinião, eu prefiro usar os arquivos que eu editei com o tempo, então vou fazer <em>backup</em> dos arquivos originais e configurar com os meus.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir ~/bkp_motd
mv /etc/update-motd.d/* ~/bkp_motd
</code></pre></div><ul>
<li>Arquivo <code>00-header</code></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat &gt; /etc/update-motd.d/00-header
<span style="color:#75715e">#!/bin/sh</span>
<span style="color:#f92672">[</span> -r /etc/lsb-release <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> . /etc/lsb-release
<span style="color:#66d9ef">if</span> <span style="color:#f92672">[</span> -z <span style="color:#e6db74">&#34;</span>$DISTRIB_DESCRIPTION<span style="color:#e6db74">&#34;</span> <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> <span style="color:#f92672">[</span> -x /usr/bin/lsb_release <span style="color:#f92672">]</span>; <span style="color:#66d9ef">then</span>
    DISTRIB_DESCRIPTION<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>lsb_release -s -d<span style="color:#66d9ef">)</span>
<span style="color:#66d9ef">fi</span>
screenfetch
</code></pre></div><ul>
<li>Arquivo <code>10-sysinfo</code></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat &gt; /etc/update-motd.d/10-sysinfo
<span style="color:#75715e">#!/bin/bash</span>
date<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>date<span style="color:#e6db74">`</span>
load<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>cat /proc/loadavg | awk <span style="color:#e6db74">&#39;{print $1}&#39;</span><span style="color:#e6db74">`</span>
root_usage<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>df -h / | awk <span style="color:#e6db74">&#39;/\// {print $(NF-1)}&#39;</span><span style="color:#e6db74">`</span>
memory_usage<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>free -m | grep Mem: | awk <span style="color:#e6db74">&#39;{printf(&#34;%3.1f%%&#34;, $3/$2*100)}&#39;</span><span style="color:#e6db74">`</span>
swap_usage<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>free -m | awk <span style="color:#e6db74">&#39;/Swap/ { printf(&#34;%3.1f%%&#34;, $3/$2*100) }&#39;</span><span style="color:#e6db74">`</span>
users<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>users | wc -w<span style="color:#e6db74">`</span>
time<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>uptime | grep -ohe <span style="color:#e6db74">&#39;up .*&#39;</span> | sed <span style="color:#e6db74">&#39;s/,/\ hours/g&#39;</span> | awk <span style="color:#e6db74">&#39;{ printf $2&#34; &#34;$3 }&#39;</span><span style="color:#e6db74">`</span>
processes<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>ps aux | wc -l<span style="color:#e6db74">`</span>
ip<span style="color:#f92672">=</span><span style="color:#66d9ef">$(</span>curl -s http://whatismyip.akamai.com<span style="color:#66d9ef">)</span>
echo <span style="color:#e6db74">&#34;Informação do sistema em: </span>$date<span style="color:#e6db74">&#34;</span>
echo
printf <span style="color:#e6db74">&#34;Carga:\t\t%s\tIP:\t\t%s\n&#34;</span> $load $ip
printf <span style="color:#e6db74">&#34;Memória:\t%s\tUptime:\t\t%s\n&#34;</span> $memory_usage <span style="color:#e6db74">&#34;</span>$time<span style="color:#e6db74">&#34;</span>
printf <span style="color:#e6db74">&#34;Uso em /:\t%s\tSwap:\t\t%s\n&#34;</span> $root_usage $swap_usage
printf <span style="color:#e6db74">&#34;Usuários:\t%s\tProcessos:\t%s\n&#34;</span> $users $processes
echo
</code></pre></div><ul>
<li>Arquivo <code>90-footer</code></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat &gt; /etc/update-motd.d/90-footer
<span style="color:#75715e">#!/bin/sh</span>
<span style="color:#f92672">[</span> -f /etc/motd.tail <span style="color:#f92672">]</span> <span style="color:#f92672">&amp;&amp;</span> cat /etc/motd.tail <span style="color:#f92672">||</span> true
</code></pre></div><ul>
<li>Alterando as permissões</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">chmod +x /etc/update-motd.d/*
</code></pre></div><p>E pronto, no Ubuntu ele já está pré configurado.</p>
<h2 id="opensuse-152">openSUSE 15.2</h2>
<p>Já no openSUSE, é necessário configurar algumas coisas e fazer uma gambiarra.</p>
<p>Os arquivos devem ser os mesmos do Ubuntu, porém a pasta deve ser criada.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir /etc/update-motd.d/
</code></pre></div><p>Agora é só criar os arquivos <code>00-header</code>, <code>10-sysinfo</code> e <code>90-footer</code> e alterar a permissão, conforme procedimento do Ubuntu.</p>
<ul>
<li>Instalando o ScreenFetch</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sudo zypper in screenfetch
</code></pre></div><ul>
<li>Alterar o arquivo <code>/etc/pam.d/sshd</code></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">...
session optional pam_keyinit.so force revoke
session optional pam_motd.so motd<span style="color:#f92672">=</span>/run/motd.dynamic
</code></pre></div><ul>
<li>Alterando as permissões</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">chmod +x /etc/update-motd.d/*
</code></pre></div><ul>
<li>Adicionando o comando para executar assim que logar via SSH <code>/etc/ssh/sshd_config</code></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">...
ForceCommand find /etc/update-motd.d/ -type f -executable -exec <span style="color:#f92672">{}</span> <span style="color:#ae81ff">\;</span>
</code></pre></div><p>E fim!</p>
<h3 id="referências">REFERÊNCIAS</h3>
<p><strong>Lançado ScreenFetch para Ubuntu</strong> <a href="https://diolinux.com.br/noticias/como-instalar-o-screenfetch-no-ubuntu.html">https://diolinux.com.br/noticias/como-instalar-o-screenfetch-no-ubuntu.html</a><br>
<strong>Luca Critelli</strong> <a href="https://github.com/lucacri/motd/blob/master/00-header">https://github.com/lucacri/motd/blob/master/00-header</a></p>
]]></content>
        </item>
        
        <item>
            <title>Documentação IPsec Ubuntu-Mikrotik</title>
            <link>https://www.libre.tec.br/posts/2021/02/documenta%C3%A7%C3%A3o-ipsec-ubuntu-mikrotik/</link>
            <pubDate>Tue, 02 Feb 2021 07:49:18 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2021/02/documenta%C3%A7%C3%A3o-ipsec-ubuntu-mikrotik/</guid>
            <description>Configuração do Servidor Cenário    IP Servidor Subnet GCP Subnet Local     35.184.47.124 10.128.0.0/24 192.168.0.0/24    No servidor Ubuntu, executar a instalação do StrongSwan:
apt-get install strongswan Editar o arquivo /etc/ipsec.config
version 2 config setup charondebug=&amp;#34;ike 2, knl 2&amp;#34; conn Mikrotik-01 left=%any # Informar a subnet dos servidores leftsubnet=10.128.0.0/24 right=%any # Informar a subnet do Mikrotik # Deve ser única para cada Mikrotik rightsubnet=192.</description>
            <content type="html"><![CDATA[<h3 id="configuração-do-servidor">Configuração do Servidor</h3>
<h4 id="cenário">Cenário</h4>
<table>
<thead>
<tr>
<th style="text-align:center">IP Servidor</th>
<th style="text-align:center">Subnet GCP</th>
<th style="text-align:center">Subnet Local</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">35.184.47.124</td>
<td style="text-align:center">10.128.0.0/24</td>
<td style="text-align:center">192.168.0.0/24</td>
</tr>
</tbody>
</table>
<p>No servidor Ubuntu, executar a instalação do StrongSwan:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">apt-get install strongswan
</code></pre></div><p>Editar o arquivo <code>/etc/ipsec.config</code></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">version <span style="color:#ae81ff">2</span>

config setup
        charondebug<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;ike 2, knl 2&#34;</span>

conn Mikrotik-01
        left<span style="color:#f92672">=</span>%any
        <span style="color:#75715e"># Informar a subnet dos servidores</span>
        leftsubnet<span style="color:#f92672">=</span>10.128.0.0/24
        right<span style="color:#f92672">=</span>%any
        <span style="color:#75715e"># Informar a subnet do Mikrotik</span>
        <span style="color:#75715e"># Deve ser única para cada Mikrotik</span>
        rightsubnet<span style="color:#f92672">=</span>192.168.0.0/24
        forceencaps<span style="color:#f92672">=</span>yes
        ike<span style="color:#f92672">=</span>sha512-aes256-modp4096
        esp<span style="color:#f92672">=</span>sha512-aes256-modp4096
        authby<span style="color:#f92672">=</span>secret
        auto<span style="color:#f92672">=</span>start
</code></pre></div><p>Editar o arquivo <code>/etc/ipsec.secrets</code></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">%any %any : PSK <span style="color:#e6db74">&#39;senha_segura_longa&#39;</span>
</code></pre></div><h3 id="configuração-do-mikrotik">Configuração do Mikrotik</h3>
<ul>
<li>
<p>IP / IPsec / Profiles
<img src="/ipsec/profiles.png" alt="Profiles"></p>
</li>
<li>
<p>IP / IPsec / Peers<br>
Atenção ao campo <strong>Address</strong>, deve informar o IP externo do servidor.<br>
<img src="/ipsec/peer.png" alt="Peers"></p>
</li>
<li>
<p>IP / IPsec / Identifies<br>
Atenção ao campo <strong>Secret</strong>, pois deve conter a mesma senha informada no arquivo <code>/etc/ipsec.secrets</code>.
<img src="/ipsec/identifies.png" alt="Identifies"></p>
</li>
<li>
<p>IP / IPsec / Proposal
<img src="/ipsec/proposal.png" alt="Proposal"></p>
</li>
<li>
<p>IP / IPsec / Policy<br>
Atenção aos campos <strong>Src. Address</strong> e <strong>Dst. Address</strong>, pois deve informar a subnet do servidor e a subnet do Mikrotik, respectivamente.
<img src="/ipsec/policy-01.png" alt="Policy-01">
<img src="/ipsec/policy-02.png" alt="Policy-01"></p>
</li>
<li>
<p>E agora verificar se a conexão estabilizou.<br>
IP / IPsec / Active Peers
<img src="/ipsec/active.png" alt="Active Peers"></p>
</li>
</ul>
<h3 id="adicionando-o-segundo-mikrotik">Adicionando o segundo Mikrotik</h3>
<h4 id="cenário-1">Cenário</h4>
<table>
<thead>
<tr>
<th style="text-align:center">IP Servidor</th>
<th style="text-align:center">Subnet GCP</th>
<th style="text-align:center">Subnet Local 2</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">35.184.47.124</td>
<td style="text-align:center">10.128.0.0/24</td>
<td style="text-align:center">192.168.88.0/24</td>
</tr>
</tbody>
</table>
<p>No servidor, adicionar as linhas abaixo no arquivo <code>/etc/ipsec.config</code></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">conn Mikrotik-02
        left<span style="color:#f92672">=</span>%any
        leftsubnet<span style="color:#f92672">=</span>10.128.0.0/24
        right<span style="color:#f92672">=</span>%any
        <span style="color:#75715e"># Informar a subnet do Mikrotik</span>
        <span style="color:#75715e"># Deve ser única para cada Mikrotik</span>
        rightsubnet<span style="color:#f92672">=</span>192.168.88.0/24
        forceencaps<span style="color:#f92672">=</span>yes
        ike<span style="color:#f92672">=</span>sha512-aes256-modp4096
        esp<span style="color:#f92672">=</span>sha512-aes256-modp4096
        authby<span style="color:#f92672">=</span>secret
        auto<span style="color:#f92672">=</span>start
</code></pre></div><p>E no Mikrotik seguir as mesmas configurações do anterior, só atenção na configuração do Policy, que deve alterar o campo <strong>Dst. Address</strong>:
<img src="/ipsec/policy-mikrotik-2.png" alt="Policy-Mikrotik-2"></p>
<h5 id="e-fim">E FIM</h5>
]]></content>
        </item>
        
        <item>
            <title>Instalando driver MSSQL no PHP com AWS Elastic Beanstalk</title>
            <link>https://www.libre.tec.br/posts/2021/01/instalando-driver-mssql-no-php-com-aws-elastic-beanstalk/</link>
            <pubDate>Fri, 15 Jan 2021 18:50:00 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2021/01/instalando-driver-mssql-no-php-com-aws-elastic-beanstalk/</guid>
            <description>Outra proposta minha foi aceita no portal Freelancer. Desta vez seria algo que não tenho muito conhecimento. Tenho conhecimento com AWS principalmente com S3 e EC2, mas nunca fiquei cara a cara com a orquestração Elastic Beanstalk.
Fui sincero na minha proposta, informando que minha área de maior conhecimento é Linux, mas tenho experiência com Docker e Kubernetes.
O empregador rebateu perguntando se eu já trabalhei com EB, informei que não, mas como é um contêiner baseado em CentOS, eu conseguiria me virar.</description>
            <content type="html"><![CDATA[<p>Outra proposta minha foi aceita no portal <em>Freelancer</em>. Desta vez seria algo que não tenho muito conhecimento.
Tenho conhecimento com <em>AWS</em> principalmente com <em>S3</em> e <em>EC2</em>, mas nunca fiquei cara a cara com a orquestração <em>Elastic Beanstalk</em>.</p>
<p>Fui sincero na minha proposta, informando que minha área de maior conhecimento é Linux, mas tenho experiência com <em>Docker</em> e <em>Kubernetes</em>.</p>
<p>O empregador rebateu perguntando se eu já trabalhei com <em>EB</em>, informei que não, mas como é um contêiner baseado em <em>CentOS</em>, eu conseguiria me virar.
Fiz uma proposta informando que eu iria escrever as configurações, e após o OK, ele aceitaria minha proposta.</p>
<p>Uma das melhores formas de aprender, é na marra!</p>
<h2 id="poucas-documentações">Poucas documentações</h2>
<p>Me deparei com poucas documentações informando como instalar os drivers <em>MSSQL</em> no <em>PHP</em> para Linux.
A maioria já estava bem defasada. O que eu fiz? Instalar um <em>CentOS</em> virtualizado e ir procurando documentação do <em>pecl</em>.</p>
<h3 id="instalando-no-centos-virtualizado">Instalando no CentOS virtualizado</h3>
<p>Basicamente precisava instalar o <em>PHP</em>, <em>Pear</em>, os compiladores GCC e o <em>devel</em> do driver <em>ODBC</em>.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">yum update -y
<span style="color:#75715e"># Habilitando PHP7, pois o CentOS 7 vem com PHP5</span>
yum install -y epel-release yum-utils
yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php74
yum install -y php php-common php-opcache php-mcrypt php-cli php-gd <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    php-curl php-mysqlnd php-pear php-devel gcc gcc-c++ unixODBC-devel
<span style="color:#75715e"># Verificando a versão do PHP</span>
php -v
</code></pre></div><p>E agora compilar o módulo e ativar as bibliotecas no <em>conf</em></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">pecl install sqlsrv
pecl install pdo_sqlsrv
<span style="color:#75715e"># Ativando as bibliotecas</span>
echo extension<span style="color:#f92672">=</span>sqlsrv.so &gt; /etc/php.d/sqlsrv.ini
echo extension<span style="color:#f92672">=</span>pdo_sqlsrv.so &gt; /etc/php.d/pdo_sqlsrv.ini
</code></pre></div><p>Como eu não queria instalar o servidor <em>web</em>, vou rodar o <em>phpinfo()</em> pelo shell</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">echo <span style="color:#e6db74">&#34;&lt;?php
</span><span style="color:#e6db74">phpinfo();&#34;</span> &gt; phpinfo.php
php phpinfo.php &gt; resultado.txt
</code></pre></div><p>E no arquivo, fui procurar a parte <em>pdo_sqlsrv</em> para verificar se o módulo está ativo, e estava :)</p>
<pre><code>pdo_sqlsrv

pdo_sqlsrv support =&gt; enabled
ExtensionVer =&gt; 5.8.1

Directive =&gt; Local Value =&gt; Master Value
pdo_sqlsrv.client_buffer_max_kb_size =&gt; 10240 =&gt; 10240
pdo_sqlsrv.log_severity =&gt; 0 =&gt; 0
pdo_sqlsrv.set_locale_info =&gt; 2 =&gt; 2
</code></pre><p>Agora é ler a documentação da AWS e verificar como faço o <em>deploy</em> do contêiner</p>
<h2 id="começando-a-apanhar">Começando a apanhar</h2>
<p>Pela documentação eu só precisaria me preocupar com a pasta <em>.ebextensions</em>, com um arquivo <em>config</em> e com os blocos de comandos em <em>YAML</em>.</p>
<p>Todos os arquivos de configurações para o <em>deploy</em> devem ficar na pasta <em>.ebextensions</em>, então criei o arquivo <strong>mssql.config</strong>.
Percebi uma enorme diferença entre os comandos <strong>commands</strong> e <strong>container_commands</strong>. Sem me aprofundar, a chave <strong>commands</strong> é executada antes da inicialização do contêiner, e a chave <strong>container_commands</strong> é executada após a inicialização do contêiner.</p>
<p>Então comecei a montar o <em>YAML</em> <code>.ebextensions/mssql.config</code>:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f92672">commands</span>:
  <span style="color:#75715e"># Instalação do Pear, compiladores e os headers    </span>
  <span style="color:#f92672">00_yum</span>:
    <span style="color:#f92672">command</span>: <span style="color:#ae81ff">yum install -y php-pear gcc gcc-c++ unixODBC-devel</span>
  <span style="color:#75715e"># Compilando o driver MSSQL  </span>
  <span style="color:#f92672">01_sqlsrv</span>:
    <span style="color:#f92672">command</span>: <span style="color:#ae81ff">pecl install sqlsrv      </span>
  <span style="color:#75715e"># Compilando o PDO</span>
  <span style="color:#f92672">02_pecl_pdo</span>:
    <span style="color:#f92672">command</span>: <span style="color:#ae81ff">pecl install pdo_sqlsrv</span>
  <span style="color:#75715e"># Configurando os módulos nos confs</span>
  <span style="color:#f92672">03_files</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      echo extension=sqlsrv.so &gt; /etc/php.d/sqlsrv.ini
</span><span style="color:#e6db74">      echo extension=pdo_sqlsrv.so &gt; /etc/php.d/pdo_sqlsrv.ini</span>      
</code></pre></div><p>Crie o arquivo <code>index.php</code>:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-php" data-lang="php"><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
<span style="color:#a6e22e">phpinfo</span>();
</code></pre></div><p>Para enviar os arquivos para o <em>EB</em> é só compactar todos os arquivos como <em>ZIP</em> e fazer o <em>upload</em></p>
<h2 id="criando-a-instância">Criando a instância</h2>
<p>Para criar a instância faça</p>
<ul>
<li>Vá em <a href="https://console.aws.amazon.com/elasticbeanstalk;">https://console.aws.amazon.com/elasticbeanstalk;</a></li>
<li>Clique em <strong>Create a new environment</strong>;</li>
<li>Deixe marcado <strong>Web server environment</strong> =&gt; <strong>Select</strong>;</li>
<li>Em <strong>Aplication name</strong> informe o nome da aplicação;</li>
<li><strong>Environment name</strong> deixe como preencheu;</li>
<li><strong>Platform</strong> =&gt; <strong>PHP</strong> e deixe o restante como padrão;</li>
<li>Em <strong>Application code</strong> =&gt; <strong>Upload your code</strong>;</li>
<li><strong>Local file</strong> =&gt; <strong>Choose file</strong> e envie o <em>.ZIP</em>;</li>
<li>Clique em <strong>Create environment</strong> e aguarde o <em>deploy</em>.</li>
</ul>
<p>Se aparecer um OK, funcionou&hellip;.. só que não!</p>
<p>Clique em <strong>Go to environment</strong> e observe o <em>sqlsvr</em>.</p>
<h2 id="primeiro-problema">Primeiro problema</h2>
<p>Me deparei com esse problema quando eu queria atualizar somente o arquivo <em>PHP</em>. Se pegar o mesmo arquivo <em>.ZIP</em> e enviar é apresentado erros no <em>deploy</em>, mas por quê?</p>
<p>Para enviar uma nova versão é ir em <strong>Application versions</strong> =&gt; <strong>Upload</strong> =&gt; selecionar a nova versão =&gt; <strong>Actions</strong> =&gt; <strong>Deploy</strong>.</p>
<p>Porque os comandos <em>pecl</em> quando executado novamente retornam erro, e o <em>deploy</em> finalizado com a saída de erro. A solução seria verificar se existem os arquivos <em>.SO</em> e não executar novamente</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f92672">commands</span>:
  <span style="color:#75715e"># Instalação do Pear, compiladores e os headers    </span>
  <span style="color:#f92672">00_yum</span>:
    <span style="color:#f92672">command</span>: <span style="color:#ae81ff">yum install -y php-pear gcc gcc-c++ unixODBC-devel</span>
  <span style="color:#75715e"># Compilando o driver MSSQL    </span>
  <span style="color:#f92672">01_sqlsrv</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      if [ ! -f &#34;/usr/lib64/php/modules/sqlsrv.so&#34; ]; then
</span><span style="color:#e6db74">        pecl install sqlsrv
</span><span style="color:#e6db74">      fi</span>      
  <span style="color:#75715e"># Compilando o PDO    </span>
  <span style="color:#f92672">02_pecl_pdo</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      if [ ! -f &#34;/usr/lib64/php/modules/pdo_sqlsrv.so&#34; ]; then
</span><span style="color:#e6db74">        pecl install pdo_sqlsrv
</span><span style="color:#e6db74">      fi</span>      
  <span style="color:#75715e"># Configurando os módulos nos confs  </span>
  <span style="color:#f92672">03_files</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      echo extension=sqlsrv.so &gt; /etc/php.d/sqlsrv.ini
</span><span style="color:#e6db74">      echo extension=pdo_sqlsrv.so &gt; /etc/php.d/pdo_sqlsrv.ini</span>      
</code></pre></div><h2 id="segundo-problema">Segundo problema</h2>
<p>Agora seria testar a conexão, alterei o arquivo <code>index.php</code> para uma conexão com a base de dados e um retorno simples. O banco foi fornecido pelo próprio empregador</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-php" data-lang="php"><span style="color:#f92672">&lt;?</span><span style="color:#a6e22e">php</span>
$pdo <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">PDO</span>( <span style="color:#e6db74">&#34;sqlsrv:server=example.com;database=db&#34;</span>, 
                <span style="color:#e6db74">&#34;username&#34;</span>, <span style="color:#e6db74">&#34;password&#34;</span>);

$query <span style="color:#f92672">=</span> $pdo<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">query</span>(<span style="color:#e6db74">&#34;SELECT * FROM contacts&#34;</span>);

$assoc <span style="color:#f92672">=</span> $query<span style="color:#f92672">-&gt;</span><span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">PDO</span><span style="color:#f92672">::</span><span style="color:#a6e22e">FETCH_ASSOC</span>);

<span style="color:#a6e22e">print_r</span>($assoc);
</code></pre></div><p>Fiz novamente o <em>upload</em>, e o que acontece?</p>
<pre><code>&quot;SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for 
SQL Server to communicate with SQL Server. Access the following URL to 
download the ODBC Driver for SQL Server for x64: 
https://go.microsoft.com/fwlink/?LinkId=163712&quot;
</code></pre><p>Pela documentação da Microsoft, é necessário um <em>driver ODBC</em> para comunicar, então é ler, e adaptar ao <em>YAML</em></p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#f92672">commands</span>:
  <span style="color:#75715e"># Instalação do Pear, compiladores e os headers    </span>
  <span style="color:#f92672">00_yum</span>:
    <span style="color:#f92672">command</span>: <span style="color:#ae81ff">yum install -y php-pear gcc gcc-c++ unixODBC-devel</span>
  <span style="color:#75715e"># Compilando o driver MSSQL    </span>
  <span style="color:#f92672">01_sqlsrv</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      if [ ! -f &#34;/usr/lib64/php/modules/sqlsrv.so&#34; ]; then
</span><span style="color:#e6db74">        pecl install sqlsrv
</span><span style="color:#e6db74">      fi</span>      
  <span style="color:#75715e"># Compilando o PDO    </span>
  <span style="color:#f92672">02_pecl_pdo</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      if [ ! -f &#34;/usr/lib64/php/modules/pdo_sqlsrv.so&#34; ]; then
</span><span style="color:#e6db74">        pecl install pdo_sqlsrv
</span><span style="color:#e6db74">      fi</span>      
  <span style="color:#75715e"># Configurando os módulos nos confs  </span>
  <span style="color:#f92672">03_files</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      echo extension=sqlsrv.so &gt; /etc/php.d/sqlsrv.ini
</span><span style="color:#e6db74">      echo extension=pdo_sqlsrv.so &gt; /etc/php.d/pdo_sqlsrv.ini</span>      
  <span style="color:#75715e"># Driver ODBC</span>
  <span style="color:#f92672">05_odbc</span>:
    <span style="color:#f92672">command</span>: |<span style="color:#e6db74">
</span><span style="color:#e6db74">      curl https://packages.microsoft.com/config/rhel/7/prod.repo &gt; \
</span><span style="color:#e6db74">        /etc/yum.repos.d/mssql-release.repo
</span><span style="color:#e6db74">      ACCEPT_EULA=Y yum install -y msodbcsql17
</span><span style="color:#e6db74">      ACCEPT_EULA=Y yum install -y mssql-tools
</span><span style="color:#e6db74">      export PATH=&#34;$PATH:/opt/mssql-tools/bin&#34;</span>      
</code></pre></div><p>E após enviar tudo novamente, obtive a minha consulta, e finalizei o projeto!</p>
<h3 id="referências">REFERÊNCIAS</h3>
<p><strong>Documentação AWS Elastic Beanstalk</strong>
<a href="https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/ebextensions.html">https://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/ebextensions.html</a>
<strong>Documentação Microsoft</strong>
<a href="https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?redirectedfrom=MSDN&amp;view=sql-server-ver15">https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?redirectedfrom=MSDN&amp;view=sql-server-ver15</a>
<strong>Entendendo o AWS Elastic Beanstalk</strong>
<a href="https://guilhermeteles.com.br/entendendo-o-aws-elastic-beanstalk/">https://guilhermeteles.com.br/entendendo-o-aws-elastic-beanstalk/</a></p>
]]></content>
        </item>
        
        <item>
            <title>Configurando ProxySQL</title>
            <link>https://www.libre.tec.br/posts/2020/12/configurando-proxysql/</link>
            <pubDate>Tue, 22 Dec 2020 17:01:18 -0300</pubDate>
            
            <guid>https://www.libre.tec.br/posts/2020/12/configurando-proxysql/</guid>
            <description>Fui premiado em um job, aonde a ideia é criar um HA (alta disponibilidade) do MySQL. Estudei com HAProxy, mas no meio da pesquisa, surgiu o projeto ProxySQL. Procurei a documentação, falhas, críticas, e gostei da ideia.
Aqui deixo o meu relato e como foi a implementação.
Por eu assinar um contrato de sigilo, não posso falar nomes, IPs, hostnames e várias outras coisas. Será somente a parte documental.
O ambiente atual é um MySQL rodando em um Debian 9, virtualizado, que fica protegido por um Firewall (não sei especificar qual é), que responde para várias aplicações web (PHP, Node e Ruby).</description>
            <content type="html"><![CDATA[<p>Fui premiado em um job, aonde a ideia é criar um HA (alta disponibilidade) do MySQL. Estudei com HAProxy, mas no meio da pesquisa, surgiu o projeto ProxySQL. Procurei a documentação, falhas, críticas, e gostei da ideia.</p>
<p>Aqui deixo o meu relato e como foi a implementação.</p>
<p>Por eu assinar um contrato de sigilo, não posso falar nomes, IPs, hostnames e várias outras coisas. Será somente a parte documental.</p>
<p>O ambiente atual é um MySQL rodando em um Debian 9, virtualizado, que fica protegido por um Firewall (não sei especificar qual é), que responde para várias aplicações web (PHP, Node e Ruby).</p>
<p>O meu serviço será configurar um outro MySQL (Oracle Linux) no DC 2, replicando todas as informações do MySQL em produção (DC 1), e após isso, configurar o ProxySQL (distribuição de minha escolha, mas gostei muito de trabalhar com o Oracle Linux), em outro servidor (DC 1) para realizar o balanceamento de carga.</p>
<p>Talvez futuramente, e eu espero que sim, será criar um HA do próprio ProxySQL fazendo um over fail no próprio Firewall (isso será com o pessoal interno, minha responsabilidade será somente a configuração do segundo ProxySQL, mas espero eu que me deixem participar).</p>
<p>Momento de arregaçar as mangas, pegar um café e bora lá!</p>
<h2 id="desenhando-o-cenário">Desenhando o cenário</h2>
<table>
<thead>
<tr>
<th style="text-align:center">Função</th>
<th style="text-align:center">DC</th>
<th style="text-align:center">IP</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">ProxySQL</td>
<td style="text-align:center">01</td>
<td style="text-align:center">192.168.3.100</td>
</tr>
<tr>
<td style="text-align:center">MySQL-01</td>
<td style="text-align:center">01</td>
<td style="text-align:center">192.168.3.110</td>
</tr>
<tr>
<td style="text-align:center">MySQL-02</td>
<td style="text-align:center">02</td>
<td style="text-align:center">192.168.3.111</td>
</tr>
</tbody>
</table>
<h5 id="o-mysql-01-está-em-produção-já-o-02-será-instalado-via-docker-em-um-servidor-já-existente">O MySQL-01 está em produção, já o 02 será instalado via Docker em um servidor já existente.</h5>
<h2 id="configurando-os-bancos-e-a-replicação">Configurando os bancos e a replicação</h2>
<h3 id="configurando-o-mysql-01-em-produção">Configurando o MySQL-01 em Produção</h3>
<ul>
<li>Realizando o <em>dump</em> do banco de dados</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">root@mysql-01:~#
<span style="color:#75715e"># Escolhi a flag --databases para não pegar os bancos de </span>
<span style="color:#75715e"># controle do MySQL</span>
mysqldump -uroot -psenha_fornecida_pela_seguranca <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    --databases banco01 banco02 banco03 &gt; mysqldump.sql
</code></pre></div><ul>
<li>Preparando a replicação, <strong>atenção com o IP, dever ser do MySQL-02</strong></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">root@mysql-01:~#
vim /etc/mysql/mariadb.conf.d/50-server.cnf
<span style="color:#f92672">[</span>mysqld<span style="color:#f92672">]</span>
...
server-id<span style="color:#f92672">=</span><span style="color:#ae81ff">1</span>
log-bin<span style="color:#f92672">=</span>/var/log/mysql/bin-log
auto-increment-increment <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>
auto-increment-offset <span style="color:#f92672">=</span> <span style="color:#ae81ff">2</span>
...
systemctl restart mysql.service
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">USER</span> <span style="color:#e6db74">&#39;replica&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.111&#39;</span> 
    IDENTIFIED <span style="color:#66d9ef">BY</span> <span style="color:#e6db74">&#39;senha_aleatoria&#39;</span>;
<span style="color:#66d9ef">GRANT</span> REPLICATION SLAVE <span style="color:#66d9ef">ON</span> <span style="color:#f92672">*</span>.<span style="color:#f92672">*</span> <span style="color:#66d9ef">TO</span> <span style="color:#e6db74">&#39;replica&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.111&#39;</span>;
<span style="color:#66d9ef">SHOW</span> MASTER STATUS;
<span style="color:#75715e">-- Anote o File e Position, se não retornar nada, deu ruim
</span></code></pre></div><h3 id="configurando-o-mysql-02-no-oracle-linux">Configurando o MySQL-02 no Oracle Linux</h3>
<ul>
<li>Instalando o MySQL no Oracle Linux</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#f92672">[</span>root@mysql-02 ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
yum install -y dnf-utils zip unzip
yum config-manager --add-repo<span style="color:#f92672">=</span>https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce --nobest
systemctl enable docker.service
systemctl start docker.service
<span style="color:#75715e"># Verificando se deu bonito</span>
systemctl status docker.service
</code></pre></div><ul>
<li>Montando o container do MySQL, <strong>atenção com a pasta mysql</strong>, <strong>importante que as versões sejam iguais</strong></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#f92672">[</span>root@mysql-02 ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
docker run <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    --name mysql-02 <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    --restart always <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -v data:/var/lib/mysql <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -v &lt;CAMINHO_ABSOLUTO&gt;/mysql:/etc/mysql/conf.d <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -e MYSQL_ROOT_PASSWORD<span style="color:#f92672">=</span>senha_fornecida_pela_seguranca <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -p 3306:3306 <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -d mysql:5.5.30
docker exec -it mysql-02 mysql -uroot <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -psenha_fornecida_pela_seguranca
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">show</span> variables <span style="color:#66d9ef">like</span> <span style="color:#e6db74">&#39;server%&#39;</span>;
<span style="color:#75715e">-- Se o Value de server_id for igual a 2, deu bom
</span></code></pre></div><ul>
<li>Restaurando o <em>dump</em></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#f92672">[</span>root@mysql-02 ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
scp root@192.168.3.110:/root/mysqldump.sql .
cat mysqldump.sql | docker exec -i mysql-02 mysql -uroot <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    -psenha_fornecida_pela_seguranca
</code></pre></div><ul>
<li>Criando o usuário de acesso ao sistema</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">USER</span> <span style="color:#e6db74">&#39;user_sistema&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;%&#39;</span> IDENTIFIED <span style="color:#66d9ef">BY</span> <span style="color:#e6db74">&#39;user_sistema&#39;</span>;
<span style="color:#66d9ef">GRANT</span> <span style="color:#66d9ef">ALL</span> <span style="color:#66d9ef">PRIVILEGES</span> <span style="color:#66d9ef">ON</span> <span style="color:#f92672">*</span>.<span style="color:#f92672">*</span> <span style="color:#66d9ef">TO</span> <span style="color:#e6db74">&#39;user_sistema&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;%&#39;</span>;
FLUSH <span style="color:#66d9ef">PRIVILEGES</span>;
</code></pre></div><ul>
<li>Preparando a replicação, <strong>atenção com a senha do usuário replica, deve ser a mesma nos dois bancos</strong></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">USER</span> <span style="color:#e6db74">&#39;replica&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.110&#39;</span> 
    IDENTIFIED <span style="color:#66d9ef">BY</span> <span style="color:#e6db74">&#39;senha_aleatoria&#39;</span>;
<span style="color:#66d9ef">GRANT</span> REPLICATION SLAVE <span style="color:#66d9ef">ON</span> <span style="color:#f92672">*</span>.<span style="color:#f92672">*</span> <span style="color:#66d9ef">TO</span> <span style="color:#e6db74">&#39;replica&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.110&#39;</span>;
FLUSH <span style="color:#66d9ef">PRIVILEGES</span>;
    CHANGE MASTER <span style="color:#66d9ef">TO</span> MASTER_HOST<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;192.168.3.110&#39;</span>,
    MASTER_USER<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;replica&#39;</span>,
    MASTER_PASSWORD<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;senha_aleatoria&#39;</span>,
    MASTER_LOG_FILE<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;&lt;File_do_MASTER_STATUS&gt;&#39;</span>,
    MASTER_LOG_POS<span style="color:#f92672">=&lt;</span>Position_do_MASTER_STATUS<span style="color:#f92672">&gt;</span>;
<span style="color:#66d9ef">START</span> SLAVE;
<span style="color:#66d9ef">SHOW</span> SLAVE STATUS;
<span style="color:#75715e">-- Verifica se tem algum erro, se não, continue a nadar
</span><span style="color:#75715e"></span><span style="color:#66d9ef">SHOW</span> MASTER STATUS;
<span style="color:#75715e">-- Anote o File e Position, se não retornar nada, deu ruim
</span></code></pre></div><h3 id="finalizando-a-replicação-no-mysql-01-em-produção">Finalizando a replicação no MySQL-01 em Produção</h3>
<ul>
<li>Finalizando a replicação</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">root<span style="color:#f92672">@</span>mysql<span style="color:#f92672">-</span><span style="color:#ae81ff">01</span>:<span style="color:#f92672">~#</span> 
mysql<span style="color:#f92672">&gt;</span>
CHANGE MASTER <span style="color:#66d9ef">TO</span> MASTER_HOST<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;192.168.3.111&#39;</span>,
    MASTER_USER<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;replica&#39;</span>,
    MASTER_PASSWORD<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;senha_aleatoria&#39;</span>,
    MASTER_LOG_FILE<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;&lt;File_do_MASTER_STATUS&gt;&#39;</span>,
    MASTER_LOG_POS<span style="color:#f92672">=&lt;</span>Position_do_MASTER_STATUS<span style="color:#f92672">&gt;</span>;
<span style="color:#66d9ef">START</span> SLAVE;
<span style="color:#66d9ef">SHOW</span> SLAVE STATUS;
<span style="color:#75715e">-- Verifica se tem algum erro, se não, continue a nadar
</span></code></pre></div><ul>
<li>Em teoria, está funcionando a replicação, bora testar</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">root<span style="color:#f92672">@</span>mysql<span style="color:#f92672">-</span><span style="color:#ae81ff">01</span>:<span style="color:#f92672">~#</span> 
mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">DATABASE</span> TESTE;
use TESTE;
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">TABLE</span> testando (id INT <span style="color:#66d9ef">NULL</span>);
[root<span style="color:#f92672">@</span>mysql<span style="color:#f92672">-</span><span style="color:#ae81ff">02</span> <span style="color:#f92672">~</span>]<span style="color:#f92672">#</span> 
mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">show</span> databases;
<span style="color:#75715e">-- Se tiver o DB TESTE, tá lindo!
</span><span style="color:#75715e"></span>use TESTE;
<span style="color:#66d9ef">show</span> tables;
<span style="color:#75715e">-- Se tiver a tabela testando, funcionou perfeitamente a 
</span><span style="color:#75715e">-- replicação do MySQL-01 para o MySQL-02
</span><span style="color:#75715e">-- Agora testar a replicação inversa
</span><span style="color:#75715e"></span><span style="color:#66d9ef">DROP</span> <span style="color:#66d9ef">DATABASE</span> TESTE;
root<span style="color:#f92672">@</span>mysql<span style="color:#f92672">-</span><span style="color:#ae81ff">01</span>:<span style="color:#f92672">~#</span> 
mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">show</span> databases;
<span style="color:#75715e">-- Se não tiver a base de dados, está funcionando perfeitamente, 
</span><span style="color:#75715e">-- agora é configurar o ProxySQL
</span></code></pre></div><ul>
<li>Criando o usuário de monitoramento, <strong>atenção ao IP, deve ser o mesmo do ProxySQL</strong></li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql"><span style="color:#75715e">-- Como está replicando, pode executar em qualquer um dos nodes
</span><span style="color:#75715e"></span>mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">CREATE</span> <span style="color:#66d9ef">USER</span> <span style="color:#e6db74">&#39;monitor&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.100&#39;</span> 
    IDENTIFIED <span style="color:#66d9ef">BY</span> <span style="color:#e6db74">&#39;senha_aleatoria&#39;</span>;
<span style="color:#66d9ef">GRANT</span> <span style="color:#66d9ef">SELECT</span> <span style="color:#66d9ef">ON</span> <span style="color:#f92672">*</span>.<span style="color:#f92672">*</span> <span style="color:#66d9ef">TO</span> <span style="color:#e6db74">&#39;monitor&#39;</span><span style="color:#f92672">@</span><span style="color:#e6db74">&#39;192.168.3.100&#39;</span>;
FLUSH <span style="color:#66d9ef">PRIVILEGES</span>;
</code></pre></div><h2 id="proxysql">ProxySQL</h2>
<ul>
<li>Instalando o ProxySQL</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#f92672">[</span>root@proxy-sql ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
echo <span style="color:#e6db74">&#39;[ProxySQL_Repo]
</span><span style="color:#e6db74">name=ProxySQL YUM repository
</span><span style="color:#e6db74">baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/8/
</span><span style="color:#e6db74">gpgcheck=1
</span><span style="color:#e6db74">gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key&#39;</span> &gt; <span style="color:#ae81ff">\
</span><span style="color:#ae81ff"></span>    /etc/yum.repos.d/proxysql.repo
yum install -y proxysql mysql
systemctl enable proxysql.service
systemctl start proxysql.service
mysql -uadmin -padmin -h 127.0.0.1 -P6032
<span style="color:#75715e"># Se logou, o serviço está rodando</span>
</code></pre></div><ul>
<li>Trocando a senha do administrador</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> 
    variable_value<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin:senha_fornecida_pela_seguranca&#39;</span>
    <span style="color:#66d9ef">WHERE</span> variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin-admin_credentials&#39;</span>;
<span style="color:#66d9ef">LOAD</span> <span style="color:#66d9ef">ADMIN</span> VARIABLES <span style="color:#66d9ef">TO</span> RUNTIME;
SAVE <span style="color:#66d9ef">ADMIN</span> VARIABLES <span style="color:#66d9ef">TO</span> DISK;
</code></pre></div><ul>
<li>Alterando algumas configurações</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin-stats_mysql_connection_pool&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin-stats_mysql_connections&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;admin-stats_mysql_query_cache&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">10</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-ping_timeout_server&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">10</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-connect_timeout_server&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#ae81ff">10</span> <span style="color:#66d9ef">WHERE</span> 
    variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-poll_timeout&#39;</span>;
<span style="color:#75715e">-- Carregando as configurações
</span><span style="color:#75715e"></span><span style="color:#66d9ef">LOAD</span> MYSQL VARIABLES <span style="color:#66d9ef">TO</span> RUNTIME;
<span style="color:#66d9ef">LOAD</span> MYSQL SERVERS <span style="color:#66d9ef">TO</span> RUNTIME;
<span style="color:#75715e">-- Persistindo no banco de dados
</span><span style="color:#75715e"></span>SAVE MYSQL VARIABLES <span style="color:#66d9ef">TO</span> DISK;
SAVE MYSQL SERVERS <span style="color:#66d9ef">TO</span> DISK;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;0.0.0.0:3306&#39;</span> 
    <span style="color:#66d9ef">WHERE</span> variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-interfaces&#39;</span>;
SAVE MYSQL VARIABLES <span style="color:#66d9ef">TO</span> DISK;
PROXYSQL <span style="color:#66d9ef">RESTART</span>
</code></pre></div><ul>
<li>Inserindo os <em>nodes</em> para monitoramento</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">[root<span style="color:#f92672">@</span>proxy<span style="color:#f92672">-</span><span style="color:#66d9ef">sql</span> <span style="color:#f92672">~</span>]<span style="color:#f92672">#</span>
mysql <span style="color:#f92672">-</span>uadmin <span style="color:#f92672">-</span>h <span style="color:#ae81ff">127</span>.<span style="color:#ae81ff">0</span>.<span style="color:#ae81ff">0</span>.<span style="color:#ae81ff">1</span> <span style="color:#f92672">-</span>P6032 <span style="color:#f92672">-</span>psenha_fornecida_pela_seguranca
mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">INSERT</span> <span style="color:#66d9ef">INTO</span> mysql_servers(hostgroup_id,hostname,port) 
    <span style="color:#66d9ef">VALUES</span> (<span style="color:#ae81ff">1</span>,<span style="color:#e6db74">&#39;192.168.3.110&#39;</span>,<span style="color:#ae81ff">3306</span>),(<span style="color:#ae81ff">1</span>,<span style="color:#e6db74">&#39;192.168.3.111&#39;</span>,<span style="color:#ae81ff">3306</span>);
</code></pre></div><ul>
<li>Configurando o usuário do monitoramento, a senha deve ser a mesma informada na criação</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;monitor&#39;</span> 
    <span style="color:#66d9ef">WHERE</span> variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-monitor_username&#39;</span>;
<span style="color:#66d9ef">UPDATE</span> global_variables <span style="color:#66d9ef">SET</span> variable_value<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;senha_aleatoria&#39;</span> 
    <span style="color:#66d9ef">WHERE</span> variable_name<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;mysql-monitor_password&#39;</span>;
<span style="color:#75715e">-- Carregando as configurações
</span><span style="color:#75715e"></span><span style="color:#66d9ef">LOAD</span> MYSQL VARIABLES <span style="color:#66d9ef">TO</span> RUNTIME;
<span style="color:#66d9ef">LOAD</span> MYSQL SERVERS <span style="color:#66d9ef">TO</span> RUNTIME;
<span style="color:#75715e">-- Persistindo no banco de dados
</span><span style="color:#75715e"></span>SAVE MYSQL VARIABLES <span style="color:#66d9ef">TO</span> DISK;
SAVE MYSQL SERVERS <span style="color:#66d9ef">TO</span> DISK;
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#f92672">[</span>root@proxy-sql ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
systemctl restart proxysql.service
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#75715e">-- Verificando o status do monitoramento, se retornar NULL 
</span><span style="color:#75715e">-- em ping_error, está funcionando
</span><span style="color:#75715e"></span><span style="color:#66d9ef">SELECT</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">FROM</span> monitor.mysql_server_ping_log;
</code></pre></div><ul>
<li>Criando usuário do sistema, é prudente manter a mesma senha, para se tornar transparente</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">INSERT</span> <span style="color:#66d9ef">INTO</span> mysql_users (username,password,default_hostgroup) 
    <span style="color:#66d9ef">VALUES</span> (<span style="color:#e6db74">&#39;user_xxxx&#39;</span>,<span style="color:#e6db74">&#39;user_xxxx&#39;</span>,<span style="color:#ae81ff">1</span>);
<span style="color:#66d9ef">LOAD</span> MYSQL USERS <span style="color:#66d9ef">TO</span> RUNTIME;
SAVE MYSQL USERS <span style="color:#66d9ef">TO</span> DISK;
</code></pre></div><ul>
<li>Vamos aos testes</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#75715e"># Logue no ProxySQL, lembrando que a porta 6032 é para </span>
<span style="color:#75715e"># administração, e a 6033 é de uso dos bancos</span>
<span style="color:#f92672">[</span>root@proxy-sql ~<span style="color:#f92672">]</span><span style="color:#75715e">#</span>
mysql -uuser_sistema -h 127.0.0.1 -P6033 -puser_sistema
</code></pre></div><div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#75715e">-- Faça uma Query simples
</span><span style="color:#75715e"></span><span style="color:#66d9ef">show</span> databases;
use banco_de_dados;
<span style="color:#66d9ef">SELECT</span> <span style="color:#f92672">*</span> <span style="color:#66d9ef">FROM</span> tabela;
<span style="color:#75715e">-- Agora logue no MySQL-01 e pare o banco de dados
</span><span style="color:#75715e"></span>root<span style="color:#f92672">@</span>mysql<span style="color:#f92672">-</span><span style="color:#ae81ff">01</span>:<span style="color:#f92672">~#</span>
systemctl stop mysql.service
<span style="color:#75715e">-- Repita a consulta anterior e observe a mágica
</span><span style="color:#75715e">-- Agora inverta, suba o MySQL-01 e pare o MySQL-02
</span><span style="color:#75715e">-- E repita a consulta
</span></code></pre></div><ul>
<li>Verificando o status dos servidores</li>
</ul>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sql" data-lang="sql">mysql<span style="color:#f92672">&gt;</span>
<span style="color:#66d9ef">SELECT</span> srv_host,status <span style="color:#66d9ef">FROM</span> stats.stats_mysql_connection_pool;
</code></pre></div><h2 id="fim">FIM</h2>
<p>Todos os arquivos estão no repositório do <a href="https://github.com/rafaelarcanjo/ProxySQL">Github</a></p>
]]></content>
        </item>
        
    </channel>
</rss>
