17 de agosto de 2010

Cortar archivos con split


Pues resulta que en un script php he intentado pasar un archivo de texto a un array con el comando file( ) y el archivo es algo grande ya que tiene unos 19MB y unas 100.000 lineas. De modo que me ha salido un error al ejecutar el script:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes) in /home/pp/globalWebSpider/gws-mantenimiento_spider01/60-z5log-no_mysql_saved-recuperator.php on line 85

Una solucción es cortar el archivo en otros más pequeños:
Para esto esta split:
- Que corta archivos en otros mas pequeños de un tamaño deternimado:

#split -b(tamaño) archivo.grande archivo.
archivos resultantes:
archivo.aa
archivo.ab
archivo.ac
etc...
-Pero en mi caso al ser un archivo de texto es mejor cortarlos en archivitos de un determinano número de lineas, ... digamos 10000 y con la extensión numérica:

#split -d -10000 archivo.grande archivo.
archivos resultantes:
archivo.01
archivo.02
archivo.03
etc...
Ref.: http://linuxmanpages.com/man1/split.1.php

16 de agosto de 2010

Codificar y decodificar caracteres html con php


Los caracteres especiales del código html pueden ser un problema al manejarlos en programación, variables, SQL y por la inyección de código malicioso.

En php estos caraceres se pueden codificar con: htmlspecialchars( )
y luego reponerse con: htmlspecialchars_decode( )
dejando de ser un problema.

Hacking webs con Google Gruyere


Gruyere es una wiki de métodos hacking a paginas web y la posibilidad de probarlos en un sevidor adhod de Google.

http://google-gruyere.appspot.com/

14 de agosto de 2010

Reconocimiento de imagenes en linux

Para el reconocimiento de imagenes he encontrado dos aplicacones interesantes:

# compare de ImageMagick http://www.rpublica.net/imagemagick/index.html
# libpuzzle-php

Decimales en MySQL

DECIMAL(M,D)

M: nº total de digitos
D: nº de decimales

Por ejemplo:
0,123456 DECIMAL(7,6)
123,4567 DECIMAL(7,4)

El maximo que podemos asignar a M y D es 65.
Si hay mas decimales que los asignados trunca el dato.

Ref.: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

18 de julio de 2010

activar logs en MySQL


Editar el archivo: /etc/mysql/my.cnf
descomentar la línea: log = /var/log/mysql/mysql.log
reiniciar el servidor mysql: /etc/init.d/mysql restart

Y MySQL ya comienza a logear.
Ojo ya que parece ser un gran devorador de recursos del sistema.

14 de junio de 2010

Clonando micra server


El espectacular rendimiento de mi pico-servidor micra ha hecho que su disco duro se este quedando algo pequeñito. Inicialmente le puse un disco duro de 40GB para probar la instalación del sistema debian lenny lo he ido ampliando y finalmente se ha resultado ser el sistema definitivo. Ha crecido de forma exponencial y ha llegado el momento de ampliar su capacidad a un disco duro de 160GB.

Para este ampliación voy a hacer una copia integra del sistema (hd1) al nuevo disco (hd2)


hd1
(40GB) sistema actual, instalado en micra.
hd2 (160GB) montado en soporte conectado a micra por USB.

Protocolo de copia integra del sistema debian lenny 5.0 a otro disco duro, ... y que arranque!!!

1) Picho hd2 en soprte USB a micra
2) Miro como lo ha reconocido:
# tail /var/log/messages

Esta vez ha sido en /dev/sdb
3) Veamos las partciones de HD2
# parted /dev/sdb
(parted) print

Model: VP2160 (scsi)
Disk /dev/sdb: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number Start End Size File system Flags
1 0,00B 160GB 160GB fat32
4) Borramos particion existente y creamos partición primaria boot flag linux ext3 y una extendida linux-swap de 150MB en HD2
Uso la aplicación gráfica gparted
Verificar que /dev/sdb NO esta montada.
(parted) print
Model: VP2160 (scsi)
Disk /dev/sdb: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos


Number Start End Size Type File system Flags
1 32,3kB 160GB 160GB primary ext3 boot
2 160GB 160GB 156MB extended
5 160GB 160GB 156MB logical linux-swap
5) Shutdow. Quitamos todos dispositivos memoria USB Pinchamos solo USB con BT-4.

6) Reboot. Entramos en la bios de micra, redireccionamos el boot al USB para arrancar desde BT-4 liveUSB. Reinicamos.

7) Ok, estamos en BT-4.
!!BT4 NO ha detectado el disco duro de micra, hd1!! ???
Pruebo con BT-3 ... y SI lo reconoce ???
8) pinchamos HD2 en USB, ... lo reconoce.

9) Montamos los discos:
# mount /dev/hda1 /mnt/hd1
# mount /dev/sdb1 /mnt/hd2
10) copia integra de hd1 a hd2 de todos los subdirectorios y archivos con sus permisos y atributos:
# cd /mnt/hd1
# cp -av * /mnt/hd2
... paciencia que esto lleva su tiempo... (en este caso unas 9h para 28GB!!!)
11) Instalación de grub en hd2
# grub-install --root-directory=/mnt/hd2 sdb
problema: como BT3 esta basado es slackware no tiene grub sino lilo !!!
ok, arranco con hd1 e instalo grub ...
uuhy. esto no ha funcionado, !!!

Pruebo a copiar los primeros 446 bites del disco hd1 al hd2, el bootloader. # dd if=/dev/hd1 of=/dev/hd2 bs=446 count=1

Tampoco funciona !!!
... ???
11bis) Instalando grub, despues de mirar media internet y probar todo lo que he pillado, esto es lo único que me ha funcionado:
  • Arranco micra con el live usb BT4
  • Pincho el disco HD2 de 160GB con el zócalo usb
  • ejecuto grub y tecleo:
  • #grub
  • >find /boot/grub/stage1
  • (hd1,0)
  • root (hd1,0)
  • setup (hd1)
  • Con esto ya he instalado grub en HD2
  • por fin!!!

k) Apoteosis final:
  • Paro el sistema.
  • Quito el usb de BT4, cambio la bios para que arranque del disco duro.
  • ...y ...yuuupi, funciona
  • un clon perfecto de micra pero con 160GB.

13 de junio de 2010

Linux MBR backup and restore


MBR backup:

dd if=/dev/hdx of=MBR-backup.file bs=512 count=1

MBR restore:

dd if=MBR-backup.file of=/dev/hdx bs=512 count=1

7 de junio de 2010

Aumenta en número máximo de conexiones a MySQL


En scripts php con acceso a MySQL en los que ejecuto varias copias, o mejor dicho ...muchas copias!!!, en backgroung llega un momento que me aparece el error:

Too Many Connections

Para ver el nº de conexiones desde la consola MySQL:

mysql> show full processlist;
+-----+------+-----------+----+---------+------+-------+------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+----+---------+------+-------+------+
| 388 | user | localhost | db | Sleep | 394 | | NULL |
| 389 | user | localhost | db | Sleep | 184 | | NULL |
| 394 | user | localhost | db | Sleep | 222 | | NULL |

|...


+-----+------+-----------+----+---------+------+-------+------+
51 rows in set (0.00 sec)

En este caso el nº de procesos "durmientes" o persistentes en MySQL va creciendo paulatinamente de modo que aumentar el nº permitido de conexiones a MySQL no funcinará (Sol-01), hay que NO permitir las conexiones persistentes desde php (Sol-02)


Las dos soluciones:

Sol-01) Aumentar el número de conexiones permitidas a MySQL:

editar el archivo
/etc/mysql/my.cnf

Descomentano o aumentando el nº:
max_connections = 100

Sol-02) No permitir conexiones persistentes a MySQL desde php:

editar el archivo:

/etc/php5/apache2/php.ini [MySQL] ; Allow or prevent persistent links. mysql.allow_persistent = On (lo cambiamos a Off)

y

/etc/mysql/my.cnf
thread_cache = 16
(by default esta en 8)


reiniciar el servidor MySQL y Apache2 .. y solucionado.

UPDATE:
Finalmente para aprovechar las ventajas de las conexiones persistentes intentando optimizar el rendimiento del servidor MySQL sin llegar al máximo de conexiones permitidas he optado por limitar el número de conexiones persistente:

editando el archivo /etc/php5/apache2/php.ini
poniendo:

[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = On

; Maximum number of persistent links. -1 means no limit.
mysql.max_persistent = 10

; Maximum number of links (persistent + non-persistent). -1 means no limit.
mysql.max_links = 15

Ref.:
Aumentando el numero de conexiones maximas a Mysql

Stop Scroll in MySQL


Dentro de la consola MySQL:

mysql> \P more;
PAGER set to 'more;'
mysql>

ó

mysql> \P less;
PAGER set to 'less;'
mysql>

y ya se pude hacer la consulta y el resultado se presentara en modo more o less.