<?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>Dr. Danguer y Mr. Daniel &#187; MySQL</title>
	<atom:link href="http://vida.danguer.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://vida.danguer.com</link>
	<description>Un blog más de un freelancer</description>
	<lastBuildDate>Wed, 26 Oct 2011 15:54:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Dumpear todas las bases de datos</title>
		<link>http://vida.danguer.com/2009/02/19/dumpear-todas-las-bases-de-datos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dumpear-todas-las-bases-de-datos</link>
		<comments>http://vida.danguer.com/2009/02/19/dumpear-todas-las-bases-de-datos/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 01:25:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[respaldo]]></category>

		<guid isPermaLink="false">http://vida.danguer.com/?p=91</guid>
		<description><![CDATA[<a href="http://vida.danguer.com/2009/02/19/dumpear-todas-las-bases-de-datos/" title="Dumpear todas las bases de datos"></a><p>Recientemente tuve que &#8220;dumpear&#8221; todas las bases de datos de un servidor por lo que utilice un script muy simple para hacerlo:</p>
<pre name="code" class="php">
USER=root;PASS=mi_pass;for database in `echo "SHOW DATABASES" &#124; mysql --user=$USER --password=$PASS &#124; sed '1d'`; do mysqldump --user=$USER --password=$PASS $database > $database.sql; tar jcvf $database.tar.bz2 $database.sql; rm $database.sql; done
</pre>
<p>Un poco más leible:</p>
<pre name="code" class="php">
USER=root
PASS=mi_pass
for database in `echo "SHOW DATABASES" &#124; mysql --user=$USER --password=$PASS &#124; sed '1d'`
do
    mysqldump --user=$USER --password=$PASS $database > $database.sql
    tar jcvf $database.tar.bz2 $database.sql
    rm $database.sql
done
</pre>
<p>Básicamente manda todas las bases de datos y quita la linea inicial (que siempre es Databases) y por cada base de datos invoca mysqldump y por último lo comprime con bunzip2 para obtener un archivo muy pequeño y por supuesto elimina las &#8220;fuentes&#8221; de sql.</p>
]]></description>
			<content:encoded><![CDATA[<a href="http://vida.danguer.com/2009/02/19/dumpear-todas-las-bases-de-datos/" title="Dumpear todas las bases de datos"></a><p>Recientemente tuve que &#8220;dumpear&#8221; todas las bases de datos de un servidor por lo que utilice un script muy simple para hacerlo:</p>
<pre name="code" class="php">
USER=root;PASS=mi_pass;for database in `echo "SHOW DATABASES" | mysql --user=$USER --password=$PASS | sed '1d'`; do mysqldump --user=$USER --password=$PASS $database > $database.sql; tar jcvf $database.tar.bz2 $database.sql; rm $database.sql; done
</pre>
<p>Un poco más leible:</p>
<pre name="code" class="php">
USER=root
PASS=mi_pass
for database in `echo "SHOW DATABASES" | mysql --user=$USER --password=$PASS | sed '1d'`
do
    mysqldump --user=$USER --password=$PASS $database > $database.sql
    tar jcvf $database.tar.bz2 $database.sql
    rm $database.sql
done
</pre>
<p>Básicamente manda todas las bases de datos y quita la linea inicial (que siempre es Databases) y por cada base de datos invoca mysqldump y por último lo comprime con bunzip2 para obtener un archivo muy pequeño y por supuesto elimina las &#8220;fuentes&#8221; de sql.</p>
]]></content:encoded>
			<wfw:commentRss>http://vida.danguer.com/2009/02/19/dumpear-todas-las-bases-de-datos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ordenación Explícita en MySQL</title>
		<link>http://vida.danguer.com/2008/06/26/ordenacion-explicita-en-mysql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ordenacion-explicita-en-mysql</link>
		<comments>http://vida.danguer.com/2008/06/26/ordenacion-explicita-en-mysql/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 07:55:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Orden Explícito]]></category>
		<category><![CDATA[ORDER BY]]></category>

		<guid isPermaLink="false">http://vida.danguer.com/?p=31</guid>
		<description><![CDATA[<a href="http://vida.danguer.com/2008/06/26/ordenacion-explicita-en-mysql/" title="Ordenación Explícita en MySQL"></a><p>Algunas veces (por suerte no es frecuente) es necesario ordenar de manera explícita en MySQL, se necesita darle una lista de valores que será el orden y no necesariamente por los valores de un campo; por ejemplo puede ser una lista arbitraria de <code>ID's</code></p>
<p>Para lograr esto me he encontrado con lo siguiente: <a title="Orden Explícito en MySQL" href="http://www.bin-co.com/database/mysql/explict_order_by.php" target="_blank">http://www.bin-co.com/database/mysql/explict_order_by.php</a></p>
<p>Básicamente lo que explica es que para ordenar de manera explícita, se escriben los valores explícitamente de la forma:</p>
<pre>columna1=valor1 DESC, columna2=valor2 DESC, ..., columnaN=valorN DESC</pre>
<p>Es muy importante usar <code>DESC</code> para tenerlos en el orden escrito, si escribimos <code>ASC</code> entonces tendremos un orden inverso (el último valor será el primero), si mezclamos <code>DESC</code> y ASC, tendremos que los <code>DESC</code> se harán conforme se escribieron y los <code>ASC</code> en sentido inverso despúes de los valores <code>DESC</code>.</p>
<p>Por ejemplo si tenemos una tabla &#8216;<code>tabla_prueba</code>&#8216; que tiene una columna <code>id</code> y queremos ordenar por los valores <code>2,1,10,7</code> en ese orden debemos hacer los siguiente:</p>
<pre>SELECT * FROM tabla_prueba WHERE id IN(2,1,10,7)
      ORDER BY id=2 DESC, id=1 DESC, id=10 DESC, id=7 DESC</pre>
<p>Si se omite el <code>WHERE</code> nos mostrará todos los renglones de la tabla y solamente al tope los valores ordenados como hemos especificado.</p>
]]></description>
			<content:encoded><![CDATA[<a href="http://vida.danguer.com/2008/06/26/ordenacion-explicita-en-mysql/" title="Ordenación Explícita en MySQL"></a><p>Algunas veces (por suerte no es frecuente) es necesario ordenar de manera explícita en MySQL, se necesita darle una lista de valores que será el orden y no necesariamente por los valores de un campo; por ejemplo puede ser una lista arbitraria de <code>ID's</code></p>
<p>Para lograr esto me he encontrado con lo siguiente: <a title="Orden Explícito en MySQL" href="http://www.bin-co.com/database/mysql/explict_order_by.php" target="_blank">http://www.bin-co.com/database/mysql/explict_order_by.php</a></p>
<p>Básicamente lo que explica es que para ordenar de manera explícita, se escriben los valores explícitamente de la forma:</p>
<pre>columna1=valor1 DESC, columna2=valor2 DESC, ..., columnaN=valorN DESC</pre>
<p>Es muy importante usar <code>DESC</code> para tenerlos en el orden escrito, si escribimos <code>ASC</code> entonces tendremos un orden inverso (el último valor será el primero), si mezclamos <code>DESC</code> y ASC, tendremos que los <code>DESC</code> se harán conforme se escribieron y los <code>ASC</code> en sentido inverso despúes de los valores <code>DESC</code>.</p>
<p>Por ejemplo si tenemos una tabla &#8216;<code>tabla_prueba</code>&#8216; que tiene una columna <code>id</code> y queremos ordenar por los valores <code>2,1,10,7</code> en ese orden debemos hacer los siguiente:</p>
<pre>SELECT * FROM tabla_prueba WHERE id IN(2,1,10,7)
      ORDER BY id=2 DESC, id=1 DESC, id=10 DESC, id=7 DESC</pre>
<p>Si se omite el <code>WHERE</code> nos mostrará todos los renglones de la tabla y solamente al tope los valores ordenados como hemos especificado.</p>
]]></content:encoded>
			<wfw:commentRss>http://vida.danguer.com/2008/06/26/ordenacion-explicita-en-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejabberd y mod_archive</title>
		<link>http://vida.danguer.com/2008/06/10/ejabberd-y-mod_archive/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ejabberd-y-mod_archive</link>
		<comments>http://vida.danguer.com/2008/06/10/ejabberd-y-mod_archive/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 00:12:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Trabajo]]></category>
		<category><![CDATA[ejabberd]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[mod_archive]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://vida.danguer.com/?p=19</guid>
		<description><![CDATA[<a href="http://vida.danguer.com/2008/06/10/ejabberd-y-mod_archive/" title="Ejabberd y mod_archive"></a><p>Hace algo de tiempo conocí <a title="Descargar Ejabberd " href="http://www.ejabberd.im" target="_blank">ejabberd</a>, es un servidor de Jabber de alto desempeño; inicialmente debo admitir que no me gustó mucho principalmente porque está escrito en <a title="Página de Erlang" href="http://www.erlang.org/" target="_blank">Erlang</a> y que tenía poca documentación, además de que cometer un error de configuración mostraba muchisimos datos sin sentido para programadores de <em>Erlang</em> y nada en lenguaje &#8216;humano&#8217;.<br />
Ahora el proyecto ha madurado considerablemente y una de las ventajas por la que sigo utilizando <em>Ejabberd</em> es que es el único servidor <a title="Página de Jabber" href="http://www.jabber.org" target="_blank">Jabber</a> open source en manejar clustering.</p>
<p>Recientemente me pidieron instalar un módulo para almacenar la historia de las conversaciones, algo que hace por ejemplo Google Talk (que está implementado en Jabber), este es el protocolo: <a title="XEP-0136 Almacenar historial de conversaciones" href="http://www.xmpp.org/extensions/xep-0136.html" target="_blank">XEP-0136</a> y utilizar la opción de guardar conversaciones automáticamente (sin intervención del usuario para solicitar que se almacene).<br />
Hay diversos modulos para implementar esto en ejabberd, pero buscando me encontré que <a title="Página de mod_archive" href="http://www.ejabberd.im/mod_archive" target="_blank">mod_archive</a> es el mejor y el que se encuentra con desarrollo activo.<br />
El problema es que prácticamente no existe documentación ni información de si por ejemplo funcionaría en Ejabberd 2 que es la versión del servidor que utilizo.</p>
<p>A prueba y error y con algunos pequeños documentos que me encontré descubrí que si funciona en la versión 2.0, a continuación vienen los pasos para hacerlo funcionar con MySQL:</p>
<ul>
<li>Compilar ejabberd para que acepte odbc<br />
<code>./configure --enable-odbc</code></li>
<li>Descargar los módulos de ejabberd<br />
<code>svn co http://svn.process-one.net/ejabberd-modules</code></li>
<li>Compilar el módulo interno de MySQL de los módulos descargados de ejabberd
<pre>cd mysql/trunk
./build.sh
cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/</pre>
</li>
<li>Compilar el módulo de archivo (mod_archive)
<pre>cd mod_archive/trunk
./build.sh
cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/</pre>
</li>
<li>Editar el archivo de configuración de Ejabberd</li></ul><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<a href="http://vida.danguer.com/2008/06/10/ejabberd-y-mod_archive/" title="Ejabberd y mod_archive"></a><p>Hace algo de tiempo conocí <a title="Descargar Ejabberd " href="http://www.ejabberd.im" target="_blank">ejabberd</a>, es un servidor de Jabber de alto desempeño; inicialmente debo admitir que no me gustó mucho principalmente porque está escrito en <a title="Página de Erlang" href="http://www.erlang.org/" target="_blank">Erlang</a> y que tenía poca documentación, además de que cometer un error de configuración mostraba muchisimos datos sin sentido para programadores de <em>Erlang</em> y nada en lenguaje &#8216;humano&#8217;.<br />
Ahora el proyecto ha madurado considerablemente y una de las ventajas por la que sigo utilizando <em>Ejabberd</em> es que es el único servidor <a title="Página de Jabber" href="http://www.jabber.org" target="_blank">Jabber</a> open source en manejar clustering.</p>
<p>Recientemente me pidieron instalar un módulo para almacenar la historia de las conversaciones, algo que hace por ejemplo Google Talk (que está implementado en Jabber), este es el protocolo: <a title="XEP-0136 Almacenar historial de conversaciones" href="http://www.xmpp.org/extensions/xep-0136.html" target="_blank">XEP-0136</a> y utilizar la opción de guardar conversaciones automáticamente (sin intervención del usuario para solicitar que se almacene).<br />
Hay diversos modulos para implementar esto en ejabberd, pero buscando me encontré que <a title="Página de mod_archive" href="http://www.ejabberd.im/mod_archive" target="_blank">mod_archive</a> es el mejor y el que se encuentra con desarrollo activo.<br />
El problema es que prácticamente no existe documentación ni información de si por ejemplo funcionaría en Ejabberd 2 que es la versión del servidor que utilizo.</p>
<p>A prueba y error y con algunos pequeños documentos que me encontré descubrí que si funciona en la versión 2.0, a continuación vienen los pasos para hacerlo funcionar con MySQL:</p>
<ul>
<li>Compilar ejabberd para que acepte odbc<br />
<code>./configure --enable-odbc</code></li>
<li>Descargar los módulos de ejabberd<br />
<code>svn co http://svn.process-one.net/ejabberd-modules</code></li>
<li>Compilar el módulo interno de MySQL de los módulos descargados de ejabberd
<pre>cd mysql/trunk
./build.sh
cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/</pre>
</li>
<li>Compilar el módulo de archivo (mod_archive)
<pre>cd mod_archive/trunk
./build.sh
cp ebin/*.beam /directorio_ejabberd/var/lib/ejabberd/ebin/</pre>
</li>
<li>Editar el archivo de configuración de Ejabberd para habilitar odbc<br />
<code>{odbc_server, {mysql, "direccion_servidor", "base_de_datos", "usuario", "contraseña"}}.</code></li>
<li>Editar el archivo para agregar mod_archive (parte de <code>{modules</code>,&#8230;)
<pre>{mod_archive_odbc,  [{database_type, "mysql"},
{default_auto_save, true},
{enforce_default_auto_save, false},
{default_expire, infinity},
{enforce_min_expire, 0},
{enforce_max_expire, infinity},
{replication_expire, 31536000},
{session_duration, 1800},
{wipeout_interval, 86400}
]},</pre>
</li>
<li>Crear la base de datos utilizando el archivo: <code>ejabberd-modules/mod_archive/trunk/src/mod_archive_odbc_mysql.sql</code></li>
</ul>
<p>Hay que hacer notar que el archivo sql es para <a title="Mysql Versión 5" href="http://dev.mysql.com/downloads/mysql/5.0.html" target="_blank">MySQL 5</a> y posteriores (para utilizarlo con una versión anterior hay que eliminar la parte de <strong>triggers</strong>), además el archivo crea una base de datos llamada ejabberd, si se necesita otro nombre editarlo para ya sea eliminar la parte de crear o cambiar el nombre de la base de datos que será creada; utiliza el prefijo <code>archive_</code> para sus tablas.</p>
<p>Iniciar (o reiniciar) el servicio de ejabberd y a partir de ahora todas las conversaciones serán guardadas en mysql.</p>
]]></content:encoded>
			<wfw:commentRss>http://vida.danguer.com/2008/06/10/ejabberd-y-mod_archive/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

