<?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>Debugando.com &#187; MySQL</title>
	<atom:link href="http://www.debugando.com/categoria/banco-de-dados/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Rússia aprova fusão da Oracle a Sun, mas com ressalvas</title>
		<link>http://www.debugando.com/russia-aprova-fusao-da-oracle-a-sun-mas-com-ressalvas/</link>
		<comments>http://www.debugando.com/russia-aprova-fusao-da-oracle-a-sun-mas-com-ressalvas/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 22:43:11 +0000</pubDate>
		<dc:creator>Lincoln César</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[desenvolvedor mysql]]></category>
		<category><![CDATA[o]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[sun microsystems]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=947</guid>
		<description><![CDATA[


Comissão Europeia já havia aprovado fusão anteriormente.
Oracle prometeu continuar desenvolvendo MySQL; criador duvida.
A agência reguladora antitruste da Rússia, FAS, aprovou nesta         sexta-feira (19/03) a compra da Sun Microsystems pela Oracle por         US$ 7 bilhões sob a condição de que [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Comissão Europeia já havia aprovado fusão anteriormente.<br />
Oracle prometeu continuar desenvolvendo MySQL; criador duvida.</strong></p>
<p>A agência reguladora antitruste da Rússia, FAS, aprovou nesta         sexta-feira (19/03) a compra da <strong>Sun Microsystems</strong> pela <strong>Oracle</strong> por         US$ 7 bilhões sob a condição de que a Oracle continue         desenvolvendo a base de dados MySQL, da Sun.</p>
<p>O FAS afirmou que teria causa para ir à justiça e         pedir por uma invalidação do acordo, já aprovado         incondicionalmente pela União Europeia, caso a Oracle não cumpra         com suas exigências.</p>
<p>“O FAS analisou o pedido e &#8230; decidiu aprová-lo”, afirmou a         agência em comunicado, acrescentando que a aprovação seria         válida apenas se a Oracle cumprir suas exigências em relação ao         MySQL.</p>
<p>A agência afirmou que a Oracle deve continuar         criando novas versões da base de dados dentro das especificações         da licença normalmente acessível e que não deve forçar clientes         a contratar seus serviços caso queiram uma licença comercial         para o uso do MySQL.</p>
<p>O FAS ainda acrescentou que a condição vale por apenas         quatro anos após a conclusão formal do acordo.</p>
<p>Em janeiro, a Oracle conseguiu a aprovação da         União Europeia para a aquisição, após prometer que manterá o         mercado aberto para que outros produzam software de         armazenamento para o MySQL e que aumentará investimentos no         setor.</p>
<p>A empresa também prometeu criar um conselho         separado para consumidores usuários da base de dados do MySQL.         Essas concessões deixaram a reguladora europeia satisfeita de         que o negócio não afetará de maneira nenhuma o mercado.</p>
<p>Mas o criador do MySQL, Michael Widenius, que é         contra o plano de fusão, disse que a decisão executiva da União         Europeia foi errada e divulgou sua oposição na Rússia e na         China.</p>
<p><strong>Fonte:</strong> G1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/russia-aprova-fusao-da-oracle-a-sun-mas-com-ressalvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica: Migrando MySQL para PostgreSQL</title>
		<link>http://www.debugando.com/dica-migrando-mysql-para-postgresql/</link>
		<comments>http://www.debugando.com/dica-migrando-mysql-para-postgresql/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 12:08:32 +0000</pubDate>
		<dc:creator>Lincoln César</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[migrando mysql]]></category>
		<category><![CDATA[migrando MySQL para PostgreSQL]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=800</guid>
		<description><![CDATA[Migrando MySQL para PostgreSQL
Você pode já ter lido vários artigos sobre esse assunto na web, mas provavelmente conseguiu apenas partes da informação necessária. É hora de colocar tudo junto e na prática.
Você tem um projeto/sistema rodando no MySQL e de repente você descobre que você precisa migrar para PostgreSQL. E você se depara com um [...]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.debugando.com/wp-content/uploads/2010/01/postgresql_logo.png"><img class="alignleft size-full wp-image-801" style="margin: 5px;" title="postgresql_logo" src="http://www.debugando.com/wp-content/uploads/2010/01/postgresql_logo.png" alt="" width="192" height="149" /></a>Migrando MySQL para PostgreSQL</h1>
<p>Você pode já ter lido vários artigos sobre esse assunto na web, mas provavelmente conseguiu apenas partes da informação necessária. É hora de colocar tudo junto e na prática.</p>
<p>Você tem um projeto/sistema rodando no MySQL e de repente você descobre que você precisa migrar para PostgreSQL. E você se depara com um SQL diferente para cada plataforma, o MySQL trabalha com SQL e o PostgreSQL trabalha com <strong>PL/SQL</strong>, mas você não tem tempo para reescrever o código do zero e, logicamente, se você tiver tempo de reestruturar o seu projeto para PostgreSQL, o seu Data Base vai ficar mais organizado e, como um bom Data Base deve ser com relacionamento entre tabelas, trigger, functions e etc.</p>
<p>Na verdade, pode haver boas razões para migrar um Data Base de MySQL para PostgreSQL:</p>
<ul>
<li>Você podera vender o seu produto com total tranquilidade (<a href="http://www.postgresql.org/about/licence">PostgreSQL é licenciada BSD</a>, <a href="http://www.mysql.com/about/legal/">o diferente de  MySQL</a>)</li>
<li> Você pode encontrar artigos &#8220;Migrando MySQL para PostgreSQL&#8221; na web, mas você não vai encontrar nenhuma &#8220;Migrando PostgreSQL para MySQL&#8221;</li>
<li>PostgreSQL não pode ser apenas mais um péssimo banco de dados se o Skype, Cisco, Juniper, IMDb, Pandora ou NOVA TV decidiram confiar nele, além de a Sun Microsystems tê-lo tornado como base de dados de escolha (o que é extremamente hilario, já que em janeiro de 2008 ela comprou o MySQL)</li>
</ul>
<p>No PostgreSQL você ainda pode sentir um pouco como se senti uma pessoa com segurança particular. Existem alguns grandes projetos como o Asterisk, Horde ou DBMail que já reconheceram suas qualidades e que, embora o MySQL tenha sido sua primeira escolha de Banco de Dados, eles estão demonstrando grande esforço para fazer tudo funcionar corretamente.</p>
<h4>Convertendo Base de Dados MySQL para PostgreSQL</h4>
<p>Primeiro vamos fazer Backup de nossa Data Base MySQL com o software mysqldump do próprio MySQL:</p>
<div>
<pre><strong><code>"mysqldump --compatible=postgresql bancodedados &gt; bkp-bancodedados.sql"</code></strong></pre>
</div>
<p>Convertendo caracteres para o SQL ficar funcional no PostgreSQL:</p>
<div>
<pre><code><strong>"sed "s/\\\'/\'\'/g" bkp-bancodedados.sql"</strong>

<strong>*</strong> Este processo vai demorar muito tempo porque o software "sed" varrerá
 todo o arquivo para fazer a conversão</code></pre>
<p>Colocando para funcionar: importando para o PostgreSQL</p>
<div>
<pre><strong><code>"psql -h server -d databasename -U username -W &lt; bkp-bancodedados.sql"</code></strong></pre>
</div>
<p>Com isso você migrou sua estrutura de Dados de MySQL para PostgreSQL.</p>
<p>Fonte: iMasters</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/dica-migrando-mysql-para-postgresql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Conectando C# ao MySQL</title>
		<link>http://www.debugando.com/conectando-c-ao-mysql/</link>
		<comments>http://www.debugando.com/conectando-c-ao-mysql/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:42:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=635</guid>
		<description><![CDATA[Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.
Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja [...]]]></description>
			<content:encoded><![CDATA[<p>Quem está habituado a programar C# normalmente utiliza SQL Server como banco de dados, uma vez que ela está integrada no Visual Studio e, por isso mesmo, existe grande facilidade em trabalhar com as duas ferramentas.</p>
<p>Por vezes existem projetos em que se torna conveniente (por várias razões) utilizar outro tipo de base de dados. Seja que banco de dados for, a sua integração é sempre diferente do SQL Server.</p>
<p>Neste caso vou mostrar como fazer a integração entre o C# e o MySQL.</p>
<p>Supondo que já existe uma instalação do MySQL na máquina, precisamos instalar um intermediário entre o C# e a base de dados. Neste caso necessitamos instalar o MySQL Connector NET.</p>
<p><a class="ext" href="http://dev.mysql.com/downloads/connector/net/6.0.html">Download</a></p>
<p>A <a class="ext" href="http://dev.mysql.com/downloadshttp://dev.mysql.com/downloads/connector/net/5.2.html">versão 5.2</a> já tem suporte ao Visual Studio 2008, mas eu vou utilizar a última versão (6.0).</p>
<p>Instalamos o Connector Net 6.0.</p>
<p>Devemos já ter uma base de dados com uma tabela (users por exemplo), em que os campos da tabela são: id, nome, email.</p>
<p>Como exemplo criamos um projecto Windows Forms Application.</p>
<p>Antes de mais nada, devemos fazer uma referência à classe que vai ligar o C# ao MySQL. Para isso vamos ao painel Solution Explorer, na raiz do projeto, clicamos com o lado direito do mouse e selecionamos Add Reference.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp1.gif" alt="" /></p>
<p>Na primeira divisória (.NET) selecionamos a referência MySQL.Data e damos OK.</p>
<p>Não esquecer: incluir no início do código as classes:</p>
<p><em>using  System.Data; </em></p>
<p><em>using MySql.Data.MySqlClient;</em></p>
<p>Sem adicionar a referência à MySQL.Data, a classe MySql.Data.MySqlClient não será reconhecida.</p>
<p>Para exemplificar fazemos um formulário de inserção de dados (nome e e-mail) na base de dados.</p>
<p>No form colocamos duas caixas de texto, uma para o nome (txtNome) e outra para o e-mail (txtMail) e um botão que terá a ação de inserir os dados na base de dados.</p>
<p><img src="http://conteudo.imasters.uol.com.br/13681/mysqlcsharp2.gif" alt="" /></p>
<p>Vamos então definir, em primeiro lugar, o dataset e a string de conexão à base de dados.</p>
<div class="codigo">
<pre><em><code><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pln"> bdConn</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">MySqlDataAdapter</span><span class="pln"> bdAdapter</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">private</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pln"> bdDataSet</span><span class="pun">;</span><span class="pln"> </span><span class="com">//MySQL</span></code></em></pre>
</div>
<p><em>Na ação do botão:</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Definição do dataset</span><span class="pln">
bdDataSet </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">DataSet</span><span class="pun">();</span><span class="pln">
 </span><span class="com">//Define string de conexão</span><span class="pln">
bdConn </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlConnection</span><span class="pun">(</span><span class="str">"Persist Security  Info=False;server=localhost;database=rfidapp;uid=root;server=localhost;database=rfidapp;uid=root;pwd=''"</span><span class="pun">);</span></code></em></pre>
</div>
<p><em>Neste caso a base de dados não tem password.</em></p>
<div class="codigo">
<pre><em><code><span class="com">//Abre conecção</span><span class="pln">
 </span><span class="kwd">try</span><span class="pun">{</span><span class="pln">
        bdConn</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">catch</span><span class="pun">{</span><span class="pln">
 </span><span class="typ">MessageBox</span><span class="pun">.</span><span class="typ">Show</span><span class="pun">(</span><span class="str">"Impossível estabelecer conexão"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="com">//Verifica se a conexão está aberta</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">bdConn</span><span class="pun">.</span><span class="typ">State</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="typ">ConnectionState</span><span class="pun">.</span><span class="typ">Open</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
        </span><span class="com">//Se estiver aberta insere os dados na BD</span><span class="pln">
</span><span class="typ">MySqlCommand</span><span class="pln"> commS </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MySqlCommand</span><span class="pun">(</span><span class="str">"INSERT INTO regists VALUES('',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtNome </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\',\\'"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> txtMail </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\\')"</span><span class="pun">,</span><span class="pln"> bdConn</span><span class="pun">);</span><span class="pln">
commS</span><span class="pun">.</span><span class="typ">BeginExecuteNonQuery</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></code></em></pre>
</div>
<p>Tome atenção na sintaxe do SQL para o MySQL (INSERT) que é um pouco diferente do C#/SQL Server.</p>
<p>Neste momento o formulário deverá  inserir dados no BD.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/13681/mysql/conectando_c_ao_mysql/" target="_blank">Imasters</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/conectando-c-ao-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Liferay Portal &#8211; Configuração da ligação a uma base de dados MySQL</title>
		<link>http://www.debugando.com/liferay-portal-configuracao-da-ligacao-a-uma-base-de-dados-mysql/</link>
		<comments>http://www.debugando.com/liferay-portal-configuracao-da-ligacao-a-uma-base-de-dados-mysql/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:36:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Liferay]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=539</guid>
		<description><![CDATA[1. Criação da Base de Dados MySQL
Criem a base de dados com o nome lportal.
Poderão fazer isto utilizando o MySQL Administrator (a ferramenta de administração do MySQL) ou usando a seguinte linha de comando:
mysqladmin &#8211;default-character-set=utf8 create lportal
2. Configuração do acesso  à base de dados com o eclipse
Abram o Data Source Explorer do eclipse (Window [...]]]></description>
			<content:encoded><![CDATA[<h4>1. Criação da Base de Dados MySQL</h4>
<p>Criem a base de dados com o nome <em>lportal</em>.</p>
<p>Poderão fazer isto utilizando o MySQL Administrator (a ferramenta de administração do MySQL) ou usando a seguinte linha de comando:</p>
<p>mysqladmin &#8211;default-character-set=utf8 create lportal</p>
<h4>2. Configuração do acesso  à base de dados com o eclipse</h4>
<p>Abram o Data Source Explorer do eclipse (Window -&gt; Show view -&gt; Data Source Explorer).</p>
<p>Selecionem o ícone &#8216;New Connection Profile&#8217; ou usem o botão direito do mouse sobre &#8216;Databases&#8217; e depois selecionem &#8216;New&#8217;.</p>
<p>Na janela &#8216;New Connection Profile&#8217; selecionem o tipo SQL Model-JDBC Connection.</p>
<p>No quadro seguinte, indiquem um nome para o perfil (ex: &#8216;Liferay &#8211; Mysql&#8217;).</p>
<p>No último quadro, usem o botão de procura (&#8216;?&#8217;) na lista &#8220;Select a browser&#8221;.</p>
<p>Adicionem uma nova definição:</p>
<ul>
<li>Localizem o template para bases de dados MySQL na árvore (Database -&gt; MySQL -&gt; 5.0 -&gt; MySQL JDBC Driver).</li>
</ul>
<ul>
<li>Alterem as definições do driver:- Alterem o nome para &#8216;Liferay MySQL Driver&#8217;;
<p>- Removam o driver &#8216;default&#8217; e adicionem um novo Jar correspondente ao arquivo $WORKSPACE/ext/lib/development/mysql.jar ($WORKSPACE corresponde à localização da pasta do seu <em>workspace</em> no sistema de arquivos);</p>
<p>- Configurem o valor das propriedades de acesso (username, password, etc?) tendo em atenção que o valor do &#8216;Database Name&#8217; e, por consequência, o final da linha do &#8216;Connection URL&#8217; deverá ser &#8216;lportal&#8217;.</li>
<li> Confirmem as alterações e selecionem agora este driver nas definições do driver (Database -&gt; MySQL -&gt; 5.0 -&gt; Liferay MySQL Driver).</li>
</ul>
<p>Voltem de novo à janela de criação do perfil e validem que todas as informações estão de acordo com a sua configuração (podem testar a ligação a partir desta janela).</p>
<h4>3. Criação do modelo de dados</h4>
<p>Editem o arquivo create-mysql.sql na pasta /sql/create do projecto &#8216;ext&#8217;. Caso não tenham memória para desperdiçar (é o meu caso), respondam afirmativamente quando o eclipse perguntar se pretendem desligar a validação de sintaxe do arquivo.</p>
<p>No topo da janela de edição do ficheiro está a configuração do &#8216;Connection profile&#8217;. Selecionem o tipo Generic JDBC_1.x, o driver &#8216;Liferay &#8211; Mysql&#8217; e a base de dados lportal.</p>
<p><strong>Nota</strong>: caso o status não seja &#8216;Connected&#8217; , vocês não vão conseguir ver o nome da base de dados.<br />
Neste caso devem acessar o Data Source Explorer ( Window -&gt; Show View -&gt; Data Source Explorer), selecionar a Database &#8216;Liferay &#8211; MySQL&#8217; e fazer connect (botão direito do mouse)</p>
<p>Comentem as três primeiras linhas do ficheiro, uma vez que a base de dados já foi criada</p>
<ul>
<li>drop database if exists lportal;</li>
<li>create database lportal character set utf8;</li>
<li>use lportal;</li>
</ul>
<p>Gravem e executem o sql (ctrl+alt+X ou Execute All no menu contextual).</p>
<h4>4. Configuração do datasource no tomcat</h4>
<p>Editem o arquivo Root.xml localizado na pasta servers/tomcat/conf/Catalina/localhost do projeto &#8216;ext&#8217;.</p>
<p>Comentem o datasource do Hypersonic e  descomentem o datasource do MySQL.</p>
<p>Preencham os atributos username e password e, caso não estejam usando os valores <em>default</em> do MySQL, editem também o valor do atributo url, de acordo com a sua configuração.</p>
<p>Gravem as alterações.</p>
<h4>5. Deploy da configuração para o servidor</h4>
<p>Copiem o arquivo Root.xml para a pasta conf/Catalina/localhost do tomcat.</p>
<p>Copiem e o arquivo mysql.jar para para a pasta lib/ext do tomcat.</p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/12283/mysql/liferay_portal_-_configuracao_da_ligacao_a_uma_base_de_dados_mysql/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/liferay-portal-configuracao-da-ligacao-a-uma-base-de-dados-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cluster no MySQL &#8211; Parte 2</title>
		<link>http://www.debugando.com/cluster-no-mysql-parte-2/</link>
		<comments>http://www.debugando.com/cluster-no-mysql-parte-2/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:14:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Cluster]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=537</guid>
		<description><![CDATA[Antes de entrar nos detalhes técnicos, recomendo a todos que estiverem lendo esta coluna que confiram a primeira parte da configuração do cluster, onde mostro qual é a arquitetura da solução e discuto alguns aspectos de um cluster MySQL. A primeira parte pode ser encontrada aqui.
A partir do diagrama mostrado no artigo anterior precisamos fazer [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de entrar nos detalhes técnicos, recomendo a todos que estiverem lendo esta coluna que confiram a primeira parte da configuração do cluster, onde mostro qual é a arquitetura da solução e discuto alguns aspectos de um cluster MySQL. A primeira parte pode ser encontrada <a href="http://imasters.uol.com.br/artigo/11673/mysql/cluster_no_mysql_-_parte_01/">aqui</a>.</p>
<p>A partir do diagrama mostrado no artigo anterior precisamos fazer uma instalação nova do MySQL no servidor 192.168.1.35. O servidor 192.168.1.15 conterá as ferramentas administrativas do cluster e não precisa do MySQL instalado. Contudo, as ferramentas administrativas do cluster são distribuídas junto com os arquivos do MySQL.</p>
<p>A instalação do MySQL no servidor 192.168.1.35 deve ser feita da mesma maneira que o servidor já existente, isto é, o MySQL no servidor 192.168.1.35 deve conter todas as opções e configurações do servidor 192.168.25, pois a idéia é que o cluster funcione de forma transparente para a aplicação. Além disso, também é preciso transferir os usuários, objetos e permissões, pois o banco de dados será criado posteriormente. Em resumo, é preciso primeiro duplicar o ambiente do servidor 192.168.1.25 para o servidor 192.168.1.35, tomando cuidado com as configurações.</p>
<p>Uma vez que os dois servidores MySQL estiverem configurados e sendo executados nos servidores 192.168.1.25 e 192.168.1.35 podemos começar a configuração do cluster. O primeiro passo é configurar o serviço que fará a administração do cluster chamado <strong>mgmd </strong>(management deamon) no servidor 192.168.1.15. Antes de iniciar este serviço é preciso cadastrar os endereços I.P. dos nós do cluster no arquivo de configurações chamado <strong>config.ini</strong>, que está no mesmo diretório dos binários do mysql.</p>
<p>O arquivo <strong>config.ini</strong> possui várias sessões e chaves de configuração. De acordo com a arquitetura do exemplo, precisamos indicar neste arquivo que o servidor 192.168.1.15 conterá as ferramentas administrativas do cluster e que os servidores 192.168.1.25 e 192.168.1.35 serão os nós do cluster. Fazemos isso modificando a chave <strong>HostName</strong> da sessão <strong>[NDB_MGMD]</strong> de modo a colocar o endereço do servidor que conterá as ferramentas administrativas. Para cada nó do cluster devemos colocar o seu endereço na chave <strong>HostName</strong> da sua respectiva sessão <strong>[NDBD]</strong>. A Figura 1 mostra como ficará o arquivo <strong>config.ini</strong> do servidor que contém as ferramentas administrativas do cluster após a modificação de seu conteúdo em um simples editor de texto. As mudanças na seção <strong>[NDB_MGMD]</strong> são destacadas pelo retângulo amarelo e as modificações nas duas seções <strong>[NDBD]</strong> são destacadas pelo retângulo branco.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura1.png" alt="Figura 1. Modificações no arquivo de configuração config.ini" /><span class="imgdesc">Figura 1. Modificações no arquivo de configuração config.ini</span></p>
<p>Após acertar os endereços IP dos servidores no arquivo de configuração config.ini é preciso iniciar o serviço mgmd (management deamon). Antes de iniciá-lo é preciso ter certeza que os MySQL dos servidores indicados como nós do cluster não estão sendo executados. Para iniciar o serviço mgmd no servidor 192.168.1.15 basta executar o deamon pelo comando ndb_mgmd, como as últimas linhas da Figura 2 mostram. Para verificar se o serviço foi iniciado sem problemas podemos utilizar o seguinte comando que verifica os processos do servidor: ps -A | grep mgm.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura2.png" alt="Figura 2. Iniciando o servidor ndb_mgmd." /><span class="imgdesc">Figura 2. Iniciando o servidor ndb_mgmd.</span></p>
<p>Após iniciar o serviço podemos nos conectar localmente ou remotamente na ferramenta de administração do cluster. Esta ferramenta chama-se Management Client e é executada pelo comando ndb_mgm. Após iniciar a ferramenta devemos enviar o comando SHOW para verificar o estado do cluster, como mostra a Figura 3.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura3.png" alt="Figura 3. Executando o Management Client do cluster MySQL." /><span class="imgdesc">Figura 3. Executando o Management Client do cluster MySQL.</span></p>
<p>A ferramenta Management Client é um console para a administração do cluster MySQL no Linux. Após a execução do comando SHOW ela mostra os nós que estão conectados ao cluster. Pode-se notar pela Figura 3 que o cluster colocou o id 2 para o servidor 192.168.1.25 e o id 3 para o servidor 192.168.1.35. A ferramenta também mostra que o id 1 corresponde ao servidor 192.168.1.5, pois ele contém o serviço de administração do cluster (ndb_mdmd). É possível modificar as configurações do cluster, inclusive adicionar ou remover nós, por meio de comandos enviados ao Management Client.</p>
<p>Agora que já configuramos o serviço de administração do cluster é preciso modificar as configurações em cada um dos nós. Estas configurações são armazenadas no arquivo de configuração do MySQL chamado my.cnf. Não devemos nos esquecer de parar o serviço do MySQL antes de alterar o arquivo my.cnf. No exemplo este arquivo estava localizado no diretório /etc/mysql, porém esta localização pode variar de acordo com a instalação do MySQL.</p>
<p>Para configurar um nó de modo que ele faça parte de um cluster MySQL é preciso alterar três chaves em duas sessões do arquivo my.cnf. As duas primeiras chaves são a ndbcluster e a ndb-connectstring, sendo que esta última deve receber o endereço 192.168.1.15, que é o servidor onde o serviço de administração do cluster está instalado. Por padrão, estas chaves estão comentadas com o símbolo cerquilha (#) e estão dentro da sessão [MYSQLD]. Basta retirar os comentários e colocar o valor o endereço IP 192.168.1.15, como mostrado na parte esquerda da Figura 4 e destacada pelo retângulo vermelho.</p>
<p>Também é preciso alterar a chave ndb-connectionstring da sessão [MYSQL_CLUSTER], que também está comentada por padrão e se encontra abaixo da sessão [MYSQLD] no arquivo my.cnf. Da mesma forma que a chave anterior, é preciso colocar o endereço do servidor que contém o serviço de administração do cluster na chave ndb-connectionstring da sessão [MYSQLD]. Esta chave é mostrada à direita na Figura 4 e destacada pelo retângulo preto.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura4.png" alt="Figura 4. Chaves que devem ser modificadas no arquivo my.cnf" /><span class="imgdesc">Figura 4. Chaves que devem ser modificadas no arquivo my.cnf</span></p>
<p>Após a modificação das chaves no arquivo my.cnf é preciso iniciar o serviço do MySQL. No exemplo iniciei o serviço utilizando o comando mysqld_safe -user=mysql &amp;. Além disso também é preciso iniciar o serviço ndbd nos nós do cluster, pois ele é o responsável por gerenciar o acesso aos arquivos com os dados compartilhados. Os comandos que iniciam os serviços mysql e ndbd são mostrados na Figura 5.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura5.png" alt="Figura 5. Iniciando os serviços MySQL e ndbd em um dos nós do cluster" /><span class="imgdesc">Figura 5. Iniciando os serviços MySQL e ndbd em um dos nós do cluster</span></p>
<h3>Nota importante:</h3>
<p>é preciso repetir os passos anteriores para cada nó do cluster. Ou seja, tanto para o servidor 192.168.1.25 como para o servidor 192.168.1.35 é preciso alterar o arquivo de configuração my.cnf e iniciar os serviços MySQL e ndbd.</p>
<p>A partir deste momento o cluster já está sendo executado. Podemos enviar o comando SHOW na interface console do Management Client do cluster e verificar que os dois nós já são considerados parte do cluster, como mostra a Figura 6.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura6.png" alt="Figura 6. Verificando os nós do cluster." /></p>
<p><span class="imgdesc">Figura 6. Verificando os nós do cluster.</span></p>
<p>Apesar de o cluster já estar configurado, a partir desde momento os dois servidores MySQL ainda estão trabalhando de forma independente. Para que possamos usufruir das funcionalidades do cluster é preciso criar manualmente um banco de dados com o mesmo nome em cada servidor e, dentro deste banco de dados, criar tabelas que utilizem o engine de banco de dados NDBCLUSTER. Mas atenção: o banco de dados deve ser criado manualmente nos dois nós com o comando CREATE DATABASE, porém as tabelas precisam ser criadas apenas uma vez em qualquer um dos nós do cluster. A Figura 7 mostra a criação do banco de dados chamado CLUSTER e da tabela TB_ONE em um dos nós do cluster e utilizando os comandos CREATE DATABASE e CREATE TABLE, respectivamente.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11901/Parte2_Figura7.png" alt="Figura 7. Criando o banco de dados CLUSTER e a tabela TB_ONE." /><span class="imgdesc">Figura 7. Criando o banco de dados CLUSTER e a tabela TB_ONE.</span></p>
<p>Como a tabela TB_ONE foi criada utilizando o engine de banco de dados NDBCLUSTER todas as modificações nos dados realizadas em qualquer um dos nós será replicada automaticamente para os demais. Podemos fazer um teste simples incluindo uma linha na tabela TB_ONE em um dos nós e verificar que esta linha foi automaticamente enviada para a tabela TB_ONE do outro nó.</p>
<p>Com o cluster conseguimos montar uma solução que atende a requisitos de alta disponibilidade, pois caso um nó do cluster não esteja operacional isso não será um problema para a aplicação, uma vez que os outros nós funcionaram de forma independente. Quando o nó que apresentou um problema foi iniciado novamente o próprio serviço NDBD irá procurar as informações perdidas e tentará sincronizar os dados da tabela.</p>
<p>Um detalhe importante de ser lembrando é que com o cluster os usuários podem se conectar tanto no servidor 192.168.1.25 (ubuntu02) como no servidor 192.168.1.35 (ubuntu03). Mas se eles tentarem se conectar ao servidor que possui as ferramentas administrativas, cujo endereço é 192.168.1.5 (ubuntu01), eles não conseguiram se conectar. Por isso é recomendável utilizar o serviço MySQLProxy, explicado anteriormente <a href="http://imasters.uol.com.br/artigo/11161/mysql/balanceamento_de_carga_no_mysql_-_parte_1/">aqui</a>, de modo que as aplicações possam se conectar em apenas um servidor que conterá tanto o software de balanceamento de carga como as ferramentas administrativas do cluster. Este é o cenário descrito na primeira parte do artigo, onde sugiro colocar o MySQL Proxy e as ferramentas administrativas do cluster no servidor 192.168.1.5 para montar uma solução completa de balanceamento de carga, tolerância a falhas e replicação dos dados por meio do cluster.</p>
<p>Com isso terminamos a segunda parte do artigo que explica como montar um cluster no MySQL. Nas próximas colunas veremos passo a passo como configurar o serviço de replicação do MySQL.</p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/11901/mysql/cluster_no_mysql_-_parte_2/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/cluster-no-mysql-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cluster no MySQL &#8211; Parte 01</title>
		<link>http://www.debugando.com/cluster-no-mysql-parte-01/</link>
		<comments>http://www.debugando.com/cluster-no-mysql-parte-01/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:11:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Cluster]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=535</guid>
		<description><![CDATA[A necessidade de se montar um cluster no MySQL está relacionada à alta disponibilidade das informações e à tolerância a falhas. Com dois ou mais servidores MySQL sendo executados em cluster os dados são automaticamente replicados entre os servidores e cada nó que pertence ao cluster pode ser removido sem afetar a disponibilidade da aplicação.
O [...]]]></description>
			<content:encoded><![CDATA[<p>A necessidade de se montar um cluster no MySQL está relacionada à alta disponibilidade das informações e à tolerância a falhas. Com dois ou mais servidores MySQL sendo executados em cluster os dados são automaticamente replicados entre os servidores e cada nó que pertence ao cluster pode ser removido sem afetar a disponibilidade da aplicação.</p>
<p>O MySQL possui recursos para implementar o cluster nativamente, ou seja, não é preciso instalar nenhum software adicional, além da versão do MySQL já preparada para receber o cluster. O nome utilizado para identificar o componente do MySQL que permite a criação de clusters é NDBCluster e funciona como um engine do banco de dados. Neste artigo utilizarei o MySQL versão 5.0.51 sendo executado em servidores Linux com a distribuição Ubuntu 8.04 (Hard Heron).</p>
<p>O conceito de engine pode confundir alguns usuários que estão acostumados com o SQL Server ou mesmo o Oracle, pois estes produtos não permitem que o usuário escolha o engine do banco de dados. A idéia é que cada engine proporcione características próprias que tragam algum benefício. Por exemplo, no MySQL temos um engine que permite a utilização de transações. Para criar o cluster é preciso indicar que as tabelas que apresentaram a replicação automática utilizam o engine NDBCLUSTER. Notem que não é preciso nenhum hardware específico para a criação de um cluster MySQL.</p>
<p>O cluster do MySQL age de forma transparente, ou seja, a aplicação cliente não precisa saber que o cluster do MySQL está sendo utilizado. Esta característica facilita a utilização desta ferramenta e expande o leque de possibilidades tanto para o desenvolvedor como para quem administra o MySQL. Do ponto de vista de desenvolvimento, não há nenhuma mudança significativa: basta apenas continuar conectando em um endereço IP normalmente. Já para quem administra é preciso cuidados especiais, pois algumas configurações não são replicadas pelo cluster. Por exemplo, os logins e as permissões devem ser configuras nos servidores de forma independente.</p>
<p>É possível utilizar o cluster do MySQL em conjunto com o MySQL Proxy, apresentado em uma <a class="ext" href="http://imasters.uol.com.br/artigo/11161/mysql/balanceamento_de_carga_no_mysql_-_parte_1/">coluna anterior aqui no iMasters</a>. Como o cluster apenas replica as instruções para todos os nós ele não distribui a carga entre os servidores. A utilização do MySQL Proxy com o cluster fornece a consistência ao ambiente, pois desta maneira o cluster garante que as bases de dados ficaram iguais. Já o MySQL Proxy permite dividir a carga entre os servidores de acordo com alguma regra específica. Porém cabe aqui dizer que o MySQL Proxy possui recursos para programar como será feita a distribuição de carga por meio da programação na linguagem LUA.</p>
<p>Os principais componentes de um cluster MySQL são os nós, ou seja, servidores MySQL já instalados. Também é preciso dispor de um servidor que receberá o serviço de administração do cluster. Este servidor que administrará o cluster não requer um MySQL instalado, pois apenas os arquivos binários do servidor NDBCluster precisam ser executados. É possível realizar a manutenção e checar o status do cluster conectando-se ao servidor NDBCluster, remotamente ou não.</p>
<p>Para entender o exemplo que será apresentado vamos observar o diagrama da Figura 1, que traz um cenário onde um sistema qualquer é utilizado por vários usuários. Neste cenário os clientes utilizam a aplicação normalmente se conectando no servidor Linux chamado ubuntu02 cujo endereço I.P é 192.168.1.25. Este cenário não contém nenhum tipo de replicação, balanceamento de carga ou tolerância a falhas. Caso aconteça alguma indisponibilidade do banco de dados do servidor ubuntu02 o uso da aplicação ficará comprometido.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11673/Figura1_OK.png" alt="Figura 1. Ambiente sem balanceamento de carga, replicação e tolerância a falhas." /><span class="imgdesc">Figura 1. Ambiente sem balanceamento de carga, replicação e tolerância a falhas.</span></p>
<p>A partir do ambiente apresentado na Figura 1 vamos montar um cluster com três servidores: um que conterá as ferramentas de administração do cluster e dois servidores MySQL com o mesmo banco de dados que está sendo utilizado pela aplicação. Notem que poderíamos utilizar mais de dois servidores de bancos de dados de acordo com a necessidade. A idéia aqui é que o servidor que conterá as ferramentas administrativas do cluster replique as instruções enviando igualmente os dados entre os dois servidores de bancos de dados de forma simultânea. Desta maneira o cenário contará com a tolerância a falhas, pois se um servidor não estiver disponível o cluster permite que a aplicação ainda continue sendo utilizada, uma vez que um servidor ainda está disponível. A Figura 2 apresenta o cenário com a configuração do cluster.</p>
<p><img src="http://conteudo.imasters.uol.com.br/11673/Figura2_OK.png" alt="Figura 2. Ambiente com um cluster MySQL composto de dois nós." /><span class="imgdesc">Figura 2. Ambiente com um cluster MySQL composto de dois nós.</span></p>
<p>Do ponto de vista da aplicação a única mudança que deve ser feita é a mudança da conexão com o banco de dados: antes a conexão era feita diretamente para o servidor 192.168.1.25 e agora a conexão será para o servidor 192.168.1.15. Novamente, o cluster não requer que o MySQL seja instalado no servidor na qual as aplicações vão se conectar, ou seja, o servidor 192.168.1.15 não precisar ter o MySQL instalado. É preciso apenas contar com os arquivos binários que compõem o serviço do cluster. Estes arquivos binários são encontrados junto com os arquivos de instalação do MySQL.</p>
<p>O funcionamento do cluster evita a falta de sincronia entre os dois servidores. Por exemplo, se um usuário A se conectar ao cluster e fizer uma instrução UPDATE nos dados de uma tabela este UPDATE será automaticamente enviado para os servidores 192.168.1.25 e 192.168.1.35, deixando os bancos de dados em sincronia. Caso algum dos servidores não possa executar a instrução UPDATE por algum motivo um erro é gerado e automaticamente a instrução é cancelada nos dois servidores.</p>
<p>Outra questão a ser considerada é o ponto de falha representado pelo servidor ubuntu01. Se ele ficar off-line a aplicação não poderá se conectar a nenhum dos bancos de dados. Para isso existe como configurar a tolerância de falha para o serviço de cluster em outro servidor de modo que ele detecte esta falha. Porém no exemplo não apresentarei como fazer isso, pois se trata de um tópico mais avançado.</p>
<p>Existem várias formas de se trabalhar com tolerância a falhas nos servidores Linux. Para quem desejar se aprofundar recomendo soluções que envolvem a configuração de endereços I.P virtuais diretamente no kernel. Apenas para referência, uma dessas aplicações que fazem a criação de endereços I.P. virtuais no Linux é o <a class="ext" href="http://www.ultramonkey.org/">Ultra Monkey</a> com os módulos do kernal IPVS. Outra alternativa mais fácil de se configurar é o pacote do <a class="ext" href="http://www.vivaolinux.com.br/artigo/Load-Balancer-com-Failover-Perlbal-e-Heartbeat-para-servidores-web/?pagina=5">HeartBet + PerlBal</a></p>
<p>Com isso terminamos a primeira parte do artigo que explicará como montar um cluster no MySQL. Na próxima coluna veremos passo a passo como configurar o MySQL e o serviço de cluster, além da criação do banco de dados e do teste de instruções.</p>
<p>Referência:  HOWTO set up a MySQL Cluster for two servers (three servers required for true redundancy):</p>
<p><a class="ext" href="http://dev.mysql.com/tech-resources/articles/mysql-cluster-for-two-servers.html">http://dev.mysql.com/tech-resources/articles/mysql-cluster-for-two-servers.html</a></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/11673/mysql/cluster_no_mysql_-_parte_01/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/cluster-no-mysql-parte-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL GUI Tools</title>
		<link>http://www.debugando.com/mysql-gui-tools/</link>
		<comments>http://www.debugando.com/mysql-gui-tools/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 00:06:47 +0000</pubDate>
		<dc:creator>Lincoln César</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Query]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=444</guid>
		<description><![CDATA[Excelentes ferramentas para quem utiliza MySql.
MySQL Administrator
Console de administração gráfica para banco de dados MySQL
 Integre as tarefas de gestão de banco de addos MySQL com as de manutenção através de uma interface de trabalho mais visual e intuitiva chamada MySQL Administrator, o administrador oficial de banco de dados MySQL.
As operações em linha de comando [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Excelentes ferramentas para quem utiliza MySql.</strong></p>
<p><strong>MySQL Administrator</strong></p>
<p>Console de administração gráfica para banco de dados MySQL<br />
 Integre as tarefas de gestão de banco de addos MySQL com as de manutenção através de uma interface de trabalho mais visual e intuitiva chamada MySQL Administrator, o administrador oficial de banco de dados MySQL.<br />
As operações em linha de comando se executam em um entorno gráfico que ameniza as tarefas de configuração de servidores, administração de usuário e monitorização de bancos de dados MySQL, junto a tarefas de comprovação de um bom estado da replicação, backup e restauração, visualização de logs&#8230;<br />
Possui uma interface bastante funcional, facilitando o acesso a todas as opções, como autenticação de usuários, criação de cópias de segurança, otimização através de toda uma série de parâmetros ajustáveis e facilmente acessíveis.<br />
Tudo isso em uma interface mais segura que reduz a possibilidade de haver erros de manobras. </p>
<p><strong>MySQL Query Browser</strong></p>
<p>O MySQL Query Browser é uma ferramenta gráfica fornecida pela MySQL AB para criar, executar e otimizar solicitações SQL em um ambiente gráfico. Assim como o MySQL Administrator foi criado para administrar um servidor MySQL, o MySQL Query Browser foi criado para auxiliar você a selecionar e analisar dados armazenados dentro de um Banco de Dados MySQL.<br />
Enquanto todas as solicitações executadas no MySQL Query Browser também podem ser executadas pela linha de comando utilizando-se o utilitário mysql, o MySQL Query Browser permite a execução e edição dos dados de maneira gráfica, que é mais intuitiva para o usuário.<br />
MySQL Query Browser foi projetado para trabalhar com versões 4.0 ou superiores do servidor MySQL. </p>
<p><strong>MySQL Migration Toolkit</strong></p>
<p>O conversor da base de dados é uma ferramenta poderosa que faça a conversão do usuário do MS SQL a MySQL fácil e de confiança. Você pode mesmo converter sua base de dados grande que contem milhares dos registros em uma matéria de alguns segundos mesmo se sua base de dados funde tabelas múltiplas ou fileiras. O software do conversor da base de dados é inteiramente capaz converter fàcilmente e eficientemente a base de dados inteira ou registros selecionados dos table`s. MSSql ao migrator da base de dados de MySql suporta todos os tipos de dados de usuário do MS SQL e de arquitetura de Unicode. Dependendo dos privilégios no usuário de MySQL do alvo você pode exportar dados de Microsoft SQL na base de dados nova ou overwrite os índices de uma base de dados existente. A ferramenta do conversor de MySQL suporta todos os tipos de dados, chave preliminar dos atributos, chave original e chave extrangeira. </p>
<p><a href="http://dev.mysql.com/downloads/gui-tools/5.0.html">Download aqui<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/mysql-gui-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando tabela e inserindo, atualizando e excluindo dados no MySQL</title>
		<link>http://www.debugando.com/criando-tabela-e-inserindo-atualizando-e-excluindo-dados-no-mysql/</link>
		<comments>http://www.debugando.com/criando-tabela-e-inserindo-atualizando-e-excluindo-dados-no-mysql/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 18:41:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=70</guid>
		<description><![CDATA[Particularmente eu considero a linha de comando do MySQL um pouco chatinha, prefiro uma interface gráfica. Pesquisando encontrei algumas, mas a que mais me agradou foi o MySQL Query Browser, que pode ser baixado no site do MySQL.
Já que criamos nossa base e compreendemos um pouco mais sobre o MySQL, vamos criar algumas tabelas:
Carregue a [...]]]></description>
			<content:encoded><![CDATA[<p>Particularmente eu considero a linha de comando do MySQL um pouco chatinha, prefiro uma interface gráfica. Pesquisando encontrei algumas, mas a que mais me agradou foi o MySQL Query Browser, que pode ser baixado no site do MySQL.</p>
<p>Já que criamos nossa base e compreendemos um pouco mais sobre o MySQL, vamos criar algumas tabelas:</p>
<p>Carregue a base:</p>
<pre><em>mysql&gt; USE minha_base;</em></pre>
<p>Vamos criar uma tabela com os campos NOME, EMAIL, DATA:</p>
<pre><em>mysql&gt; create table tabela1 (nome VARCHAR(20), email VARCHAR(20), data DATE);</em></pre>
<p>Vejamos se a mesma foi criada:</p>
<pre><em>mysql&gt; SHOW TABLES;</em>

+-------------------------------+
| Tables_in_minha_base  |
+-------------------------------+
| tabela1                              |
+-------------------------------+</pre>
<p>E vejamos os campos que ela possui:</p>
<pre><em>mysql&gt; DESC tabela1;</em>

+-------+----------------+------+-----+---------+-------+
| Field  | Type               | Null  | Key | Default | Extra |
+-------+----------------+------+-----+---------+-------+
| nome | varchar(20) | YES  |         | NULL    |          |
| email | varchar(20) | YES  |         | NULL    |           |
| data   | date              | YES  |         | NULL    |           |
+-------+----------------+------+-----+---------+-------+</pre>
<p>E vamos inserir dados nessa tabela:</p>
<pre><em>mysql&gt;  INSERT INTO tabela1 VALUES ('Marcos Miras' , 'marcosmiras@atmsystem.com.br' , '2008-09-19');
mysql&gt; SELECT * FROM tabela1;</em>

+-----------------+-------------------------------------+---------------+
| nome               | email                                       | data              |
+-----------------+-------------------------------------+----------------+
| Marcos Miras | marcosmiras@atmsyste     | 2008-09-19 |
+-----------------+-------------------------------------+----------------+</pre>
<p>Vamos atualizar esse valor do campo &#8220;email&#8221;:</p>
<pre><em>mysql&gt; UPDATE tabela1 SET email='marcos@atmsystem.com';
mysql&gt; SELECT * FROM tabela1;</em>

+-----------------+------------------------------------+----------------+
| nome               | email                                       | data             |
+-----------------+------------------------------------+----------------+
| Marcos Miras | marcos@atmsystem.com | 2008-09-19 |
+-----------------+------------------------------------+----------------+</pre>
<p>Excluindo a entrada de registro:</p>
<pre><em>mysql&gt; DELETE FROM tabela1;
mysql&gt; SELECT * FROM tabela1;
Empty set (0.00 sec)</em></pre>
<p>Porém, percebe-se que o comando insert atualiza o campo determinado de todos os registros da tabela e o comando &#8220;delete&#8221; exclui todos os dados da tabela, para resolver esse problema conheceremos a cláusula &#8220;where&#8221;. Para testar vamos fazer várias inserções na tabela:</p>
<pre><em>mysql&gt; INSERT INTO tabela1 VALUES ('Joao Silva' , 'joao@dominio' , '2008-09-19');
mysql&gt; INSERT INTO tabela1 VALUES ('Jose Pereira' , 'ze@dominio' , '2008-09-19');
mysql&gt; INSERT INTO tabela1 VALUES ('Maria' , 'maria@dominio' , '2008-09-19');
mysql&gt; INSERT INTO tabela1 VALUES ('Pedro' , 'pedro@dominio' , '2008-09-19');
mysql&gt; SELECT * FROM tabela1;</em>

+---------------+----------------------+----------------+
| nome            | email                    | data              |
+---------------+----------------------+----------------+
| Joao Silva    | joao@dominio    | 2008-09-19 |
| Jose Pereira | ze@dominio        | 2008-09-19  |
| Maria            | maria@dominio | 2008-09-19 |
| Pedro            | pedro@dominio  | 2008-09-19 |
+---------------+----------------------+----------------+</pre>
<p>Utilizando o &#8220;where&#8221; vamos selecionar os registros da tabela1 que contenham &#8220;Pedro&#8221;:</p>
<pre><em>mysql&gt; SELECT * FROM tabela1 WHERE nome="Pedro";</em>

+--------+----------------------+----------------+
| nome  | email                     | data             |
+--------+----------------------+----------------+
| Pedro   | pedro@dominio | 2008-09-19 |
+--------+----------------------+----------------+</pre>
<p>Sendo assim podemos excluir e atualizar os dados que queremos:</p>
<pre><em>mysql&gt; UPDATE tabela1 SET email='pd@dominio2' where nome="Pedro";
mysql&gt; UPDATE tabela1 SET nome='Maria Souza' where nome='Maria';
mysql&gt; DELETE FROM tabela1 where nome='Joao Silva';</em></pre>
<p>Verifique suas alterações com o &#8220;select&#8221;.</p>
<p>O &#8220;delete&#8221; exclui os dados da tabela, agora se você deseja excluir a tabela você pode usar o &#8220;drop&#8221;, assim como na exclusão do base (vista na página anterior).</p>
<pre><em>mysql&gt; DROP TABLE tabela1;</em></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/criando-tabela-e-inserindo-atualizando-e-excluindo-dados-no-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Locking</title>
		<link>http://www.debugando.com/mysql-locking/</link>
		<comments>http://www.debugando.com/mysql-locking/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 14:03:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Locking]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=20</guid>
		<description><![CDATA[Este artigo tem como principal objetivo trazer o conhecimento e formar habilidades para o leitor em conceitos e práticas relacionados com características e tipos de bloqueios, também chamados de LOCK, que acontecem em tabelas de bancos de dados do servidor de bancos de dados MySQL.]]></description>
			<content:encoded><![CDATA[<p>Este artigo tem como principal objetivo trazer o conhecimento e formar  habilidades para o leitor em conceitos e práticas relacionados com  características e tipos de bloqueios, também chamados de <kbd><span style="color: #0066cc;">LOCK</span></kbd>, que acontecem em tabelas de bancos de  dados do servidor de bancos de dados MySQL.</p>
<p>Os bloqueios se fazem importantes a partir do momento em que se pretende  trabalhar de forma isolada com algumas tabelas dos bancos de dados para que não  haja nenhum interferência em uma determinada manipulação, evitando  concorrências, seja através do mysql client, conforme mostraremos aqui, seja em  meio a operações de uma aplicação que utiliza o MySQL como  <em>back-end</em>.</p>
<p><strong>Após ler este artigo, você estará apto a:</strong></p>
<ul>
<li>Conceituar os bloqueios ou LOCKing;</li>
<li>Tipos de bloqueios ou LOCKing;</li>
<li>Utilizar bloqueios explícitos;</li>
</ul>
<p><strong>Conceitos de Locking ou Bloqueio em Tabelas</strong></p>
<p>O servidor de bancos de dados MySQL utiliza sua arquitetura multi-threaded  para garantir conexões com ele a todos os usuários simultaneamente. Para cada  cliente que se conecta ao servidor de bancos de dados MySQL, este alocará uma  thread como um controlador. Caso um usuário, conectado através de um cliente  qualquer, acessa várias tabelas ao mesmo tempo que outros usuários, provenientes  de outros clientes, uma conexão não interfere na outra, ou seja, cada conexão  tem a sua vez de leitura ou escrita em uma mesma tabela.</p>
<p>Nesse acesso simultâneo, alguns problemas podem acontecer quando dois  clientes têm usuários manipulando o mesmo dado. Para o primeiro cliente, um  bloqueio é adquirido para que este, ao terminar de fazer suas manipulações nos  dados, tenha seu bloqueio cancelado, passando a vez para uma outra manipulação  nos mesmos dados. Em outras palavras, os bloqueios serializam os acessos ao  mesmo dado. Enquanto uma dada operação A adquire um <kbd><span style="color: #0066cc;">LOCK</span></kbd> em uma tabela X, para que B manipule  dados nessa mesma tabela, terá que esperar, dependendo do tipo de <kbd><span style="color: #0066cc;">LOCK</span></kbd> adquirido por A na tabela X e, também,  de qual operação B fará sobre a tabela X.</p>
<p>Note que alguns conflitos são percebidos em situações em que dois comandos ou  grupo manipulem a mesma linha ao mesmo tempo. Para garantir que não haja  conflitos, podemos enviar ao SGBD um pedido de bloqueios em tabelas, tanto um  bloqueio de leitura quanto um bloqueio de escrita.</p>
<p><strong>Tipos Bloqueios ou LOCKing</strong></p>
<p>Bloqueios sobre dados podem ser adquiridos de maneira <strong>implícita,  explícita ou com advisory locks</strong>:</p>
<p>Para clientes que trabalham com configurações do modo autocommit habilitado  (padrão do MySQL), o servidor MySQL adquire bloqueios implicitamente para cada  comando que chega ao servidor e cancela o bloqueio logo que este finaliza. Por  exemplo, o servidor MySQL adquire um <kbd><span style="color: #0066cc;">LOCK</span></kbd> de leitura para um comando <kbd><span style="color: #0066cc;">SELECT</span></kbd> e um <kbd><span style="color: #0066cc;">LOCK</span></kbd> de escrita para o comando <kbd><span style="color: #0066cc;">INSERT</span></kbd>. Após finalizadas as operações, o  <kbd><span style="color: #0066cc;">LOCK</span></kbd> é desfeito com um <kbd><span style="color: #0066cc;">UNLOCK TABLES</span></kbd> interno;</p>
<p>Caso um bloqueio implícito seja insuficiente, podemos bloquear as tabelas  através do comando <kbd><span style="color: #0066cc;">LOCK TABLES</span></kbd> e  soltar esse bloqueio através do comando <kbd><span style="color: #0066cc;">UNLOCK  TABLES</span></kbd>, de maneira explícita. Bloqueios explícitos normalmente são  adquiridos quando se deseja trabalhar com múltiplos comandos sem interferência  de outras operações de outros clientes conectados no mesmo banco de dados. Um  exemplo é quando precisamos trabalhar vários comandos utilizando a função  <kbd><span style="color: #0066cc;">LAST_INSERT_ID()</span></kbd>, caso não  travemos novas inserções na tabela que originou o valor retornado pela função  <kbd><span style="color: #0066cc;">LAST_INSERT_ID()</span></kbd>, pode ser que no  meio das operações com o banco dados, <kbd><span style="color: #0066cc;">LAST_INSERT_ID()</span></kbd> tenha outro valor, pois uma  nova inserção concorrente poderá acontecer;</p>
<p>Outro tipo de bloqueio é o bloqueio denominado Advisory Locking.  Diferentemente dos bloqueios implícitos e explícitos, Advisory Locks não são  gerenciados pelo servidor MySQL, os próprios clientes gerenciam os bloqueios  usando um conjunto de funções que eles próprios podem utilizar.</p>
<p><strong>Utilizando Bloqueios Explícitos</strong></p>
<p>Clientes gerenciam explicitamente o bloqueio de tabelas com duas declarações:  <kbd><span style="color: #0066cc;">LOCK TABLES</span></kbd> para adquirir  bloqueio em uma ou mais tabelas e <kbd><span style="color: #0066cc;">UNLOCK  TABLES</span></kbd> para cancelar os mesmos. A declaração <kbd><span style="color: #0066cc;">LOCK TABLES</span></kbd> fornece os nomes das tabelas que  desejamos efetuar o bloqueio e também o tipo de bloqueio que precisamos que seja  efetuado.</p>
<p>Utilizando o banco de dados world (disponível em  http://downloads.mysql.com/docs/world.sql.zip) para nossos exemplos práticos,  abaixo utilizamos <kbd><span style="color: #0066cc;">LOCK TABLES</span></kbd> para adquirir dois bloqueios ao mesmo tempo, o primeiro de leitura &#8211; <kbd><span style="color: #0066cc;">READ</span></kbd> &#8211; na tabela Country e outro de escrita  &#8211; <kbd><span style="color: #0066cc;">WRITE</span></kbd> &#8211; para a tabela City.</p>
<p><em>mysql&gt; LOCK TABLES Country READ, City WRITE;<br />
Query OK, 0 rows  affected (0.39 sec)</em></p>
<p>Caso as tabelas de uma declaração <kbd><span style="color: #0066cc;">LOCK  TABLES</span></kbd> estejam em uso exatamente no momento em que um bloqueio  explícito é solicitado, tal pedido aguardará até que possa adquiri-lo. Podemos  ver no teste feito na Figura 01 que, caso um usuário B solicite um bloqueio em  uma tabela já bloqueada por outro usuário A, em conexões simultâneas, esta  solicitação aguardará até que o bloqueio A seja cancelado, liberando a  tabela.</p>
<p><strong>Demonstração de bloqueio para a tabela City:</strong></p>
<p><img src="http://www.bizoovale.com.br/LOCK.jpg" alt="" /></p>
<p>Perceba na imagem acima que quando o usuário B se conecta ao servidor MySQL e  solicita um bloqueio de escrita &#8211; <kbd><span style="color: #0066cc;">WRITE</span></kbd> &#8211; o prompt fica aguardando até que A  libere seu bloqueio na tabela para que B adquira o seu bloqueio.</p>
<p>Um bloquieio do tipo WRITE é também conhecido como bloqueio exclusivo, ou  seja, se uma determinada conexão bloquear uma tabela com essa opção, nenhuma  outra conexão poderá ler e escrever nesta tabela, enquanto que um bloqueio READ  é um bloqueio adquirido em uma tabela de forma compartilhada, ou seja, outras  conexões somente poderão ler a tabela, não escrever.</p>
<p>Para que você utilize a declaração <kbd><span style="color: #0066cc;">LOCK  TABLES</span></kbd> para adquirir bloqueios em tabelas de um banco de dados no  servidor de bancos de dados MySQL, é necessário que o seu usuário tenha  privilégios <kbd><span style="color: #0066cc;">LOCK TABLES</span></kbd> e  <kbd><span style="color: #0066cc;">SELECT</span></kbd> para cada tabela que se  deseja adquirir o bloqueio.</p>
<p>No próximo artigo trabalharemos um estudo de caso em parceria com a linguagem  PHP para ilustrarmos um exemplo com LOCK TABLES. Tenho recebido muitos e-mails  solicitando exemplos com TRIGGERS, recurso que é muito útil em várias situações  e também publicarei um estudo de caso, aplicando tal recurso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/mysql-locking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

