Jan 09

Simple Invoices: factures i prou

Reading time: 1 – 2 minutes

simple invoices logoA través de twitter i més concretament gràices a un enllaç que va publicar l’Oriol he descobert una aplicació que té molt bona pinta, es tracta de SimpleInvoices. La seva finalitat poder fer i gestionar les factures, l’aplicació esta molt lluny d’un ERP o quelcom semblant simplement fa factures. Aquesta és la gràcia, hi ha molts autònoms que no volem grans eines complicades sinó simplement una forma senzilla i ajustable a les nostres necessitats.

Poder fer factures, pressupostos, guardar-los, imprimir-los, exportar-los a PDF i enviar-los als clients i ben poca cosa més. Tot plegat accessible via web, basat en LAMP i Open Source com no podia ser de cap altre manera. Per si tot això no fos poc també suporta diversos idiomes a l’interficie i ens podem personalitzar les plantilles de les factures.

De fet, encara no he començat a usar l’eina ni he decidit del tot si ho faré o no, però ús puc assegurar que té força números que ho acabi fent amb aquesta eina.

Jul 13

Tuning d’un servidor MySQL

Reading time: 2 – 2 minutes

Aquesta última setmana he tingut alguns problemes de rendiment amb un servidor MySQL, de fet, hi havia en concret una taula que tenia fins a 53 milions de registres, malgrat el seu espai tampoc era tan gran al voltant de 4Gb l’accés de lectura i escriptura a la taula era molt lent, sobretot per funcions de filtrat una mica complexes.

Doncs bé, coses que he aprés que potser ús poden anar bé són:

  1. Cal habilitar les ‘slow_query_logs’ i tenir indexats tots els camps que apareixen després dels WHERE’s, això millora considerablement el rendiment.
  2. Cal incrementar el innodb_log_file_size fins a un 25% del valor del innodb_buffer_pool_size; això redueix considerablement el temps d’escriptura.
  3. Usar JFS, com a sistema de fitxers del directori ‘data’ del MySQL. És substancialment més ràpid que el ext3. Exemples de rendiment.
  4. Posar els logs en un disc dedicat, diferent del disc que té les dades.
  5. Usar el paràmetre ‘noatime’ en la partició que conté les de dades del MySQL.
  6. Deshabilitar la partició de SWAP, usar un ‘innodb buffer spool’ ben gran, sempre pensant amb la RAM disponible.
  7. Montar els directori temporal de MySQL sobre una partició RAM.
  8. Reduir el key_buffer size a 1-2Mb si no s’usen taules MyISAM.
  9. Usar el kernel 2.6 amb SMP amb processador multi-cos, és especialment important per aplicaions multithread com el MySQL.
  10. Usar RAID0 (stripped disks) i usar un servidor de replicació per les còpies de seguretat. Millora els temps d’I/O del disc, com és lògic.
Jan 20

GreenSQL: protecció contra SQL injection

Reading time: 1 – 2 minutes

GreenSQL logoGràcies a l’Aitor descubreixo el GreenSQL, una aplicació en forma de dimoni que fa funcions de reverse proxy entre les aplicacions que usen MySQL i el servidor de MySQL. Després de revisar la pàgina web, una presentació i veure una demostració del seu panell de control he de dir que l’eina té molt bona pinta. El seu mètode de funcionament ens pot portar a alguns mals de caps ja que fins que les whitelist no tenen suficient informació de com funcionen les nostres aplicacions alguns falsos positius en els seus anàlisis ens poden fer tornar una mica bojos. Malgrat això en alguns entorns crec que l’eina pot ser molt útil. El que no he sabut trobar per enlloc és un benchmark de quin és el rendiment d’aquest proxy ja que per entorns de molta càrrega crec que podria convertir-se en un coll d’ampolla. Finalment una altre informació que no he sabut trobar és on guarda la seva base de dades d’informació??? ja que el volum d’aquesta pot ser molt gran i seria curiós saber si ho fa també sobre MySQL o sobre fitxers de text, tipus sqlite o BerkeleyDB, per exemple.

Oct 13

MySQL crash

Reading time: 2 – 2 minutes

Per un dia que es posa a ploure i estic a casa treballant, tot un plaer per cert. S’ha posat a fer llamps i trons fins que ha marxat la llum uns 2s en un llamp que ha caigut ben aprop i el pitjor és que el SAI no ha tingut temps de fer saltar la bateria i se m’ha reiniciat el server. Cosa que tampoc seria tan greu si no fos perquè he perdut quasi 1h per poder re-iniciar el MySQL… bé per si a algú li passa algo semblan aquí tenius els sintomes i el remei.

Després de mirar els fitxers de logs de /var/log/mysql tan el mysql.err com el mysql.log. No he trobat res que m’indiques quin era l’error de fet, podriem dir que no hi havia res que parles d’erros. Així que m’he decidit a passar al mètode radical i veure quins errors donaven les cirdes a sistema que feia al llençar el servei:

strace -f -o mysql.trace /etc/init.d/mysql start

L’únic que he trobat és un petit inidcador de que el InnoDB no s’iniciava bé. Gràcies a aquesta pista he arribat fins als formus de gentoo on he trobat aquest post: MySQL doesn’t start anymore after upgrade to 4.0.25 tot i que le títol no és gaire indicatiu del meu problema, en un comentari he trobat la solució:

cd /var/lib/mysql
rm ib_logfile0
rm ib_logfile1
rm ibdata1

Tornem a llençar el servei i tot solucionat, s’havien corromput uns fitxers de logs que usa l’storage del motor de MySQL i al borrar-los s’han tornat a generar. Quin patiment per tanta tonteria.