<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Tema: MYSQL | Sentido Web</title>
<link>http://sentidoweb.com/</link>
<description>Actualidad y maneras de hacer en Internet (programación, diseño, tendencias, negocios...)</description>
<language>es</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Tue, 07 Oct 2008 12:00:00 +0000</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.2</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>Borrar queries lentas en MySQL5.1</title>
<description><![CDATA[<p>MySQL 5.1 añade la posibilidad de <a href="http://dev.mysql.com/doc/refman/5.1/en/events.html">programar eventos</a>, pudiendo así ejecutar tareas de forma automática. Una de las tareas más comunes es la de eliminar consultas lentas que aún no han acabado de ejecutarse.</p>

<p>Esta tarea se puede realizar mediante un prodecimiento almacenado que realiza un <em>PROCESS LIST</em> y que comprueba las sentencias con más de 200s (configurable) que están en estado <em>executing</em> o las que está en <em>Spleep</em>.</p>

<p><a href="http://forge.mysql.com/tools/tool.php?id=168">Purge process list from slow queries/idle connections</a> </p>

<p>Vía / <a href="http://datacharmer.blogspot.com/2008/10/using-event-scheduler-to-purge-process.html">The Data Charmer</a></p>]]></description>
<link>http://sentidoweb.com/2008/10/07/borrar-queries-lentas-en-mysql51.php</link>
<guid>http://sentidoweb.com/2008/10/07/borrar-queries-lentas-en-mysql51.php</guid>
<category>MYSQL</category>
<pubDate>Tue, 07 Oct 2008 12:00:00 +0000</pubDate>
</item>
<item>
<title>Revision Engine: engine para MySQL con control de cambios</title>
<description><![CDATA[<p><strong>Revision Engine</strong> es un motor para MySQL que permite llevar el control de cambios en los datos de las tablas. Cuando se necesita llevar un registro de las modificaciones realizadas por los inserts y updates, normalmente se realiza mediante programación. Este engine permite que esa tarea sea ajena al programador y que se realice automáticamente por la base de datos.</p>
<p>Existen tres formas de realizar el control de versiones:</p>
<ul><li>Uso de dos tablas: una para los datos actuales y otra para el histórico. Las consultas son rápidas pero los updates lentos, ya que hay que quitar de una tabla y ponerla en otra.</li>
<li>Usando una tabla en la que se guardan los datos actuales y los históricos, la escritura es más rápida que la anterior, pero la lectura es más lenta porque hay que buscar en un volumen de datos mayor.</li>
<li>Usando tablas internas para guardar los cambios realizados en las columnas, no a nivel de la fila completa. Este caso aún no está disponible y lo realizarán en versiones posteriores.</li></ul>
<p><a href="http://www.ddengine.org/versioneng">Revision Engine</a></p>
<p>Vía / <a href="http://datacharmer.blogspot.com/2008/09/cool-idea-revision-engine.html">The Data Charmer</a></p>]]></description>
<link>http://sentidoweb.com/2008/10/01/revision-engine-engine-para-mysql-con-control-de-cambios.php</link>
<guid>http://sentidoweb.com/2008/10/01/revision-engine-engine-para-mysql-con-control-de-cambios.php</guid>
<category>MYSQL</category>
<pubDate>Wed, 01 Oct 2008 12:00:00 +0000</pubDate>
</item>
<item>
<title>Mejora en las consultas anidadas en MySQL6</title>
<description><![CDATA[<p>Buena noticia de rendimiento en la futura versión de MySQL. En este caso se trata de las consultas anidadas dentro de MySQL, pongamos un ejemplo.</p>
<p>Si tenemos esta consulta:</p>
<pre><code lang="sql">select title, from_date, to_date
  from titles
 where emp_no in
      (select emp_no
         from employees
        where first_name = 'Mary'
          and last_name = 'Sluis'
      )</code></pre>
<p>En MySQL5 (usando estos <a href="https://launchpad.net/test-db/+download">datos</a>) obtendríamos el resultado (1 fila) en 7.88 segundos, mientras que en MySQL6 tardaría 0.13 segundos.</p>
<p>El motivo parece ser que MySQL transforma la subconsulta en un join.</p>
<p><a href="http://datacharmer.blogspot.com/2008/09/drizzling-mysql.html">Drizzling MySQL</a></p>]]></description>
<link>http://sentidoweb.com/2008/09/29/mejora-en-las-consultas-anidadas-en-mysql6.php</link>
<guid>http://sentidoweb.com/2008/09/29/mejora-en-las-consultas-anidadas-en-mysql6.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 29 Sep 2008 14:50:00 +0000</pubDate>
</item>
<item>
<title>Consejos para mejorar la paginación</title>
<description><![CDATA[<p>La paginación es algo de lo más costoso a la hora de realizar una búsqueda. Si nos ponemos en el caso de miles de registros con ordenación por cierto campo, la búsqueda puede ser una query muy costosa. Si además unimos el cálculo total de registros encontrados, la página puede tardar mucho en devolverse.</p>
<p>Debido a ello, para agilizar este tipo de páginas existen unos consejos a tener en cuenta:</p>
<ul><li><strong>Cachea todo lo que se pueda</strong>: el caché evita que se realicen consultas a la BD.</li>
<li><strong>No muestres todos los resultados</strong>: Google no lo hace y nadie se queja por ello. Limita el total de registros a 100 o 500, nadie visita más de 10 páginas normalmente.</li>
<li><strong>No muestres el total de páginas o páginas intermedias</strong>: ofrece tan solo en enlace a "página siguiente", para lo cual puedes obtener 21 registros y mostrar solo 20, así si la consulta te devuelve menos de 21 es que no hay página siguiente.</li>
<li><strong>Estima el número de resultados</strong>: esto también lo hace Google, en vez de calcular el número exacto, se trata de estimar el número aproximado de resultados. Usa EXPLAIN para obtener ese número, puedes usar el campo rows como aproximación.</li></ul>
<p><a href="http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/">Four ways to optimize paginated displays</a></p>]]></description>
<link>http://sentidoweb.com/2008/09/25/consejos-para-mejorar-la-paginacion.php</link>
<guid>http://sentidoweb.com/2008/09/25/consejos-para-mejorar-la-paginacion.php</guid>
<category>MYSQL</category>
<pubDate>Thu, 25 Sep 2008 17:30:00 +0000</pubDate>
</item>
<item>
<title>mylvmbackup: copias de seguridad para MySQL</title>
<description><![CDATA[<p>Ya hace tiempo <a href="http://sentidoweb.com/2007/09/26/consejos-iniciales-para-mysql.php">hablé</a> de <strong>mylvnbackup</strong> como utilidad para realizar copias de seguridad de MySQL cuando se trataba de entorno Linux. Esta vez hablaré con un poco más de profundidad aprovechando que acaban de lanzar la versión 0.10 de esta aplicación.</p>

<p>Esta aplicación bloqueará para lectura todas las tablas y vaciará el caché de disco del servidor, creando un snapshot del directorio de datos de MySQL, desbloqueando las tablas de nuevo. El snapshot toma poto tiempo y cuando se ha realizado el servidor puede continuar funcionando normalmente mientras que el fichero actual de backup continúa.</p>

<p>El snapshot se monta en un directorio temporal y se comprime usando el comando tar, con un formato de fichero así: <em>YYYYMMDD_hhmmss_mysql.tar.gz</em>.</p>

<p><a href="http://lenz.homelinux.org/mylvmbackup/">mylvmbackup</a></p>]]></description>
<link>http://sentidoweb.com/2008/09/22/mylvmbackup-copias-de-seguridad-para-mysql.php</link>
<guid>http://sentidoweb.com/2008/09/22/mylvmbackup-copias-de-seguridad-para-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 22 Sep 2008 12:45:00 +0000</pubDate>
</item>
<item>
<title>Columnas virtuales en MySQL</title>
<description><![CDATA[<p>MySQL está trabajando en un tipo nuevo de columnas las cuales pueden resultar muy útiles. Se trata de columnas virtuales, las cuales tienen un valor automático dependiente de una función.</p>
<p>Con un ejemplo se puede entender mejor:</p>
<pre><code lang="sql">create table t1 (
  a enum('A','B','C'),
  b int,
  c virtual int as (if(a<>'A',null,b)) stored unique);</code></pre>
<p>Como se puede ver, el campo c tendrá valor null si el campo a es distinto de 'A' y el valor del campo b en el resto de los casos.</p>
<p>¿Qué nos puede aportar esto?, pues mayor velocidad en queries que usen índices funcionales, simplicidad en queries usadas con frecuencia y el uso de índices basados en funciones.</p>
<p>También se podría hacer mediante el uso de triggers, pero si el dato se actualiza, este permanerá igual con triggers y cambiará automáticamente con el uso de las columnas virtuales. También se podrían usar vistas, pero es menos eficiente ya que se crean más objetos usando vistas.</p>
<p>Existen algunas restricciones como que solo se puede usar en MyISAM y InnoDB, pero aún así, estoy deseando poder echar mano a este tipo de columnas.</p>
<p><a href="http://forge.mysql.com/wiki/MySQL_virtual_columns_preview">MySQL virtual columns preview</a></p>
]]></description>
<link>http://sentidoweb.com/2008/09/11/columnas-virtuales-en-mysql.php</link>
<guid>http://sentidoweb.com/2008/09/11/columnas-virtuales-en-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Thu, 11 Sep 2008 19:00:00 +0000</pubDate>
</item>
<item>
<title>GreenSQL: proxy que protege MySQL de SQL injections</title>
<description><![CDATA[<p><strong>GreenSQL</strong> es un reverse proxy que se sitúa entre tu aplicación web y la BD de MySQL y evita que se realicen ataques de SQL injection en nuestra BD.</p>

<p><img alt="greensql.png" src="http://sentidoweb.com/img/2008/09/greensql.png" width="420" height="96" class="center" /></p>

<p>La lógica está basada en la evaluación de los comandos SQL usando una matriz de puntuación de riesgo, a parte de bloquear comandos de administración (DROP, CREATE, ...). </p>

<p>Tiene muy buena pinta, claro que habría que hacer unas pruebas de rendimiento para ver si es más eficiente evitar los ataques mediante código o mediante GreenSQL.</p>

<p><a href="http://www.greensql.net/">GreenSQL</a></p>]]></description>
<link>http://sentidoweb.com/2008/09/08/greensql-proxy-que-protege-mysql-de-sql-injections.php</link>
<guid>http://sentidoweb.com/2008/09/08/greensql-proxy-que-protege-mysql-de-sql-injections.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 08 Sep 2008 11:00:00 +0000</pubDate>
</item>
<item>
<title>Tareas típicas para el mantenimiento de MySQL</title>
<description><![CDATA[<p>Tareas que se deberían ejecutar para el mantenimiento de la base de datos de MySQL:</p>
<ul><li><strong>Backup</strong>: hay que realizarlo de los ficheros de datos, ficheros de logs de transacciones, ficheros de configuración y logs binarios.</li>
<li><strong>Limpiar los logs binarios</strong>: Se puede hacer mediante <em>my.conf</em> usando <em>expire_logs_days</em> o mediante la sentencia <em>PURGE MASTER LOGS</em>. Eso sí, no purgar los logs que necesiten los esclavos, ni borrarlos mediante un comando de un fichero (<em>rm bin-log.*</em>).</li>
<li><strong>Optimizar las tablas</strong>: después de inserts y updates las tablas se llenan de espacio inútil, por lo que es necesario optimizar las tablas usando <em>OPTIMIZE TABLE</em>.</li>
<li><strong>Vaciar la caché</strong>: cuando se ejecutan selects con tamaños diferentes de resultados, el cache se defragmenta, lo cual hace necesario que se vacie la cache (<em>FLUSH QUERY CACHE</em>).</li>
<li><strong>Rotar los logs binarios</strong>: los logs binarios solo se rotan por tamaño, si quieres hacerlo en un determinado momento se debería usar la sentencia <em>FLUSH LOGS</em>.</li></ul>
<p><a href="http://shinguz.blogspot.com/2008/08/typical-automated-mysql-maintenance.html">Typical automated MySQL maintenance jobs</a></p>]]></description>
<link>http://sentidoweb.com/2008/08/26/tareas-tipicas-para-el-mantenimiento-de-mysql.php</link>
<guid>http://sentidoweb.com/2008/08/26/tareas-tipicas-para-el-mantenimiento-de-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Tue, 26 Aug 2008 13:15:00 +0000</pubDate>
</item>
<item>
<title>SQL Buddy: administrador web de MySQL</title>
<description><![CDATA[<p>SQL Buddy es un administrador de MySQL que usa Ajax para cargar los datos por lo que el número de consultas disminuye. A parte de mostrar una interfaz sencilla de usar.</p>

<p><img alt="sqlbuddy.png" src="http://sentidoweb.com/img/2008/08/sqlbuddy.png" width="392" height="263" /></p>

<p>Permite importar y exportar datos, administración y gestión de tablas y algunos detalles más. No parece ser tan completo como phpMyAdmin, pero sí que es suficiente para lo que muchas veces necesitamos.</p>

<p>Es compatible con PHP 4.3+, MySQL 4+, Firefox, Safari, Opera 9.5 e Internet Explorer 7.</p>

<p><a href="http://www.sqlbuddy.com">SQL Buddy</a></p>]]></description>
<link>http://sentidoweb.com/2008/08/25/sql-buddy-administrador-web-de-mysql.php</link>
<guid>http://sentidoweb.com/2008/08/25/sql-buddy-administrador-web-de-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 25 Aug 2008 13:00:00 +0000</pubDate>
</item>
<item>
<title>Drizzle: MySQL para la web</title>
<description><![CDATA[<p>Drizzle es de lo que más se está hablando últimamente dentro de los blogs sobre MySQL. Se trata de un motor de base de datos pensado para la web. Basado en MySQL 6, pretende llegar a ser más rápido que MySQL y admitir mucha concurrencia. </p>
<p>En base inicial, creado por una comunidad de desarrolladores liderado por uno de los fundadores y desarrolladores iniciales de MySQL, elimina de MySQL6 los triggers, procedimientos almacenados, las vistas, control de acceso, caché de queries y prepared statements, tan solo MyISAM con índices FULLTEXT.</p>
<p>Tiene muy buena pinta, ahora a ver a qué llega el desarrollo.</p>
<h3>Más información</h3>
<ul><li><a href="http://openquery.com.au/products/about-drizzle">About Drizzle</a></li>
<li><a href="http://krow.livejournal.com/602409.html">Drizzle, Clouds, "What If?"</a></li>
<li><a href="http://monty-says.blogspot.com/2008/07/what-if.html">What if</a></li>
<li><a href="http://drizzle.wikia.com/wiki/MySQL_Differences">MySQL Differences</a></li>
</ul>
<p><a href="https://launchpad.net/drizzle">Drizzle</a></p>]]></description>
<link>http://sentidoweb.com/2008/07/24/drizzle-mysql-para-la-web.php</link>
<guid>http://sentidoweb.com/2008/07/24/drizzle-mysql-para-la-web.php</guid>
<category>MYSQL</category>
<pubDate>Thu, 24 Jul 2008 09:30:00 +0000</pubDate>
</item>
<item>
<title>Flexviews: vistas materializadas en MySQL</title>
<description><![CDATA[<p>Las vistas materializadas son aquellas vistas que se almacenan en una tabla de la base de datos. MySQL no provee de estas vistas, pero <strong>Flexviews</strong> lo simula mediante procedimientos almacenados que se ejecutan mediante triggers.</p>

<p><a href="http://flexviews.sourceforge.net/">Flexviews</a></p>]]></description>
<link>http://sentidoweb.com/2008/07/14/flexviews-vistas-materializadas-en-mysql.php</link>
<guid>http://sentidoweb.com/2008/07/14/flexviews-vistas-materializadas-en-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Mon, 14 Jul 2008 15:15:00 +0000</pubDate>
</item>
<item>
<title>Script PHP para sincronizar estructuras de BD MySQL</title>
<description><![CDATA[<p>Interesante script que permite dados dos estructuras del MySQL, obtenidas por ejemplo usando un mysqldump, ver que diferencias hay entre ambos y devuelve las queries necesarias para igualar las dos estrucuras.</p>
<p>Por ejemplo, si tenemos la estructura siguiente:</p>
<pre><code lang="sql">CREATE TABLE IF NOT EXISTS `archive` (
  `id` int(11) NOT NULL auto_increment,
  `topFile` varchar(255) NOT NULL default '',
  `msgId` int(11) NOT NULL default '0',
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `topTpl` varchar(255) NOT NULL default '',
  `file` varchar(255) NOT NULL default '',
  `template` varchar(255) NOT NULL default '',
  `instanceKey` varchar(255) NOT NULL default '',
  `orderby` varchar(25) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;</code></pre>
<p>Y este otro:</p>
<pre><code lang="sql">CREATE TABLE IF NOT EXISTS `archive` (
  `id` int(11) NOT NULL auto_increment,
  `topFile` varchar(255) NOT NULL default '',
  `msgId` int(11) NOT NULL default '0',
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `topTpl` varchar(255) NOT NULL default '',
  `file` varchar(255) NOT NULL default '',
  `template` varchar(255) NOT NULL default '',
  `instanceKey` varchar(255) NOT NULL default '',
  `encoding` varchar(50) NOT NULL default '',
  `orderby` varchar(255) NOT NULL default '',
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10256 ;</code></pre>
<p>Nos devolvería las siguientes sentencias:</p>
<pre><code lang="sql">ALTER TABLE `archive` ADD `encoding` varchar(50) NOT NULL;
ALTER TABLE `archive` MODIFY `orderby` varchar(255) NOT NULL;
ALTER TABLE `archive` MODIFY `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP;
ALTER TABLE `archive` DROP PRIMARY KEY;</code></pre>
<p>Un script bastante útil cuando, debido al despiste, tenemos diferencias entre la base de datos de desarrollo y la de producción y no sabemos qué cambios hemos realizado.</p>
<p><a href="http://www.phpclasses.org/browse/package/4615.html">Database structure synchronizer</a></p>]]></description>
<link>http://sentidoweb.com/2008/06/18/script-php-para-sincronizar-estructuras-de-bd-mysql.php</link>
<guid>http://sentidoweb.com/2008/06/18/script-php-para-sincronizar-estructuras-de-bd-mysql.php</guid>
<category>PHP</category>
<pubDate>Wed, 18 Jun 2008 17:45:00 +0000</pubDate>
</item>
<item>
<title>Monolith: consola DBA para MySQL</title>
<description><![CDATA[<p><strong>Monolith</strong> es una consola para DBAs de MySQL que programa y automatiza backups para MySQL y monitoriza un número ilimitado de servidores para medir y mejorar su rendimiento. Además genera gráficas para ser utilizadas para informes.</p>

<p><img alt="monolith.png" src="http://sentidoweb.com/img/2008/06/monolith.png" width="390" height="212" class="center" /></p>

<p>Entre las características que ofrece nos encontramos con la posibilidad de crear enviar informes locales de backups a la consola de monolith, múltiples gráficas, informes HTML, exportación de datos, integración con VisualMining, backups remotos, envío de informes por email.</p>

<p><a href="http://themattreid.com/wordpress/?p=58" rel="bookmark" title="Permanent Link to Monolith - MySQL DBA Console 1.4 Released">Monolith - MySQL DBA Console 1.4 Released</a></p>]]></description>
<link>http://sentidoweb.com/2008/06/06/monolith-consola-dba-para-mysql.php</link>
<guid>http://sentidoweb.com/2008/06/06/monolith-consola-dba-para-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Fri, 06 Jun 2008 13:30:00 +0000</pubDate>
</item>
<item>
<title>jHeidi: cliente MySQL multiplataforma</title>
<description><![CDATA[<p><strong>jHeidi</strong> es una versión de <a href="http://sentidoweb.com/2007/07/18/heidisql-cliente-para-mysql.php">Heidi</a> realizado en Java para que se pueda ejecutar en otras plataformas y no solo en Windows.</p>
<p><img alt="jheidi.png" src="http://sentidoweb.com/img/2008/05/jheidi.png" width="350" height="280" class="center" /></p>
<p>Entre las características que ofrece nos encontramos con:</p>
<ul><li>Navegador de bases de datos, tablas y campos</li>
<li>Crear, actualizar y borrar BD, tablas, campos e índices</li>
<li>Ventana para queries</li>
<li>Administrador de usuarios</li>
<li>Mantenimiento de tablas</li>
<li>Administrador de conexiones</li>
<li>Exportar datos (CSV, HTML, ...)</li>
<li>Importar CVS</li></ul>
<p><a href="http://www.heidisql.com/jheidi/">jHeidi</a></p>]]></description>
<link>http://sentidoweb.com/2008/05/21/jheidi-cliente-mysql-multiplataforma.php</link>
<guid>http://sentidoweb.com/2008/05/21/jheidi-cliente-mysql-multiplataforma.php</guid>
<category>MYSQL</category>
<pubDate>Wed, 21 May 2008 09:30:00 +0000</pubDate>
</item>
<item>
<title>mytop: clon de top para MySQL</title>
<description><![CDATA[<p><strong>mytop</strong> es una aplicación para la línea de comandos que ofrece información de MySQL al estilo del comando top de Unix. La información que devuelve está dividida en dos partes, una primera que muestra la información del servidor y otra que mostraría la información que proporciona el ejecutar PROCESS LIST: id, usuario, query, tiempo, host y base de datos.</p>

<p><img alt="mytop.png" src="http://sentidoweb.com/img/2008/04/mytop.png" width="450" height="296" class="center" /></p>

<p>Funciona para las versiones de MySQL 3.22.x, 3.23.x, y 4.x (no sé si funciona para 5 porque la ultima versión es de febrero del 2007) y se necesita disponer de Perl 5.005, Getopt::Long, DBI y DBD::mysql, y Term::ReadKey para CPAN.</p>

<p><a href="http://jeremy.zawodny.com/mysql/mytop/">mytop</a></p>]]></description>
<link>http://sentidoweb.com/2008/04/17/mytop-clon-de-top-para-mysql.php</link>
<guid>http://sentidoweb.com/2008/04/17/mytop-clon-de-top-para-mysql.php</guid>
<category>MYSQL</category>
<pubDate>Thu, 17 Apr 2008 17:30:00 +0000</pubDate>
</item>


</channel>
</rss>