4 de agosto de 2011

Optimizar velocidad de búsqueda en MySQL

Creo recordar que para tablas pequeñas MySQL es mas rápido que PostgreSQL, y con grandes tablas la cosa es al contrario.
En cualquier caso yo siempre engo la impresión que podria ir mas rápido.
Aqui hay unos buenos consejos para optimizar las bases e datos y aumentar la velocidad de consulta.

Eliminar registros duplicados en tablas MySQL

Es cosa habitual que en nuestras tablas MySQL tengamos registros duplicados.
Una forma de eliminarlos es crear una nueva tabla agrupando por el campo con valores duplicados:

mysql> CREATE TABLE spider02 AS SELECT * FROM spider01 GROUP BY ip;

La nueva tabla spider02 será cópia de spider01 pero no tendrá ningún valor repetido en el campo ip.

2 de agosto de 2011

Crear usuario MySQL

Acceder a mysql con usuario root.

mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'user_pass';
Query OK, 0 rows affected (0,00 sec)

mysql> GRANT ALL ON *.* TO 'user'@'localhost';
Query OK, 0 rows affected (0,00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0,00 sec)

Usuario con password, con privilegios completos, solo puede acceder desde localhost.

Actualización Lenny to Squeeze: problema con php5

Al actualizar de Debian 5.0 Lenny a Debian 6.0 Squeeze, comenzaron a aparecer mensajes de error en scripts php5 que antes funcionaban perfectamente.

Solución: modificar php.ini:
Ojo hay dos php.ini:

Este controla php en el servidor apache2
/etc/php5/apache2/php.ini

Este controla los script php ejecutados desde consola.
/etc/php5/cli/php.iniGuardar como borrador

En mi caso la actualizaión cambió bien el 1º pero no el segundo, apareciento cantidad de notes y warnning al ejecutar un script php que funcionaba correctamente y sin avisos en Debian 5.0 Lenny.

Para evitar la tromba de avisos hay que cambiar las líneas de php.ini que controlan los avisos:

Modificar en: /etc/php5/apache2/php.ini y /etc/php5/cli/php.ini
error_reporting = E_ALL & ~E_NOTICE

Cuando se ejecuten script php en apache2 es mejor que no aparezcan mensajes de error por motivos de seguridad.

/etc/php5/apache2/php.ini
display_errors = Off

23 de julio de 2011

Actualizar debian 5.0 Lenny a debian 6.0 Squeeze en micra

Ha llegado el momento de actualizar el sistema operativo de mi servidor micra deDebian Lenny 5.0 a Debian Squeeze 6.0.
He realizado los siguientes pasos:

1) copia de seguridad de todo el disco duro:
He optado por hacer una imagen en una carpeta compartida en otro
equipo, arrancando micra con BT5, montando la carpeta compartida con smbmount y copiando la imagen vía ethernet:
# dd if=/dev/hda of=/micra_bck/micra160GB.bck
Esto le ha costado 48 horas!!!

2) Ya puestos he ampliado la partición swap, aumentando su tamaño y reduciendo la del sistema.
Ya que cuando cambié el sistema de HD ( Clonando Micra Server ) solo dejé 160MB de swap, lo que es muy poco ya que micra solo tiene 500MB de RAM.

He usado gparted arrancado desde un liveUSB con BT5.
La modificación de las particiones se hace de modo trasparente, sencillo y sin perdida de información

3) Actualizacion del sistema:

3.1) Actualización de los repositorios:
Modificar el fichero /etc/apt/sources.list

He usado estos repositorios para debian 6.0 Squeeze:

deb http://ftp.es.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.es.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

deb http://volatile.debian.org/debian-volatile squeeze/volatile main
deb-src http://volatile.debian.org/debian-volatile squeeze/volatile main

deb http://download.webmin.com/download/repository sarge contrib

#Google Chrome
deb http://dl.google.com/linux/deb/ stable main

3.2) Actualizamos base datos paquetes
# aptitude update

3.3) Actualizamos sistema base
# apt-get upgrade

He mantenido los ficheros de configuración

3.4) Actualizamos la distribución completa
# apt-get dist-upgrade

4) Últimos toques:
- He tenido que desinstalar PostgreSQL-8.3
# aptitude remove postgresql-8.3 postgresql-client-8.3

4.1) No arranca MySQL:

Desinstalo version anterior, instalo nueva MySQL-5.1
# aptitude remove --purge mysql-server-5.0
# aptitude install mysql-server

Modifico /etc/mysql/my.cnf
comento la línea: skip-bdb

.. y MySQL arranca en Debian 6.0 Squeeze

4.2) Actualizo el orden de arranque en GRUB2
Lo mas sencillo es usar starupmanager,
aunque si lo quieres modificar a mano el menu-lst de grub2:

Notas:
- Recomiendan hacerlo a pasos para controlar mejor el proceso.
- Recomiendan usar apt en vezde aptitude

20 de julio de 2011

Copiar una tabla en MySQL


Si quieres copiar una tabla con todos sus registros en una base de datos MySQL:

CREATE TABLE newtable AS (SELECT * FROM oldtable)

esto es muy útil, por ejemplo, para hacer una backup de una tabla antes de probar modificaciones en los campos.

17 de julio de 2011

Macros y Basic LibreOffice


Y que hay de VisualBasic en Linux ...
Pues el paquete LibreOffice tiene la posibilidad de programar macros con diferentes lenguajes como Phyton, JavaScript, BeanShell y Basic LibreOffice.

Aqui hay un Tutorial sobre Macros en LibreOffice con algo de info sobre Basic LibreOffice.

Y en este enlace de OpenOffice:

16 de julio de 2011

VisualBasic: incluir comillas en variables


Para usar las dobles comillas de forma literal se usa Chr(34).

Dim a As String
a = Chr(34) & pp & Chr(34)

VisualBasic: activar SOLVER en macros y código VB


Error de copilacion al intentar ejecutar un macro o código VB con SOLVER:

Para resolver este problema, cree una referencia al complemento Solver. Para crear una referencia al complemento Solver, siga estos pasos:
  1. Inicie el Editor de Visual Basic (presione opción + F11).
  2. En el menú Herramientas, haga clic en referencias.
  3. Seleccione Solver y, a continuación, haga clic en Aceptar. Nota: El archivo Solver.xla se encuentra en Microsoft Office 98 complementos carpeta
La próxima vez que ejecute la macro, no se produce este problema.

Verificar esto en cada fichero Excel con macros SOLVER.

VisualBasic: Traductor de coordenadas de celdas


Hay dos tipos de determinar las celdas:

Cells([nº de fila],[nº de columna])
Range("direccion de la celda")

en el primer caso usa números, v.g.: Cells(1,5)
en el segundo usa letras y números, v.g.: Range("A3")

Hay casos en que es necesario pasar de una notación a otra:

From numbers to address

Private Sub CommandButton1_Click()

Dim fil As Integer
Dim col As Integer
Dim add As String

fil = InputBox("Número de Fila ?")
col = InputBox("Número de Columna ?")

add = Cells(fil, col).Address

ActiveSheet.Cells(1, 1) = "Fila:"
ActiveSheet.Cells(2, 1) = "Columna:"
ActiveSheet.Cells(3, 1) = "Address:"

ActiveSheet.Cells(1, 2) = fil
ActiveSheet.Cells(2, 2) = col
ActiveSheet.Cells(3, 2) = add

End Sub


Para el caso contrario se podrían usar las funciones:

ActiveCell.Row
ActiveCell.Column