Archivo de la categoría: Sysadmin

Error al ejecutar al instalar mysql-python con pip – sh: mysql_config: command not found

Instalar mysql-python con pip

Un error común al instalar mysql-python para usar mysql con django puede ser este:

pip install MySQL-python
Downloading/unpacking MySQL-python
  Real name of requirement MySQL-python is MySQL-python
  Downloading MySQL-python-1.2.4.zip (113Kb): 113Kb downloaded
  Running setup.py egg_info for package MySQL-python
    Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz
    Extracting in /tmp/tmpT2lFmq
    Now working in /tmp/tmpT2lFmq/distribute-0.6.28
    Building a Distribute egg in /home/build/MySQL-python
    /home/build/MySQL-python/distribute-0.6.28-py2.7.egg
    sh: mysql_config: command not found
    Traceback (most recent call last):
      File "", line 14, in 
      File "/home/build/MySQL-python/setup.py", line 18, in 
        metadata, options = get_config()
      File "setup_posix.py", line 43, in get_config
        libs = mysql_config("libs_r")
      File "setup_posix.py", line 25, in mysql_config
        raise EnvironmentError("%s not found" % (mysql_config.path,))
    EnvironmentError: mysql_config not found
    Complete output from command python setup.py egg_info:
    Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz

Extracting in /tmp/tmpT2lFmq

Now working in /tmp/tmpT2lFmq/distribute-0.6.28

Building a Distribute egg in /home/build/MySQL-python

/home/build/MySQL-python/distribute-0.6.28-py2.7.egg

sh: mysql_config: command not found

Traceback (most recent call last):

  File "", line 14, in 

  File "/home/build/MySQL-python/setup.py", line 18, in 

    metadata, options = get_config()

  File "setup_posix.py", line 43, in get_config

    libs = mysql_config("libs_r")

  File "setup_posix.py", line 25, in mysql_config

    raise EnvironmentError("%s not found" % (mysql_config.path,))


EnvironmentError: mysql_config not found

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /root/.pip/pip.log

La razón es falta de dependencias, tenemos que instalar el mysql-server y lo más importante para solucionar el error es instalar el paquete libmysqlclient-dev

Lo instalamos con apt:

apt-get install libmysqlclient-dev

También para evitar otros errores con pip necesitamos instalar el paquete de desarrollo de python:

apt-get install python-dev

Luego de eso ya podemos instalar mysql-python:

pip install MySQL-python
Downloading/unpacking MySQL-python
  Running setup.py egg_info for package MySQL-python
    
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python
    building '_mysql' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,4,'final',1) -D__version__=1.2.4 -I/usr/include/mysql -I/usr/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -DBIG_JOINS=1 -fno-strict-aliasing -g
    In file included from _mysql.c:44:0:
    /usr/include/mysql/my_config.h:422:0: warning: "HAVE_WCSCOLL" redefined [enabled by default]
    /usr/include/python2.7/pyconfig.h:890:0: note: this is the location of the previous definition
    gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib/x86_64-linux-gnu -lmysqlclient_r -lpthread -lz -lm -lrt -ldl -o build/lib.linux-x86_64-2.7/_mysql.so
    
Successfully installed MySQL-python
Cleaning up...

CHMOD – Permisos de escritura, lectura y ejecución.

Notación simbólica;

--- Sin permiso
--x Ejecución
-w- Escritura
-wx Escritura y Ejecución
r-- Lectura
r-x Lectura y Ejecución
rw- Lectura y Escritura
rwx Lectura, escritura y ejecución

Visto de forma numeral del 1 al 7.

0 --- Sin permiso
1 --x Ejecución
2 -w- Escritura
3 -wx Escritura y Ejecución
4 r-- Lectura
5 r-x Lectura y Ejecución
6 rw- Lectura y Escritura
7 rwx Lectura, escritura y ejecución

Bien esta es la explicación básica, luego lo de por que son 3 números (777) y demás es por que se da permisos al propietario, al grupo y a todos los demás, esto ya lo he explicado hace mucho tiempo en este enlace: como usar chmod

Es viejo todo esto y muy sencillo pero me dio por publicarlo.

Solución: Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use ‘ulimit’ to allow mysqld to use more memory or you can add more swap space

Nos podemos topar con ese error en mysql y con otros errores de memoria en procesos.

El problema es como bien dice el error que el servidor no tiene memoria cosa que puede pasar, tal vez el servidor tenga 2 gigas de ram y el mysql tenga una configuración para usar más de 5 o 6gb y por eso el error, así que la solución sería agregar memoria el server, pero…

Si el server 24 gigas de ram, o 60 o 128 y no estamos usando ni ni el 40% de la ram significa que tenemos otro problema o alguna limitación.

Lo primero es ver la salida de ulimit -a

Si no tenemos todo en ulimited o valores altos por ahí viene la restricción.

El lugar para buscar la solución esta en: /etc/security/limits.d/ o /etc/security/limits.conf

Se que no es el post más agradable y detallado que han visto pero prometo mejorarlo ya que ahora no tengo tiempo para poner capturas ni nada por el estilo, pero con eso pueden solucionar el problema.

Luego pongo información más detallada del problema en cuanto acabe de trabajar.

Buscar Archivos en Linux por Peso

Otro comando útil y muy sencillo es el de buscar por medio de la consola, el comando es find y podemos usarlo también para buscar archivos por peso o más bien listarlos por peso, por ejemplo buscar logs que pesen más de 100 MB en un directorio y sus subdirectorios.

Encontrar los archivos más pesados de una carpeta

find . -type f -size +1073741824 -ls

Ese comando nos mostrara todos los archivos que pesen más de 1GB, el peso esta en bytes.

También podemos buscar todos los que pesen menos de 1GB o de un mega ( el peso que queramos, es el mismo comando solo que en vez de poner un más ( + ) delante del número, ponemos un menos.

find . -type f -size -1073741824 -ls

tornillo

Un ingeniero que fue llamado a arreglar una computadora muy grande y extremadamente compleja… una computadora que tenia un coste de 12 millones de dolares

Sentado frente a la pantalla, oprimió unas cuantas teclas, asintió con la cabeza, murmuró algo para sí mismo y apagó el aparato. Procedió a sacar un pequeño destornillador de su bolsillo y dio vuelta y media a un minúsculo tornillo. Entonces encendió de nuevo la computadora y comprobó que estaba trabajando perfectamente.

El presidente de la compañía se mostró encantado y se ofreció a pagar la cuenta en el acto.
-¿Cuánto le debo? -preguntó

– Son mil dólares, si me hace el favor.

– ¡¿Mil dólares?! ¿Mil dólares por unos momentos de trabajo? ¿Mil dólares por apretar un simple tornillito? ¡Ya sé que mi computadora cuesta 12 millones de dólares, pero mil dólares es una cantidad disparatada! La pagaré sólo si me manda una factura perfectamente detallada que la justifique.

El ingeniero asintió con la cabeza y se fue. A la mañana siguiente, el presidente recibió la factura, la leyó con cuidado, sacudió la cabeza procedió a pagarla en el acto, sin chistar.

La factura decía:

Servicios prestados:

Apretar un tornillo…………………… 1 dólar.

Saber qué tornillo apretar…………. 999 dólares.

Servidor con carga / Load Average Alto

En forobeta han hecho una pregunta interesante sobre un servidor que tenia el load alto o sea mucha carga y además han dejado una captura, aquí dejo la captura y mi respuesta, OJO que dejo aquí la respuesta y demás por que es un tema muy interesante este:

ss (2013-05-29 at 04.57.49)

En la imagen vemos que el mysql consube bastante, en muchos casos es poro algún plugin, alguna query muy larga, algo que hace muchas consultas y en otros casos es por que el disco duro es muy lento y tiene que esta haciendo muchas lecturas y escrituras y eso retrasa la base de datos, ahora bien, esto lo vemos en donde dice WA 8%, no es mucho, pero si se mantiene siempre o siempre hay IO wait y sube hará que todo nuestro server este lento, aunque como es solo una captura no sabemos eso con exactitud.

En todo caso el Wait no es siempre provocado por mysql, así que he aquí algunas deducciones y cosas que podemos hacer o al menos que yo haría.

Que hacer cunado la carga del servidor es alta

Pues digo lo mismo que datacenter1, parece que tienes problema de IO.

Aunque depende de muchas cosas.

Puedes tener un server con un disco lento o saturado y eso genera mucha carga.

Puede ser tu CPU, he tenido muchos clientes que en un dedicado van algo mal y en un VPS mucho mejor,, claro el VPS es de calidad, con CPU XEON 2.4 y 20 MB de cache cada core, y el load no sube de 1 o 2 en cambio el dedicado un i7 de los de primera generación o un 15 o un i3 o peor aún un q8xxx

Puede ser que tu CPU sea algo flojo.
Puede que tu disco este saturado y por eso el IO tan algo.
Puede que simplemente sea mala configuración.
O puede que tus webs consuman mucho y tu server sea algo flojo, además mal configurado y el disco este saturado lectura/escritura y aparte sea hardware viejo DDR2 etc.

Solución, cambiar de servidor.
Solución 2 configurar bien el servidor.
Solución para el IO wait, intentar cachear, evitar que se use mucho el disco, principalmente en el tmp de mysql y en los caches de las webs, opciones;
– Montar tmp y caches en RAM si se tiene mucha RAM, no hay problema.
– Complementar con memcached | Intentar con varnish | Apc y xcache para reducir el consumo de PHP | deshabilitar algunos logs | checar disco duro.

En resumen, entre menos usemos el disco más rápido será todo, si tenemos SSD o SSD en raid10 o sas15k también en RAID 10 tendremos mejor rendimiento, pero si no también es mejor intentar aprovechar la RAM y montar ahí algunas carpetas.
Eso es todo, pueden ver todo el tema y las demás respuestas aquí: http://forobeta.com/dedicado/181204-cpu-load-alto-ram-baja-que.html