sábado, 23 de enero de 2016

Solucion al método de exportación en PhpMyAdmin 4.2.12deb2


En el ciclo de Sistemas Microinformáticos y Redes del IES Gonzalo Nazareno (centro donde actualmente curso el ciclo de ASIR), los compañeros están realizando despliegues en hosting (prácticas de entornos de prueba-producción) de aplicaciones web desarrolladas en PHP.

Una de las compañeras del ciclo, estaba realizando la migración de la Base de Datos MySQL de Drupal 8.0.2 con PhpMyAdmin 4.2.12deb2, y al intentar realizar la importación de la base de datos en el servidor en “producción” se encontró con el siguiente error.


 

El error se debe a que no se encuentra la columna “name” en la declaración de la tabla, y por lo tanto, cuando establece la clave primaria con dicha columna MySQL devuelve el error anterior.

Como alternativa, le sugerí a la compañera que utilizara “mysqldump” para realizar la exportación e importación de la Base de Datos MySQL. Esta herramienta ofrece un método de exportación más fiable que PhpMyAdmin y no encontraron el error anterior al usarla.

mysqldump -u user -p dbdrupal > dbdrupal-bckp.sql

Pero a mí me quedó la duda de por qué PhpMyAdmin se comportaba de esa manera, así que me puse a investigar sobre las diferencias entre los métodos de exportación de Mysqldump y PhpMyAdmin. Lo primero que hice fue comprobar el fichero “.sql” que genera PhpMyAdmin tras la exportación y encontré lo siguiente.

CREATE TABLE key_value (
collection varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.'
`value` longblob NOT NULL COMMENT 'The value.',
PRIMARY KEY (collection,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Generic key-value storage table. See the state system for…';


ALTER TABLE key_value
ADD `name` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.';

El error se daba porque PhpMyAdmind intenta crear la estructura de la tabla completa y posteriormente realizar una modificación en ella para añadir el la columna “name”. Como comprenderéis el método de exportación de esta tabla no tiene mucho sentido.

Para que no suceda esto, hay que editar el script PHP /usr/share/phpmyadmin/libraries/plugins/export/ExportSql.class.php que se encarga de la exportación en PhpMyAdmin y modificar la siguiente línea.

if (preg_match('@CONSTRAINT|KEY@', $create_query)) {

por esta otra para que cree la columna que aparece en la restricción ante de declararla,

if (false && preg_match('@CONSTRAINT|KEY@', $create_query)) {

y comprobaremos que la exportación se realiza correctamente.

CREATE TABLE IF NOT EXISTS `key_value` (
`collection` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'A named collection of key and value pairs.',
`name` varchar(128) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'The key of the key-value pair. As KEY is a SQL reserved keyword, name was chosen instead.',
`value` longblob NOT NULL COMMENT 'The value.',
PRIMARY KEY (`collection`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Generic key-value storage table. See the state system for…';

 
Aunque esta modificación sirva para aquellos que quieran realizar las exportaciones e importaciones con PhpMyAdmin, yo recomiendo el uso de Mysqldump y la automatización de todas estas tareas mediante scripts.

domingo, 20 de septiembre de 2015

Problema con el soporte de dispositivos Realtek en Debian Jessie


Tras hacer una instalación de Debian Jessie con el kérnel Linux 3.16 y verificar que son soportados todos los dispositivos (lector de tarjetas, puertos USB, tarjetas de sonido, tarjeta gŕafica, atajos en el teclado...), he comprobado que la tarjeta de red inalámbrica de mi portátil Lenovo G50-70 no está soportada por los módulos del kérnel.

Para comprobar que dispositivo han sufrido fallos al arrancar el kérnel podemos utilizar el comando journalctl. Con la opción -k filtramos los mensajes del kérnel.

# journalctl -k|grep error
Imagen 1: Comprobando fallos en el kérnel.
 
Para ambos dispositivos de red, se necesita instalar el paquete firmware-realtek (0.43) non-free que contiene los módulos necesarios a incluir en el kérnel.

Modificamos el fichero /etc/apt/sources.list para descargar la lista de paquetes non-free (privativos), añadiendo la siguiente línea:
# nano /etc/apt/sources.list
deb http://ftp.es.debian.org/debian/ jessie main non-free
Actualizamos la lista de paquetes.
# apt-get update
Instalamos el firmware necesario.
# aptitude install firmware-realtek

Reiniciamos el equipo y comprobamos los mensajes de error proporcionados por el kérnel.

Imagen 2: Comprobando fallos en el kérnel.

Ahora, comprobamos el soporte de los dispositivos cuyos módulos se han cargado en el kérnel al arrancar el sistema.

Imagen 3: Adaptador de red inalámbrico en funcionamiento.



Después de varias horas de uso, he detectado cortes y demasiadas pérdidas de paquetes en la conexión inalámbrica. Teniendo en cuenta que utilizo la versión del kérnel Linux 3.16.7, he decidido instalar los módulos de la tarjeta de red inalámbrica del repositorio en Github https://github.com/lwfinger/rtlwifi_new que mantienen versiones más recientes de estos módulos.

Para instalar este módulo debemos seguir los siguientes pasos:

  1. Instalación de las build-essential (herramienta necesaria para la compilación del código fuente de los módulos) y del paquete git.
# aptitude install build-essential git
  1. Intalación de las Linux headers (se utilizará para recompilar el kérnel con los nuevos módulos):
# aptitude install linux-headers-`uname -r`
  1. Clonamos el repositorio con el código fuente de los módulos.
$ git clone https://github.com/lwfinger/rtlwifi_new
  1. Compilamos el c´odigo fuente de los módulos.
$ cd rtlwifi_new
$ make
  1. Instalamos los nuevos módulos.
$ su
# make install
  1. Eliminamos el módulo antiguo y cargamos el nuevo.
# rmmod rtl8723be
# modprobe rtl8723be

He estado probando los nuevos módulos durante varios días y de momento no he detectado problemas con ellos.

Fuente: http://enavas.blogspot.com.es/2015/05/problemas-con-la-wifi-con-chipset.html