Cómo conectarse en perl a una base de datos mysql

Supongamos que tenemos una base de datos mysql llamada ‘personas’ a la que podemos acceder con usuario ‘usudb’ y contraseña ‘clave’.

La base de datos contiene una tabla llamada ‘tabla’ con los siguientes campos:

  • nombre varchar(32)
  • edad integer
  • fecha_alta date

Podemos conectarnos a la base de datos, leer y escribir registros con el siguiente código en perl:

Como vemos, la librería DBI es la encargada de implementar la conectividad a mysql desde perl.

Cómo enviar un email desde un script perl

En ocasiones es interesante poder enviar un email desde nuestra aplicación. Un ejemplo puede ser el caso de un proceso que se ejecuta periódicamente en un servidor (quizá mediante una entrada en cron), y que avisa mediante un email cuando se produce alguna incidencia durante su ejecución.

 

En Perl, la manera más sencilla de enviar un email es llamando a una aplicación externa de envío de correos por línea de comandos que esté  disponible en el sistema, como pueden ser ‘mailx’, ‘mutt’ o el propio ‘sendmail’ en sistemas Linux:

Envío de email mediante a una llamada a sendmail

Para ello, podemos definir una función ‘send_email’ como sigue:

De este modo, podemos enviar un email mediante la llamada:

En la rutina send_email, el segundo argumento de la llamada a open(MAIL …) comienza con el caracter “|” (pipe). Así se dispara la ejecución del comando sendmail, y se asocia su standard input a la variable “MAIL”. De este modo, las siguientes llamadas “print MAIL  …” envían el texto  al programa sendmail.

El texto que se envía a sendmail consta de una cabecera de tres líneas con el remitente, el destinatario y el asunto del mensaje, seguida del cuerpo del mensaje. La cabecera debe estar separada del cuerpo por una línea en blanco, y por eso la tercera línea que se envía (con el asunto del mensaje) finaliza en “nn”.

Envío de emails con ficheros adjuntos

El mecanismo de llamar a un comando del sistema mediante una canalización (pipe) se puede aplicar a cualquier otro comando que queramos ejecutar. En concreto, si tenemos necesidad de enviar mensajes más elaborados (por ejemplo, mensajes HTML, o mensajes que incluyen ficheros adjuntos) podemos llamar a otro cliente de correo en lugar de a sendmail.  mutt es un ejemplo de cliente de correo disponible en sistemas linux que puede ser usado para añadir adjuntos a los mensajes que enviamos.

En funcion de las características de nuestro sistema, podemos también utilizar los comandos ‘mail’, ‘mailx’ o cualquier otro cliente de correo que ofrezca un interfaz de línea de comandos.

Otras posibilidades para enviar emails desde Perl

La biblioteca CPAN de módulos perl también dispone de numerosos módulos para el envío de correo, entre los que se encuentran Net::SMTP, Email::Sender, Email::MIME, MIME::Lite, etc.

Por ejemplo, podemos enviar un mensaje HTML utilizando MIME::Lite con el siguiente código:

Sigue leyendo

Como Detectar Errores y Comprobar el Estado de tu Disco Duro en Linux

Detecta Sectores Defectuosos en el Disco con badblocks

Otra utilidad muy interesante que no debes dejar de conocer es badblocks, que forma parte del proyecto e2fsprogs, un set de herramientas y utilidades de mantenimiento para GNU/Linux y enfocado a sistemas de archivos ext2, ext3 y ext4.

Con  badblocks podrás hacer un check completo de tu disco, y te indicará al finalizar el número de sectores defectuosos que encuentra. La sintaxis básica para su utilización la tienes aquí:

$ sudo badblocks [parámetros] [ruta de la partición]

Los parámetros generalmente son letras que indican diferentes modalidades de escaneo. La ruta del volumen generalmente será la ruta de una partición. Para conocer el nombre las diferentes particiones y volúmenes de tu disco, puedes utilizar esto:

$ sudo fdisk -l

Previamente a utilizar badblocks, es muy importante desmontar la partición o el volumen sobre el cual se pretende hacer el análisis. Para desmontar una unidad o partición concreta, y conociendo ya su nombre y su ruta, puedes valerte del siguiente comando:

$ sudo unmount [ruta de la partición]

Para hacer un escaneo de la partición del sistema, lo más recomendable sera hacera mediante un LiveCD con alguna distro Linux, y desmontando la partición del sistema operativo antes del análisis.

Visto todo esto, si te parece podemos ver algunos ejemplos de uso de badblocks con diferentes parámetros de escaneo.

Uso Básico

$ sudo badblocks /dev/sda1

Es la opción estándar y la más simple si no dominas mucho su sintaxis. Con esta opción, badblocks hace un check de solo lectura, y no muestra ninguna salida de pantalla mientras no se encuentren sectores defectuosos.

Uso Básico con Verbose

$ sudo badblocks -v /dev/sda1

Igual que la opción estándar, pero con la opción verbose habilitada [-v]. En este caso  badblocks nos informará por pantalla del progreso del análisis, así como del numero de bloques defectuosos que haya encontrado al final del análisis.

Lectura y Escritura – No Destructivo

$ sudo badblocks -nsv /dev/sda1

Básicamente hace un escaneo de lectura y escritura no destructivo [-n], mostrando una barra de progreso [-s] y con la opción verbose habilitada [-v] para mostrar información sobre los sectores detectados. La partición en este caso es la sda1.

Tienes mucha más información del uso y las diferentes opciones de badblocks en esta completa wiki de Arch Linux. Además, para un vistazo de todas las opciones, puedes acceder a la guía oficial tecleando man badblocks por la terminal.

Detecta Errores e Inconsistencias en el Sistema de Archivos con e2fsck

e2fsprogs, utilidad llamada e2fsck, que en este caso hará un análisis del sistema de archivos a nivel lógico, en busca de errores e inconsistencias. La sintaxis es muy similar a la de badblocks.

$ sudo e2fsck [parametros] [ruta de partición]

Al igual que con badblocks, es muy importante desmontar antes la partición que vayamos a analizar. A continuación, algunos ejemplos:

 Uso Básico

$ sudo e2fsck /dev/sda1

Esta es la opción más básica, y en este caso hará un análisis a nivel lógico del sistema de archivos de la partición sda1.

Uso Combinado con Badblocks

$ sudo e2fsck -c /dev/sda1

Esta opción es especialmente interesante, ya que al mismo tiempo de busca errores en el sistema de archivos, también utiliza badblocks, con un test de solo lectura, para buscar bloques defectuosos a nivel físico.

Esta opción permitirá que e2fsck marque cualquier sector defectuosos encontrado, y prevenga que sea utilizado por el sistema de archivos para almacenar archivos para almacenar información.

 

Copiar base de datos MySql sin Backup

Hoy en mi trabajo tuve la necesidad de copiar una base de datos mysql de un servidor a otro sin poder utilizar las funciones de backup y restore, ya que el servidor principal, donde recidía la base de datos se daño, y el sistema operativo no funcionaba…… Pensé que con sólo copiar la carpeta de la base de datos en el directorio de datos de mysql era suficiente. Luego de hacer me fijé que no se mostraban ninguna de las tablas con el motor de almacenamiento InnoDB…. Tras unas horas de búsqueda, descubrí que también tenía que copiar en el directorio de mysql los siguientes archivos:

  • ib_logfile1
  • ibdata1
  • ib_logfile0

Estos son los archivos de datos y logs poseen información sobre la configuración de InnoDB.

Al hacer el reemplazo de la carpeta data se obtiene el siguiente mensaje de error:

ErrorTable ‘performance_schema.session_variables’ doesn’t exist

Ejecutando la siguiente instrucción de línea de comando soluciona este error:

mysql_upgrade -u root -p --force

Luego reiniciar el servicio de mysql:

sudo /bin/systemctl restart  mysqld.service

 

WARNING : Failed to connect to lvmetad. Falling back to device scanning

At boot time, the following message can pop up :

WARNING : Failed to connect to lvmetad. Falling back to device scanning

This message is displayed, whether running Debian stable or Debian testing.

To get rid of this message, disable lvmetad in /etc/lvm/lvm.conf


use_lvmetad=0

Update the initramfs for the current kernel your system uses :

update-initramfs -k $(uname -r) -u; sync

Reboot your system and you’re done !

CONFIGURING STATIC IP ADDRESSES ON UBUNTU 17.10 SERVERS

Ubuntu 17.10 network configuration is completely changed. Have you heard of NetPlan? Probably not, but if you have, then you’re a step ahead of many. NetPlan is a new network configuration tool introduced in Ubuntu 17.10 to manage network settings.

It can be used by writing a simple YAML description of the required network interfaces with what they should be configured to do; and it will generate the required configuration for a chosen renderer tool. Sigue leyendo

File is locked – how to unlock

Searching: server replied locked owncloud

You can’t access files because they are locked and you find such errors in your logfile:

{“reqId”:”0DijSqEkfOg2iyh9VD8J”,”remoteAddr”:”xx.xx.xx.xx”,”app”:”webdav”,”message”:”Exception: {\”Message\”:\”HTTP\\\/1.1 423 \\\”path\\\/file.extension\\\” is locked\”,\”Exception\”:\”OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Exception\\\\FileLocked\”,\”Code\”:0,\”Trace\”:\”#0

If you’re running the ownCloud 8.2.x branch make sure that you’re using at least 8.2.2 (previous versions had a bug causing this issue).

Sigue leyendo

Configurar el Firewall UFW en Ubuntu

UFW, una de las alternativas mas simples a la hora de habilitar el cortafuegos del Kernel Linux en Ubuntu y en otras distros derivadas. UFW es un pequeño script creado por los desarrolladores de Ubuntu con el fin de simplificar casi hasta el máximo extremo la gestión de Netfilter/Iptables, el cortafuegos presente en núcleo de Linux.

Sigue leyendo